Backtest Strategies with Real Historical Data
Your strategy is only as good as the data you test it on. We provide real OHLCV candles, pre-calculated indicator values, and raw tick data sourced directly from live broker feeds -- not synthetic or interpolated data.
10
Timeframes
50+
Symbols
42
Pre-Calculated Indicators
Real
Broker-Sourced Data
Data Retention by Timeframe
Higher timeframes retain more history by default
| Timeframe | Default Retention | Approx. Candles | Enterprise |
|---|---|---|---|
| M1 | 24 hours | ~1,440 | Full retention |
| M5 | 48 hours | ~576 | Full retention |
| M15 | 72 hours | ~288 | Full retention |
| M30 | 120 hours | ~240 | Full retention |
| H1 | 360 hours (15 days) | ~360 | Full retention |
| H4 | 720 hours (30 days) | ~180 | Full retention |
| D1 | 1,080 hours (45 days) | ~45 | Full retention |
Enterprise plans retain all historical data indefinitely. Starter and Pro plans follow the retention schedule above.
Everything You Need for Backtesting
Historical OHLCV
Open, High, Low, Close, Volume candles at every timeframe via /v1/ohlc. Request up to 500 bars per call with timestamp filtering.
Historical Indicators
Pre-calculated indicator values synced to each candle via /v1/indicators. No need to calculate RSI, MACD, or Bollinger Bands yourself.
Historical Ticks
Raw bid/ask tick data via /v1/ticks for tick-level backtesting. Available on Starter plan and above.
Fetching Historical Data
GET /v1/ohlc?symbol=EURUSD&timeframe=H1&bars=100&from=2026-03-20T00:00:00Z {
"success": true,
"data": {
"symbol": "EURUSD",
"timeframe": "H1",
"bars": [
{
"time": "2026-03-20T00:00:00Z",
"open": 1.0821,
"high": 1.08245,
"low": 1.08192,
"close": 1.08231,
"volume": 8432
},
{
"time": "2026-03-20T01:00:00Z",
"open": 1.08231,
"high": 1.08267,
"low": 1.08218,
"close": 1.08254,
"volume": 6821
},
{
"time": "2026-03-20T02:00:00Z",
"open": 1.08254,
"high": 1.08289,
"low": 1.08241,
"close": 1.08273,
"volume": 7156
}
],
"count": 100,
"from": "2026-03-20T00:00:00Z",
"to": "2026-03-24T04:00:00Z"
}
} Python Backtesting Example
A simple moving average crossover backtest in 40 lines
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://tickatlas.com"
def get_ohlc(symbol, timeframe, bars=200):
resp = requests.get(
f"{BASE}/v1/ohlc",
headers={"X-API-Key": API_KEY},
params={"symbol": symbol, "timeframe": timeframe, "bars": bars}
)
return resp.json()["data"]["bars"]
def get_indicators(symbol, timeframe, indicator, period):
resp = requests.get(
f"{BASE}/v1/indicators",
headers={"X-API-Key": API_KEY},
params={"symbol": symbol, "timeframe": timeframe,
"indicator": indicator, "period": period, "bars": 200}
)
return resp.json()["data"]["values"]
# Fetch data
bars = get_ohlc("EURUSD", "H1", 200)
sma_20 = get_indicators("EURUSD", "H1", "sma", 20)
sma_50 = get_indicators("EURUSD", "H1", "sma", 50)
# Simple SMA crossover backtest
trades = []
position = None
for i in range(1, len(sma_20)):
if sma_20[i] > sma_50[i] and sma_20[i-1] <= sma_50[i-1]:
# Golden cross - BUY
if position is None:
position = {"type": "BUY", "entry": bars[i]["close"],
"time": bars[i]["time"]}
elif sma_20[i] < sma_50[i] and sma_20[i-1] >= sma_50[i-1]:
# Death cross - SELL / close position
if position and position["type"] == "BUY":
pnl = bars[i]["close"] - position["entry"]
trades.append({**position, "exit": bars[i]["close"],
"pnl_pips": pnl * 10000})
position = None
# Results
total_pnl = sum(t["pnl_pips"] for t in trades)
wins = sum(1 for t in trades if t["pnl_pips"] > 0)
print(f"Trades: {len(trades)} | Wins: {wins} | "
f"Win Rate: {wins/len(trades)*100:.0f}% | "
f"Total PnL: {total_pnl:.1f} pips") Use Cases
-
Strategy Validation
Test your trading rules against real historical data before risking real money. Does your RSI reversal strategy actually work on XAUUSD H4? The data tells you.
-
Parameter Optimization
Is RSI 14 better than RSI 21 for your strategy? Run the same backtest with different parameters and compare results. Data-driven optimization, not guesswork.
-
ML Training Data
Train machine learning models on real OHLCV + indicator features. Our pre-calculated indicators save you from implementing 42 indicator calculations yourself.
-
Walk-Forward Analysis
Split historical data into in-sample (optimization) and out-of-sample (validation) windows. Use the timestamp filters to fetch precise date ranges.
Data Quality You Can Trust
Real Broker Data
Every candle and tick comes from live broker feeds. This is not synthesized, interpolated, or delayed data. It is what the market actually traded at.
Multi-Broker Verification
Data from multiple brokers is cross-validated. Anomalous spikes and gaps are detected and flagged. Automated backfill fills any gaps within minutes.
Consistent Timestamps
All timestamps are UTC. No timezone confusion. Candle boundaries align precisely to their timeframe (H1 candles start at :00, H4 at 00:00/04:00/08:00/etc.).
Volume Data Included
Tick volume is included with every candle. Essential for volume-weighted strategies, VWAP calculation, and volume profile analysis.
Frequently Asked Questions
How far back does the data go?
Data retention depends on timeframe and plan. D1 data goes back ~45 days on Starter/Pro, H1 goes back ~15 days. Enterprise plans retain all historical data since the platform started collecting.
Can I download bulk data for offline backtesting?
Yes. Use the from and to timestamp parameters along with bars=500 (maximum per call) and paginate through the date range. Many users run a nightly download job.
Are indicator values included with OHLCV data?
OHLCV and indicator values come from separate endpoints (/v1/ohlc and /v1/indicators). They share the same timestamps so you can merge them easily by time.
Is there survivorship bias in the symbol list?
No. We track all 50+ symbols consistently. Forex pairs do not get delisted like stocks, so survivorship bias is not a concern for FX and commodity backtesting.
What about spread data for more realistic backtests?
Use the /v1/spread endpoint to get historical spread statistics. Incorporate average spread by session into your backtest for realistic cost modeling.
Test Your Strategy Before You Trade It
Access real historical market data and pre-calculated indicators for strategy backtesting. Start your free trial today.
14-day free trial / No credit card required / 1,000 requests included / Cancel anytime