One database for every market question.
EquationDB holds stocks, ETFs, funds, indexes, FX and crypto with their fundamentals, events, themes and supply chains. People ask it in plain English, one query language or SQL. AI agents ask the same database.
The problem
A simple market question still takes a data team. Prices sit in one system and fundamentals in another, indicators are computed in overnight batch jobs, research lives in notebooks, and alerts in yet another tool.
- Five or six systems glued together, each with its own symbols, calendars and gaps.
- Answers computed overnight, so screens are stale by the open.
- Research that quietly uses hindsight, and backtests that look better than reality.
- Coverage that stops at US large caps the moment you ask about Tokyo, Mumbai or a small cap.
- AI assistants that sound confident and make numbers up.
What EquationDB is
One purpose-built database in place of that stack. Four ideas make it different.
Computed on arrival
Indicators, levels and statistics update as each bar lands. A screen across the whole market is a lookup, and returns in milliseconds.
Events, not just numbers
1,515 event types are detected and kept as records: 133M+ stored occurrences so far. Each is scored for rarity against that instrument's own history, not a fixed threshold.
Outcomes without hindsight
What followed each event is filled in as the future arrives. Event studies and backtests replay only what was known on the day, and fundamentals are point in time.
One language, shown every time
Ask in plain English, in one query language or in SQL. Every answer shows the query that produced it, so it can be checked and repeated.
From what happened, to why, to what if
Most market data stops at what happened. Here, why and what if are questions the database answers too: with evidence from the past and its sample size, never a forecast.
Why it moved, ranked by evidence
Market, sector, theme, company events and connected names, each with its share of the move and the statement that reproduces it. What stays unexplained is reported too: evidence, not stories.
WHY NVDA LAST 1mo
What followed when it happened before
Set a move or a condition and read how a target responded when that happened before: distributions with their sample sizes, and simulated paths. Historical evidence is kept apart from model-implied estimates.
SIMULATE NVDA -5% ON top500 FWD 1d, 5d, 20d
Everything is a time series
One code names any metric: a price, a statement line, insider buying, breadth, an event. Compare them across any instruments, each value counted from the day it was known. The same shape is ready for other databases.
SERIES AAPL.close, AAPL.insiders.sell_value LAST 1y ALIGN monthly
Ask the market anything
One language goes from a quick screen to an event study, an explanation or a simulation. Pick a question to see the query that answers it.
Which large US stocks are oversold but still in an uptrend?
GET top500 WHERE rsi(14) < 30 AND close > sma(200) SORT rsi(14)
Every indicator is already computed, so this is a lookup across 500 stocks.
What were the rarest events in the last session?
EVENTS * IN top500 LAST 1d WHERE rarity >= 95 SORT rarity DESC
Rarity is measured against each stock's own history, so a move that is routine for one name and rare for another are told apart.
When suppliers to the AI build-out sell off hard while the theme is already down 10%, what happened next?
OUTCOMES AFTER ret < pctl(5, 2y) AND volume > pctl(95, 2y)
AND $TH.AI.INFRA@drawdown < -10
IN (GRAPH MATCH company -supplies-> company -has_theme-> TH.AI.INFRA WHERE mcap > 10b)
SINCE 2018-01-01 FWD 5d, 20d, 60d GROUP BY sectorThe universe is a walk through the graph: companies that supply companies in the theme. Every threshold uses only data known on the day.
What explains today's five biggest movers?
LET movers = GET us.movers SELECT symbol, ret SORT abs(ret) DESC LIMIT 5; FOR EACH s IN movers WHY $s LIMIT 4
Each mover gets its ranked drivers with their evidence, and the part of the move the data cannot account for.
When the market slid 2% in three sessions with volatility elevated, how did NVIDIA's supply chain respond?
SIMULATE SPY -2% OVER 3d AND $VIX > 18 ON (GRAPH NEIGHBORS OF NVDA ACROSS supplies) FWD 5d, 20d
Two instruments set the scenario and a graph walk is the target. Every row carries its sample size and the baseline.
Has insider buying led the price, and by how many months?
SERIES CORR NVDA.insiders.net_buy_value, NVDA.close LAST 5y ALIGN monthly LAG 12
A flow from the filings against a price, tested at every lag. Each trade counts from the day it was filed.
Which companies sit where nuclear power meets AI demand?
GET all WHERE has_theme('TH.ENERGY.NUCLEAR', 0.5) AND has_theme('TH.AI.INFRA.POWER', 0.5)
SELECT symbol, name, exchange, node_name,
theme_score('TH.ENERGY.NUCLEAR') AS nuclear, theme_score('TH.AI.INFRA.POWER') AS ai_power,
roc(126) AS ret_6m, roc(126) - $TH.ENERGY.NUCLEAR@roc(126) AS vs_theme_index, pe, ev_ebitda
SORT ret_6m DESCTwo themes intersected across every exchange, with each company's return set against the theme's own index.
Does trading the AI supply chain pay only while its theme is in an uptrend?
BACKTEST LONG IN (GRAPH MATCH company -supplies-> company -has_theme-> TH.AI.INFRA WHERE mcap > 10b)
SINCE 2019-01-01
ENTER WHEN close CROSS ABOVE highest(high, 55)[-1] AND rvol(20) > 1.2
AND $TH.AI.INFRA@close > $TH.AI.INFRA@sma(200)
EXIT WHEN close < sma(50) OR $TH.AI.INFRA@close < $TH.AI.INFRA@sma(200)
STOP 12% COST 10 bps MAX 8Entries, exits, a stop, costs and a position cap in one statement, gated by the theme's index.
Can the morning routine run itself: screen, stop if nothing matches, then study each match on its own history?
LET setups = GET top500 WHERE rsi(14) < 40 AND close > sma(200) AND $BRD.A200@close > 50
SELECT symbol, rsi(14) AS r SORT r;
IF count(setups) = 0 THEN STOP;
FOR EACH s IN setups LIMIT 5
OUTCOMES AFTER rsi(14) CROSS BELOW 40 AND close > sma(200) IN $s SINCE 2010-01-01 FWD 5d, 20dLET, IF and FOR EACH turn several statements into one piece of work.
Or type the question in plain English and see the query it becomes. Turn any condition into an alert or a paper-trading flow, and view any result as a table, a chart or a pivot.
One language, or plain SQL
Full SQL over the same data: WITH, JOIN, window functions, QUALIFY, SAMPLE BY, user-defined functions, procedures and in-database models. Indicators such as rsi(14) or pe are just columns, and any statement can be a table in a query.
Which stock leads each sector on three-month momentum?
SELECT symbol, sector, roc(63) AS momentum_3m,
rank() OVER (PARTITION BY sector ORDER BY roc(63) DESC) AS rk
FROM top500
QUALIFY rk = 1
ORDER BY momentum_3m DESCA window function over live indicator values; QUALIFY keeps the top row of each sector.
What P/E did the market pay for five large technology companies on each filing date, and where is it today?
WITH q AS (SELECT symbol, period_end, filed,
sum(eps_diluted) OVER (PARTITION BY symbol ORDER BY period_end ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS ttm_eps,
count(*) OVER (PARTITION BY symbol ORDER BY period_end ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS quarters
FROM financials
WHERE symbol IN ('AAPL', 'MSFT', 'NVDA', 'GOOGL', 'META') AND period <> 'FY' AND period_end >= '2019-06-01'),
pe AS (SELECT symbol, filed, ttm_eps, price_asof(symbol, filed) / ttm_eps AS pe_at_filing
FROM q WHERE quarters = 4 AND ttm_eps > 0 AND filed IS NOT NULL),
h AS (SELECT symbol, count(*) AS filings, min(pe_at_filing) AS pe_low, median(pe_at_filing) AS pe_median,
max(pe_at_filing) AS pe_high, avg(pe_at_filing) AS pe_avg, stddev(pe_at_filing) AS pe_sd, last(ttm_eps) AS latest_ttm_eps
FROM pe GROUP BY symbol)
SELECT h.symbol, h.filings, h.pe_low, h.pe_median, h.pe_high,
s.close / h.latest_ttm_eps AS pe_now, (s.close / h.latest_ttm_eps - h.pe_avg) / h.pe_sd AS z_vs_own_history
FROM h JOIN (AAPL, MSFT, NVDA, GOOGL, META) s ON h.symbol = s.symbol
ORDER BY z_vs_own_historyEach multiple uses trailing earnings and the price on the day the statement was filed, as an investor saw it then.
If NVIDIA fell 8%, where is the options market not pricing the knock-on?
SELECT p.symbol, p.name, p.sector, p.expected_move_pct AS shock_move_pct, t.exp_move_pct AS implied_daily_move_pct,
abs(p.expected_move_pct) / t.exp_move_pct AS shock_vs_implied, t.iv30, p.corr_60d, p.path
FROM (GRAPH PROPAGATE NVDA -8% VIA beta DEPTH 2 LIMIT 40) p
JOIN top500 t ON p.symbol = t.symbol
WHERE t.exp_move_pct > 0
ORDER BY shock_vs_implied DESC
LIMIT 15A shock propagated two hops through the relationship graph, joined to each stock's implied move.
Which sectors reward 52-week-high breakouts on volume?
SELECT o.group AS sector, o.horizon, o.n, o.mean_pct, o.edge_pct, o.t_stat,
rank() OVER (PARTITION BY o.horizon ORDER BY o.edge_pct DESC) AS rk
FROM (OUTCOMES AFTER close CROSS ABOVE highest(high, 252)[-1] AND rvol(20) > 1.5
IN top500 SINCE 2010-01-01 FWD 5d, 20d, 60d GROUP BY sector) o
WHERE o.n >= 20
QUALIFY rk <= 3
ORDER BY o.horizon, rkAn event study used as a table, then ranked per horizon with a window function.
When bonds stop hedging stocks, what does a 60/40 portfolio do over the next quarter?
WITH j AS (SELECT s.timestamp, s.close AS spy, t.close AS tlt,
corr(s.ret, t.ret) OVER (ORDER BY s.timestamp ROWS BETWEEN 59 PRECEDING AND CURRENT ROW) AS corr_60d,
0.6 * (lead(s.close, 63) OVER (ORDER BY s.timestamp) / s.close - 1) * 100
+ 0.4 * (lead(t.close, 63) OVER (ORDER BY s.timestamp) / t.close - 1) * 100 AS fwd_6040
FROM bars s JOIN bars t ON s.timestamp = t.timestamp
WHERE s.symbol = 'SPY' AND t.symbol = 'TLT' AND s.timestamp >= '2008-01-01')
SELECT CASE WHEN corr_60d < -0.2 THEN '1 bonds hedge (below -0.2)' WHEN corr_60d < 0.2 THEN '2 unrelated' ELSE '3 bonds move with stocks (above 0.2)' END AS regime,
count(*) AS days, avg(corr_60d) AS avg_corr, avg(fwd_6040) AS fwd_63d_avg, min(fwd_6040) AS fwd_63d_worst,
sum(CASE WHEN fwd_6040 > 0 THEN 1 ELSE 0 END) * 100.0 / count(*) AS pct_positive
FROM j
WHERE corr_60d IS NOT NULL AND fwd_6040 IS NOT NULL
GROUP BY regime ORDER BY regimeA rolling 60-day correlation since 2008, split into regimes, with the forward return of the mix.
What would three single-stock shocks do to my portfolio, and which holding would hurt most?
WITH pf(symbol, weight) AS (VALUES ('AAPL', 0.20), ('MSFT', 0.20), ('AMZN', 0.15), ('JPM', 0.15), ('XOM', 0.10), ('LLY', 0.10), ('CAT', 0.10)),
hits AS (SELECT 'NVIDIA falls 10%' AS scenario, pf.symbol, pf.weight, p.expected_move_pct AS move
FROM pf JOIN (GRAPH PROPAGATE NVDA -10% VIA beta DEPTH 2 LIMIT 500) p ON pf.symbol = p.symbol
UNION ALL
SELECT 'Exxon falls 8%', pf.symbol, pf.weight, p.expected_move_pct
FROM pf JOIN (GRAPH PROPAGATE XOM -8% VIA beta DEPTH 2 LIMIT 500) p ON pf.symbol = p.symbol
UNION ALL
SELECT 'JPMorgan falls 7%', pf.symbol, pf.weight, p.expected_move_pct
FROM pf JOIN (GRAPH PROPAGATE JPM -7% VIA beta DEPTH 2 LIMIT 500) p ON pf.symbol = p.symbol),
r AS (SELECT scenario, symbol, weight, move, row_number() OVER (PARTITION BY scenario ORDER BY move) AS rk FROM hits)
SELECT scenario, sum(weight * move) AS portfolio_move_pct, count(*) AS holdings_hit,
max(CASE WHEN rk = 1 THEN symbol END) AS worst_holding, min(move) AS worst_move_pct
FROM r
GROUP BY scenario
ORDER BY portfolio_move_pctSeven holdings typed inline, three shocks propagated through the graph, one row per scenario.
These are taken from the runnable Demo in the app: a quick tour, a demo sheet of 700+ runnable commands and 260+ Power queries, Advanced and Expert, each with the question it answers, and each runs against the live database with one click. Open the Demo (sign-in).
What's inside
More than a query box. Everything below runs on the same data and the same language.
Apps & dashboards
Save any query as an app with its own inputs: a symbol, a period, a slider. Put apps on a dashboard and link them by colour, so one click moves every panel. 50+ sample apps and 8 sample dashboards are included.
Apps & dashboardsTasks
Hand the database a piece of work in plain English. It plans the queries, asks when something is unclear, runs them and reports back with the numbers.
TasksSupply chains & the graph
Companies, themes, industries, events and findings in one network, linked by supply, theme, correlation and event. Walk it, or use any walk as the universe of a study.
The graphThemes & taxonomy
~70,000 companies in an 8-level industry taxonomy, and 2,300 themes up to 7 levels deep. Every theme and industry has its own index to chart, screen and backtest.
Taxonomy & themesMarket stats & findings
175 market statistics computed on a schedule and kept. Every night the database writes down what is unusual, makes its calls, and later scores them, misses included.
Findings & track recordAlerts & paper trading
Any condition can become an alert, delivered in the app, by webhook, chat or email, or a paper-trading flow you can replay over history.
AlertsLinks to the documentation and the Demo open in the app and ask you to sign in first.
Built for AI agents
Language models reason well and remember numbers badly. EquationDB gives them a database to query instead of a guess, through the same door people use.
Human and Agent views
One switch in the app. The Agent view has what an agent's operator needs: ready-made connection configs, every tool with its schema, a console, and activity by key.
MCP server, seven tools
Query, ask in English, symbol zoom-in, catalog, findings, tasks and docs. Connect any assistant that speaks the Model Context Protocol, or your own agent.
HTTP API and command line
The same statements over HTTP and JSON, and a command-line client for agents that work in a shell. Results carry their as-of time and come back bounded.
A reference sized for a model
A compact, machine-readable reference generated from the live catalogs, with every documentation page available as markdown.
Read-only keys
A key that can only read, enforced by the server on every statement. One key per agent, revocable, with a log of every call.
Measured, not claimed
Reasoning Bench: the same small model on the same 24 market questions scores 11/24 on its own and 23/24 with EquationDB as its tool. Agent Gym replays market scenarios without look-ahead.
Open the Agent view (sign-in), or talk to us about agent integrations.
One engine, many databases
EquationDB is an engine, not a market product. It works on a few principles that hold wherever things are measured over time. Each database applies the same principles to one domain. Financial markets was the first; Weather is the second.
01Series with live state
Anything measured over time is a series. Its derived values update the moment a new observation arrives, so a question is a lookup, not a computation.
Prices and indicators for every stock, ETF, fund, index, currency pair and token; a screen across the market is a lookup.
02Events, not just numbers
A change worth noticing is detected when it happens and stored as a record of its own.
1,515 event types, 133M+ stored occurrences: crossings, new highs, gaps, volume surges, earnings beats, rating changes.
03Rarity against its own history
Every event is scored against the same series' own past, not against a fixed threshold.
Unusual for this security: a move routine for one stock and rare for another are told apart.
04Outcomes without hindsight
What followed each event is filled in as the future arrives. Every input is logged first, so a study replays only what was known at the time.
Event studies and backtests that replay exactly what was known on each day.
05Record datasets beside the series
Dated records attach to the same entities and are queried in the same language as the series.
Earnings, financial statements, dividends, splits, analyst ratings, estimates, insider transactions.
06Entities, a taxonomy and a typed graph
Entities are classified in a tree, tagged with overlapping themes and linked by typed relationships.
~70,000 companies in an 8-level industry taxonomy and 2,300 themes, each with its own index; supply chains; which securities move together.
07Stats and findings that run themselves
The database runs its own named statistics on a schedule, writes down what is unusual and later scores its own calls.
175 market stats on a schedule; nightly findings with a track record that keeps the misses.
08One language, for people and agents
One query language, or SQL, with every answer showing the query behind it. Agents come in through the same door.
From a screen to a backtest in one statement; AI agents query through MCP, the API or the command line.
Databases
- 01Active · the first database
Financial markets
Stocks, ETFs, funds, indexes, FX and crypto on 70 exchanges, with fundamentals, market events, themes and supply chains.
70 exchanges ~70,000 stocks, ETFs and funds; companies from 108 countriesSince 1962 312M price bars, split & dividend adjustedFX, crypto, indexes 1,400 currency pairs · 2,100 tokens · 10,000+ theme and industry indexesFundamentals statements for ~51,000 companies; earnings, dividends, estimates
- 02Active
Weather
Daily weather for 399 US stations in all 50 states and 55 world cities, back to 1869: temperature, rain, snow, wind and degree days as series; records, heat waves, cold snaps and storms as events; what markets did after them.
399 US stations first-order stations in all 50 states, updated daily55 world cities history; international data arrives about a year lateSince 1869 daily records, most stations from the 1940s10 event types records, heat waves, cold snaps, heavy rain and snow, freezes, gusts
- 03Exploring
Energy & power
Load, generation and prices per plant, grid node or region as series; outages and price spikes as events, rare for that node at that hour; what followed, without hindsight; a graph of plants, nodes, interconnectors and fuels.
- 04Exploring
Supply chains & logistics
Transit times, port calls and freight rates per port, lane or carrier as series; congestion and diversions as events, rare for that lane; what followed downstream, without hindsight; a graph of ports, lanes, carriers and shippers.
- 05Exploring
Public health
Aggregate case and admission counts per region as series; outbreak onsets and early seasonal peaks as events, rare for that region's own seasons; what followed, without hindsight; a graph of regions, facilities and conditions.
Financial markets and Weather are the databases you can use today. The others show where the same engine goes next; they carry no dates.
Data & coverage
About 70,000 instruments on 70 exchanges, not just the index names: ~52,600 stocks, ~12,300 ETFs and ~5,400 mutual and closed-end funds, from New York, Toronto and São Paulo to London, Frankfurt, Mumbai, Shanghai, Hong Kong, Tokyo, Sydney and Dubai. Plus currencies, crypto and 10,000+ indexes the database builds itself.
| Dataset | Coverage | History |
|---|---|---|
| Stocks, ETFs & funds | ~52,600 stocks, ~12,300 ETFs and ~5,400 mutual and closed-end funds on 70 exchanges; companies from 108 countries; 312M price bars, split and dividend adjusted | from 1962 |
| Intraday | 1-minute bars for ~620 live names; updates every 5 minutes in US hours | one year |
| Indexes | 10,000+ theme and industry indexes built by the database, queried like any other instrument | — |
| FX | ~1,400 currency pairs: majors, crosses, emerging markets | from 1971 |
| Crypto | ~2,100 actively traded tokens | from 2009 |
| Financial statements | income statement, balance sheet, cash flow, key metrics and ratios for ~51,000 companies, point in time, as time series | from 1985 |
| Earnings & estimates | EPS and revenue, actual against estimate, with the price reaction; forward estimates for companies with analyst coverage | from 1985 |
| Dividends & splits | every dividend and split, with adjusted amounts and ratios | from 1970 |
| Analyst ratings | upgrades, downgrades and price targets for companies with analyst coverage | years of history |
| Insider transactions | purchases and sales filed by officers and directors of US-listed companies | full filing history |
| Market events | 1,515 event types, technical and fundamental; 133M+ stored occurrences, each scored for rarity, with what followed | full price history |
| Taxonomy & themes | ~70,000 companies in an 8-level industry taxonomy and 2,300 themes up to 7 levels deep, each with its own index | — |
| Supply chains & graph | suppliers, customers, competitors and partners, in one graph with themes, industries, events and findings | — |
Run SHOW DATASETS in the app for live counts, date ranges and update times.
See it on your own questions
Tell us what your desk or your agents need to answer, and we will set up a trial around it.
For hedge funds and prop desks, quant and research teams, advisors and platforms. Encrypted in transit, hashed credentials, two-factor authentication, tenant isolation and a full audit trail. Dedicated and private deployments available.