EquationDB
Databases: Financial markets · Weatheron one engine70 exchanges · 108 countries · history since 1962

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.

70 exchanges~70,000 instruments; companies from 108 countries
Stocks, ETFs, mutual funds~52,600 stocks · ~12,300 ETFs · ~5,400 mutual and closed-end funds
FX, crypto, indexes1,400 currency pairs · 2,100 tokens · 10,000+ theme and industry indexes
1,515 event types133M+ stored occurrences, each scored for rarity against its own history
Global historical data312M price bars since 1962, split and dividend adjusted

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 ifIn the app

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.

Simple

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.

Simple

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.

Power query · event study without hindsight

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 sector

The universe is a walk through the graph: companies that supply companies in the theme. Every threshold uses only data known on the day.

Power query · why

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.

Power query · what if

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.

Power query · series

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.

Power query · themes

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 DESC

Two themes intersected across every exchange, with each company's return set against the theme's own index.

Power query · backtest

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 8

Entries, exits, a stop, costs and a position cap in one statement, gated by the theme's index.

Power query · script

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, 20d

LET, 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.

Simple

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 DESC

A window function over live indicator values; QUALIFY keeps the top row of each sector.

Power query · point-in-time fundamentals

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_history

Each multiple uses trailing earnings and the price on the day the statement was filed, as an investor saw it then.

Power query · shock through the graph

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 15

A shock propagated two hops through the relationship graph, joined to each stock's implied move.

Power query · window functions

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, rk

An event study used as a table, then ranked per horizon with a window function.

Power query · cross-asset regime

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 regime

A rolling 60-day correlation since 2008, split into regimes, with the forward return of the mix.

Power query · portfolio risk

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_pct

Seven 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 & dashboards

Tasks

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.

Tasks

Supply 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 graph

Themes & 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 & themes

Market 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 record

Alerts & 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.

Alerts

Links 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.

The engine, in any domainDatabase: Financial markets

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.

In financial markets

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.

In financial markets

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.

In financial markets

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.

In financial markets

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.

In financial markets

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.

In financial markets

~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.

In financial markets

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.

In financial markets

From a screen to a backtest in one statement; AI agents query through MCP, the API or the command line.

Databases

  1. 01
    Active · 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

  2. 02
    Active

    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

  3. 03
    Exploring

    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.

  4. 04
    Exploring

    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.

  5. 05
    Exploring

    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.

DatasetCoverageHistory
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 adjustedfrom 1962
Intraday1-minute bars for ~620 live names; updates every 5 minutes in US hoursone year
Indexes10,000+ theme and industry indexes built by the database, queried like any other instrument—
FX~1,400 currency pairs: majors, crosses, emerging marketsfrom 1971
Crypto~2,100 actively traded tokensfrom 2009
Financial statementsincome statement, balance sheet, cash flow, key metrics and ratios for ~51,000 companies, point in time, as time seriesfrom 1985
Earnings & estimatesEPS and revenue, actual against estimate, with the price reaction; forward estimates for companies with analyst coveragefrom 1985
Dividends & splitsevery dividend and split, with adjusted amounts and ratiosfrom 1970
Analyst ratingsupgrades, downgrades and price targets for companies with analyst coverageyears of history
Insider transactionspurchases and sales filed by officers and directors of US-listed companiesfull filing history
Market events1,515 event types, technical and fundamental; 133M+ stored occurrences, each scored for rarity, with what followedfull 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 & graphsuppliers, 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.