finzdata-open-models / index.html
FinzData's picture
Point the strategy example at benchmark-beating strategies
144ae63 verified
Raw History Blame Contribute Delete
16.2 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FinzData for Open Models</title>
<meta name="description" content="Give Qwen, Kimi, GLM, DeepSeek, Llama, gpt-oss, Gemma, MiniMax and Mistral point-in-time market data, macro and backtests through function calling and MCP. No API key needed to start.">
<style>
:root{--navy:#1f3a5f;--navy-2:#2c5282;--slate:#64748b;--ink:#0f172a;--muted:#475569;--line:#e2e8f0;--bg:#ffffff;--soft:#f5f8fc;--code:#0b1726;--code-ink:#e6edf6;--accent:#0e7c66}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif}
a{color:var(--navy-2)}
.wrap{max-width:980px;margin:0 auto;padding:0 20px}
header{padding:40px 0 8px}
.mark{font-size:30px;font-weight:800;letter-spacing:-.5px}
.mark .f{color:var(--navy)} .mark .d{color:var(--slate);font-weight:600}
.tag{color:var(--muted);margin:4px 0 0}
h1{font-size:clamp(28px,4.4vw,42px);line-height:1.15;margin:28px 0 12px;letter-spacing:-.6px}
.lead{font-size:18px;color:var(--muted);max-width:760px}
.pill{display:inline-block;background:#e8f5f1;color:var(--accent);border:1px solid #b8e2d6;border-radius:999px;padding:6px 14px;font-weight:700;font-size:14px;margin:18px 0 6px}
section{padding:26px 0;border-top:1px solid var(--line)}
h2{font-size:22px;margin:0 0 12px}
.tabs{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 14px}
.tabs button{border:1px solid var(--line);background:var(--soft);color:var(--ink);padding:8px 14px;border-radius:8px;font:600 14px/1 inherit;cursor:pointer}
.tabs button[aria-selected=true]{background:var(--navy);border-color:var(--navy);color:#fff}
pre{background:var(--code);color:var(--code-ink);padding:16px 18px;border-radius:10px;overflow-x:auto;font:13.5px/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;margin:0}
.code{position:relative}
.copy{position:absolute;top:8px;right:8px;background:#22344d;color:#dbe7f5;border:0;border-radius:6px;padding:5px 10px;font:600 12px/1 inherit;cursor:pointer}
.note{color:var(--muted);font-size:14px;margin:10px 0 0}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}
.card{border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:#fff}
.card b{display:block;margin-bottom:4px}
ul.q{padding-left:20px;margin:0} ul.q li{margin:4px 0}
.ds{display:flex;flex-wrap:wrap;gap:8px}
.ds a{font-size:13px;border:1px solid var(--line);border-radius:999px;padding:4px 10px;text-decoration:none;background:var(--soft)}
.try{border:1px solid var(--line);border-radius:12px;padding:18px;background:var(--soft)}
.row{display:flex;gap:10px;flex-wrap:wrap}
.row select,.row input{font:15px/1.3 inherit;padding:10px 12px;border:1px solid #cbd5e1;border-radius:8px;background:#fff;color:var(--ink)}
.row input{flex:1 1 320px;min-width:0}
.row button{font:700 15px/1 inherit;padding:10px 18px;border:0;border-radius:8px;background:var(--navy);color:#fff;cursor:pointer}
.row button:disabled{opacity:.6;cursor:wait}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0}
.chips button{font:13px/1.2 inherit;border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 10px;cursor:pointer;color:var(--muted)}
#log{font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);margin:14px 0 0;white-space:pre-wrap;word-break:break-word}
#answer{margin:12px 0 0;white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;display:none;overflow-x:auto}
footer{border-top:1px solid var(--line);padding:24px 0 40px;color:var(--muted);font-size:14px}
@media (max-width:560px){h1{margin-top:20px}.lead{font-size:16px}}
</style>
</head>
<body>
<div class="wrap">
<header>
<div class="mark"><span class="f">Finz</span><span class="d">Data</span></div>
<p class="tag">Built for AI, quants, data scientists and financial analysts who backtest. Clean data. Real insights. Real alpha.</p>
</header>
<h1>Market data for every open model</h1>
<p class="lead">Give Qwen, Kimi, GLM, DeepSeek, Llama, gpt-oss, Gemma, MiniMax and Mistral point-in-time market data, macro vintages and server-side backtests through plain function calling. Your model fetches real numbers, cites the dataset, and never has to guess.</p>
<span class="pill">No API key needed to start</span>
<p class="note">Install and ask: your model gets FinzData's free AI preview (the last 6 months of data) with no account and no FinzData key. For more, a free API key (email only) at <a href="https://finzdata.com/account">finzdata.com/account</a> gives 12 months; full history is at <a href="https://finzdata.com/shop">finzdata.com/shop</a>. Then set <code>FINZDATA_API_KEY</code>. Nothing else changes.</p>
<section>
<h2>Try it live</h2>
<div class="try">
<div class="row">
<select id="model" aria-label="Model"><option value="glm">GLM 5.3 Flash</option></select>
<input id="q" placeholder="Ask a market question" maxlength="600" value="How did managed money net positioning in WTI crude oil change over the last 3 months?">
<button id="ask">Ask</button>
</div>
<div class="chips" id="chips"></div>
<div id="log"></div>
<div id="answer"></div>
<p class="note">Runs on open models with FinzData's free AI preview: no sign-up, no key. Answers are research, not investment advice.</p>
</div>
</section>
<section>
<h2>Pick your model</h2>
<div class="tabs" role="tablist" id="tabs"></div>
<div class="code"><button class="copy" id="copy">Copy</button><pre id="snippet"></pre></div>
<p class="note" id="snote"></p>
</section>
<section>
<h2>Any MCP-capable agent</h2>
<div class="code"><button class="copy" data-for="mcp">Copy</button><pre id="mcp">{
"mcpServers": {
"finzdata": { "url": "https://api.finzdata.com/mcp", "type": "streamable-http" }
}
}</pre></div>
<p class="note">Works with Qwen-Agent, the Kimi CLI, Tiny Agents, smolagents and any client that speaks MCP. No key needed for the free preview.</p>
</section>
<section>
<h2>Free strategies</h2>
<p>Every strategy on the <a href="https://data.finzdata.com/strategies" target="_blank" rel="noopener">FinzData strategies page</a> re-runs free on its full history, since 2000 with delisted stocks included, on our servers. No key needed. Ask any model above to list the strategies and re-run one.</p>
</section>
<section>
<h2>FinzData Workspace on Cloudflare</h2>
<p>A persistent workspace for your agent: it keeps files between sessions, runs code next to the data, and saves any strategy re-run into <code>/workspace/strategies/</code> for analysis. Add it to any MCP client with a free FinzData key (email only, <a href="https://finzdata.com/account" target="_blank" rel="noopener">finzdata.com/account</a>).</p>
<div class="code"><button class="copy" data-for="wsmcp">Copy</button><pre id="wsmcp">{
"mcpServers": {
"finzdata-workspace": { "url": "https://workspace.finzdata.com/mcp", "type": "streamable-http",
"headers": { "Authorization": "Bearer YOUR_FINZDATA_KEY" } }
}
}</pre></div>
</section>
<section>
<h2>What to ask</h2>
<ul class="q">
<li>How are speculators positioned in crude oil futures by the latest COT report?</li>
<li>Show SPY's dealer gamma, call wall and put wall for the last 30 sessions.</li>
<li>What did the first-published CPI print say last month, before revisions?</li>
<li>Backtest a 12-month momentum strategy on US stocks, delisted names included.</li>
<li>Which FinzData strategies beat their benchmark? Re-run the top one through today.</li>
<li>How many ships transited the Strait of Hormuz each day last month?</li>
<li>Who are the largest 13F holders of NVDA, and who added the most last quarter?</li>
</ul>
</section>
<section>
<h2>Coverage</h2>
<div class="grid">
<div class="card"><b>US equities</b>16,000+ US stocks that have traded on NYSE and Nasdaq since January 2000, delisted included, point in time. 5,100+ ETFs.</div>
<div class="card"><b>Futures and options</b>139 futures markets with every contract since 2007. Point-in-time options gamma (GEX) for single stocks, ETFs and the major indexes. End-of-day options chains.</div>
<div class="card"><b>Positioning and filings</b>CFTC COT since 1986, 13F holdings, insider transactions, SEC fundamentals as filed.</div>
<div class="card"><b>Macro</b>22,700+ macro series with every vintage kept, plus FinzData Global Macro Pulse: ship transits through 28 chokepoints, port calls, flights and toll traffic.</div>
<div class="card"><b>Crypto, FX, indexes</b>512 crypto pairs (Bitcoin since 2013), 79 FX pairs, 123 indexes incl. the VIX term structure.</div>
<div class="card"><b>Every bar size</b>Tick trades for 1,100+ US stocks and ETFs; 1, 5, 15, 30-minute, hourly and daily bars; server-side backtests.</div>
</div>
</section>
<section>
<h2>FinzData datasets on Hugging Face</h2>
<div class="ds" id="ds"></div>
</section>
<footer>
<a href="https://finzdata.com">finzdata.com</a> 路 <a href="https://finzdata.com/docs">Docs</a> 路 <a href="https://finzdata.com/agents">For AI agents</a> 路 <a href="https://finzdata.com/shop">Full history</a> 路 MCP: <code>https://api.finzdata.com/mcp</code><br>
The FinzData team 路 info@finzdata.com
</footer>
</div>
<script>
const Q = "How did managed money positioning in crude oil change over the last 3 months?";
const M = [
{k:"Hugging Face", pkg:"finzdata-huggingface", note:"One HF token reaches every top open model through Inference Providers. Also: smolagents (smolagents_agent) and Tiny Agents (finzdata-huggingface --write-tiny-agent).",
code:`pip install finzdata-huggingface\nexport HF_TOKEN=hf_... # your Hugging Face token\n\nfrom finzdata_huggingface import ask\n# model: "glm", "kimi", "qwen", "deepseek", "llama", "gpt-oss", "gemma", "minimax" or any Hub id\nprint(ask("${Q}", model="glm"))`},
{k:"Qwen", pkg:"finzdata-qwen", note:"DashScope by default (Singapore; FINZDATA_QWEN_REGION=us or cn). Qwen-Agent: pip install \"finzdata-qwen[qwen-agent]\" then qwen_assistant(). Local Qwen: local(question).",
code:`pip install finzdata-qwen\nexport DASHSCOPE_API_KEY=sk-...\n\nfrom finzdata_qwen import ask\nprint(ask("${Q}"))`},
{k:"Kimi", pkg:"finzdata-kimi", note:"Moonshot API, default model kimi-k3. Kimi CLI: finzdata-kimi --install-cli-config adds FinzData to ~/.kimi/mcp.json.",
code:`pip install finzdata-kimi\nexport MOONSHOT_API_KEY=sk-...\n\nfrom finzdata_kimi import ask\nprint(ask("${Q}"))`},
{k:"GLM", pkg:"finzdata-glm", note:"Z.ai API, default model glm-5.3 (FINZDATA_GLM_REGION=cn for the mainland endpoint).",
code:`pip install finzdata-glm\nexport ZAI_API_KEY=...\n\nfrom finzdata_glm import ask\nprint(ask("${Q}"))`},
{k:"DeepSeek", pkg:"finzdata-deepseek", note:"Default deepseek-flash; PRO_MODEL (deepseek-v4-pro) for deeper multi-step research.",
code:`pip install finzdata-deepseek\nexport DEEPSEEK_API_KEY=sk-...\n\nfrom finzdata_deepseek import ask\nprint(ask("${Q}"))`},
{k:"Local (Ollama, vLLM)", pkg:"finzdata-ollama", note:"Any open model on your own machine: Ollama by default, or server=\"vllm\" / \"lmstudio\" / \"llamacpp\". No keys at all.",
code:`pip install finzdata-ollama\nollama pull qwen3:8b\n\nfrom finzdata_ollama import ask\nprint(ask("${Q}"))`},
];
const tabs=document.getElementById('tabs'), sn=document.getElementById('snippet'), note=document.getElementById('snote');
function pick(i){ [...tabs.children].forEach((b,j)=>b.setAttribute('aria-selected', j===i)); sn.textContent=M[i].code;
note.innerHTML = M[i].note + ' <a href="https://pypi.org/project/'+M[i].pkg+'/">'+M[i].pkg+' on PyPI</a>'; }
M.forEach((m,i)=>{const b=document.createElement('button'); b.textContent=m.k; b.setAttribute('role','tab'); b.onclick=()=>pick(i); tabs.appendChild(b);});
pick(0);
function copyText(t,btn){ try{ navigator.clipboard.writeText(t); btn.textContent='Copied'; setTimeout(()=>btn.textContent='Copy',1500);}catch(e){} }
document.getElementById('copy').onclick=e=>copyText(sn.textContent,e.target);
document.querySelectorAll('[data-for]').forEach(b=>b.onclick=()=>copyText(document.getElementById(b.dataset.for).textContent,b));
const ENDPOINTS=["https://ask.finzdata.com","https://finzdata-ask.morning-forest-ac67.workers.dev"];
let API=null;
const sel=document.getElementById('model'), q=document.getElementById('q'), go=document.getElementById('ask'), log=document.getElementById('log'), ans=document.getElementById('answer');
const EX=["Where is SPY's call wall and put wall right now?","How many ships transited the Strait of Hormuz each day last week?","Who are the largest 13F holders of NVDA?","What was the latest US CPI print, first release vs revised?"];
EX.forEach(e=>{const b=document.createElement('button');b.textContent=e;b.onclick=()=>{q.value=e;q.focus();};document.getElementById('chips').appendChild(b);});
(async()=>{for(const e of ENDPOINTS){try{const r=await fetch(e+'/models');if(r.ok){const m=await r.json();API=e;sel.innerHTML='';Object.entries(m).forEach(([k,v])=>{const o=document.createElement('option');o.value=k;o.textContent=v;sel.appendChild(o);});return;}}catch(_){}}
log.textContent='The live demo is starting up - meanwhile, copy a snippet below and ask from your own machine.';})();
function md(s){const esc=s.replace(/[&<>]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;'}[c]));return esc.replace(/\*\*(.+?)\*\*/g,'<b>$1</b>').replace(/(https:\/\/finzdata\.com\/[\w\/-]*)/g,'<a href="$1">$1</a>');}
async function ask(){
if(!API){log.textContent='The live demo is not reachable right now. Try again shortly.';return;}
const question=q.value.trim(); if(!question) return;
go.disabled=true; log.textContent='Thinking...'; ans.style.display='none'; ans.innerHTML='';
const lines=[];
try{
const r=await fetch(API+'/ask',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({question,model:sel.value})});
if(!r.ok){const j=await r.json().catch(()=>({}));log.textContent=j.error||('Error '+r.status);return;}
const rd=r.body.getReader(), dec=new TextDecoder(); let buf='';
for(;;){const {done,value}=await rd.read(); if(done) break; buf+=dec.decode(value,{stream:true});
let i; while((i=buf.indexOf('\n\n'))>=0){const chunk=buf.slice(0,i); buf=buf.slice(i+2); if(!chunk.startsWith('data: ')) continue;
const ev=JSON.parse(chunk.slice(6));
if(ev.type==='tool'){lines.push('\u2192 FinzData '+ev.name+'('+JSON.stringify(ev.args)+')'); log.textContent=lines.join('\n')+'\nWorking...';}
else {log.textContent=lines.join('\n'); ans.style.display='block'; ans.innerHTML=md(ev.text||'');}
}}
}catch(e){log.textContent='Connection dropped. Please try again.';}
finally{go.disabled=false;}
}
go.onclick=ask; q.addEventListener('keydown',e=>{if(e.key==='Enter') ask();});
const DS = ["FinzData/cftc-commitments-of-traders", "FinzData/sec-13f-institutional-ownership", "FinzData/sec-insider-transactions", "FinzData/finra-short-interest", "FinzData/sec-financial-statements", "FinzData/forecast-bench", "FinzData/sec-earnings-release-dates", "FinzData/political-spending-2026", "FinzData/macro-commodities", "FinzData/macro-consumer-credit", "FinzData/macro-consumption", "FinzData/macro-consumption-international", "FinzData/macro-electricity", "FinzData/macro-financial-conditions", "FinzData/macro-fx", "FinzData/macro-growth", "FinzData/macro-housing", "FinzData/macro-income-spending", "FinzData/macro-inflation", "FinzData/macro-labor", "FinzData/macro-liquidity", "FinzData/macro-money-credit", "FinzData/macro-orders-trade", "FinzData/macro-other", "FinzData/macro-other-indicators", "FinzData/macro-population", "FinzData/macro-production", "FinzData/macro-productivity", "FinzData/macro-rates", "FinzData/macro-recession", "FinzData/macro-trade", "FinzData/macro-energy"];
const ds=document.getElementById('ds');
DS.forEach(id=>{const a=document.createElement('a'); a.href='https://huggingface.co/datasets/'+id; a.textContent=id.split('/')[1]; ds.appendChild(a);});
</script>
</body>
</html>