sifting/io
Backtesting & strategy system

Backtesting and strategy testing systems

Research systematic strategies with historical OHLCV bars, then use live WebSocket updates with the same credential.

OHLCVhistorical interval bars
REST + WSresearch and live delivery
Multi-venuefair price
How it fits together

One feed in, your product out

Markets you need
CryptoForexStocks
SiftingIOOne JSON schema. One key. REST and WebSocket.
What you buildYour backtest and live engine

Backtesting systems have one job that everything else depends on: the data the strategy sees in research has to be the data it will see in production. When those diverge, a backtest becomes a story about a market that never existed, and the live results quietly disappoint. Most of that divergence comes from sourcing research and production data differently.

The problem

Strategies that look profitable in backtest diverge live because research and production read different prices, with subtle differences in venue selection, aggregation, and timestamp semantics.

How SiftingIO handles it

Use historical OHLCV over REST for interval-based research and WebSocket updates for live consumers. Keep the strategy's sampling interval explicit, and check price basis, volume meaning, market sessions, and adjustment conventions before comparing historical and live results.

Compare historical bars with live observations

Historical bars provide open, high, low, close, volume, and a bucket timestamp. Live ticks provide individual price updates. They serve different stages of a strategy workflow and should not be assumed to reconstruct an identical series. Validate source conventions and your bar-building method on a representative window before moving from research to live use.

Aggregated prices that do not flicker

A backtest run against a single venue inherits that venue's outages and quirks, and the strategy quietly learns to trade noise that will not be there tomorrow. SiftingIO aggregates each market across multiple sources into one fair price, so when an individual source goes quiet the series stays stable. The signal you fit is the market, not one venue's gaps.

Attribution when a strategy misbehaves

When a live strategy drifts from its backtest, the first honest question is what data it actually saw. Audit logs record every read with a timestamp, so you can reconstruct the exact inputs a strategy consumed and attribute a divergence to the data or rule it out, instead of blaming the model by default.

Start building

From zero to live data in three steps

  1. 1

    Create a free API key

    Sign up and generate a key. The free tier covers every market, with no sales call to get started.

  2. 2

    Subscribe to your markets

    Add the markets your product needs. Bundle discounts apply automatically once two or more Pro markets are active.

  3. 3

    Call REST or stream over WebSocket

    Pull snapshots and history over REST, or subscribe to live ticks over WebSocket. Same schema and key, in Go, Python, or TypeScript.

FAQ

Backtesting & strategy system: common questions

How should I compare backtest data with my live feed?

Use historical OHLCV bars for interval-based backtests and the documented WebSocket protocol for live updates. Match sampling intervals and inspect timestamps, price basis, volume meaning, sessions, and adjustment conventions. Historical bars are not a replay of every live tick, and identical backtest-to-live prices or results are not guaranteed.

What history depth is available for backtesting?

Crypto and forex have historical bar endpoints over REST, with documented intervals from one minute through monthly. Depth depends on the symbol and source coverage. Use the endpoint reference and a representative date-window request to confirm your requirements. The current REST reference does not document a historical tick-replay endpoint.

How do you keep prices consistent across venues?

SiftingIO aggregates each market across multiple sources and publishes one fair price with consistent timestamps. If a single source drops out, the aggregate stays stable, so a backtested signal does not jump when one input goes quiet.

Can I attribute a signal to a specific data read?

Audit logs on Pro and above record every credential read with a timestamp, so research and compliance can attribute a given signal to a specific feed read.

Which plan fits a backtesting system?

Most teams run Crypto Pro plus Forex Pro for cross-asset signals, which auto-bundles into a discount once two or more Pro markets are active. You can add US stocks later under the same credential.

Same data, same SLA, same schema

Build this on SiftingIO.

Start on the free tier, mix asset classes when you need to, and reach out if you want a closer look at how a similar team set up their stack.