The most comprehensive backtest dataset for quants and AI agents: survivorship-bias-free OHLCV across crypto, US and global equities and ETFs, corporate-action adjusted, one schema everywhere. Files, API, SDK and MCP. Free up to 1M bars a month - no card, no key.
Point-in-time constituents and delisted symbols included, so your backtests are survivorship-bias free. Splits and dividends adjusted on equities. One schema everywhere: timestamp, open, high, low, close, volume.
| Asset class | Coverage | Granularity | History |
|---|---|---|---|
| Crypto spot | Top 500 by market cap, incl. delisted | 1m, 1h, 1d | From listing date |
| Crypto perpetuals | Majors: price, funding, open interest | 1m, 1h, 1d | From contract launch |
| US equities | Full listed universe + delisted, point-in-time S&P 500 / NASDAQ-100 membership | 1m, 1h, 1d | 30+ years daily |
| Global equities | ASX 200, FTSE 100, Nikkei 225, DAX, major indices | 1h, 1d | 20+ years |
| ETFs & indices | SPY, QQQ, sector/factor ETFs, index levels, VIX | 1m, 1h, 1d | From inception |
| Reference data | Corporate actions, listing/delisting dates, index membership history | Event-level | Full history |
Pick the interface that fits your pipeline. Files for bulk backtests, API for live lookups, SDK and CLI for research loops and agent frameworks.
Bulk CSV or Parquet, one file per symbol per timeframe. Grab a whole asset class in a single archive and backtest offline.
# entire BTC daily history, one file curl -O https://histprice.com/data/crypto/BTC/1d.parquet # or everything at once curl -O https://histprice.com/data/crypto/all-1d.tar.zst
JSON over HTTPS with predictable paths. Query by symbol, timeframe and date range. No auth needed for standard rate limits.
GET /v1/bars/AAPL?tf=1d&from=2015-01-01&to=2025-01-01
{
"symbol": "AAPL",
"tf": "1d",
"bars": [
[1420502400, 27.85, 27.86, 26.84, 27.33, 212818400],
...
]
}
Python and TypeScript clients that return DataFrames and typed arrays, with local caching so repeated backtests don't refetch.
from histprice import bars df = bars("ETH", tf="1h", start="2020-01-01") # pandas DataFrame: ts, open, high, low, close, volume result = my_backtest(df)
Agents are first-class users. The API ships with an OpenAPI spec and a hosted MCP server, so Claude, GPT and any agent framework can discover the dataset and run backtest queries without custom glue - the free tier applies to agents too.
https://histprice.com/openapi.json · https://mcp.histprice.comNo exchange pagination, CSV merging, timestamp cleaning, duplicate removal or database admin. You work with dataset IDs, strategies and results: market to dataset to strategy to result.
HistPrice finds the required history, pulls only what's missing, validates it, caches it locally and returns a reusable dataset handle. Any timeframe, resampled on the fly.
histprice prepare BTCUSDT ETHUSDT SOLUSDT \ --from 2021-01-01 \ --to 2026-01-01 \ --timeframe 35m Dataset: hp_a823991 Status: READY Cache: HIT Rows: 2,253,411
Pass the handle straight into a backtest. You see the result, not millions of price rows.
backtest run \ --dataset hp_a823991 \ --strategy strategies/momentum.py Return 184% Sharpe 1.92 Max Drawdown 13.4% Win Rate 56.8% Trades 842 Runtime 0.71 sec
Reuse one dataset across thousands of experiments without downloading market data again: sweep parameters, search past runs, drill into the trades that hurt, then validate out of sample.
# parameter sweep backtest optimize --dataset hp_a823991 \ --strategy strategies/momentum.py \ --param fast=5:50:5 --param slow=20:200:10 \ --metric sharpe # find the strongest prior runs backtest search --dataset hp_a823991 \ --min-sharpe 1.8 --max-drawdown 0.15 # inspect the 20 worst trades of a run backtest trades run_8291 --worst 20 # market context around one trade backtest inspect run_8291 --trade-id trade_123 \ --before 30 --after 30 # walk-forward validation backtest walkforward --dataset hp_a823991 \ --strategy strategies/momentum.py \ --train 730d --test 180d
Behind the scenes: compressed Parquet, local NVMe caching and analytical engines like Polars and DuckDB, so repeated research runs work from local data instead of hitting the cloud every time. The data layer stays out of the way - for humans at a terminal and agents calling the same commands.
Every tier has the full dataset - same depth, same quality. You pay for throughput, not access. Prototype for nothing, upgrade when your pipeline does.
1M bars / month
100M bars / month
Unlimited bars
Overage never cuts you off mid-backtest: requests soft-throttle at the cap and you choose to upgrade or wait for the reset.
Three decades of survivorship-bias-free prices behind one schema, readable by you or your agent. Prototype free on 1M bars a month, scale to the full universe when your strategy earns it.
Start free