Where to Get Free Historical Data for Backtesting
Six free sources of candle data for backtesting, including ready-made Nasdaq 100 files, with the exact export steps and the timezone setting each one needs.
Download a CSV of candles
Pick one of the six free sources below. Any file with time, open, high, low and close columns works. Volume is optional, and extra columns like spread are ignored.
Note which clock the file uses
Every source stamps its candles in a different timezone, and picking the wrong one shifts your whole session. The table further down says exactly which to choose for each source.
Import it in the backtester
Open the Backtester, click Import, choose your file, then set the symbol name, the timeframe the file holds, and the timezone from step 2. The file is read in your browser and never uploaded.
Start with your lowest timeframe
Higher timeframes are built from what you import, but you can never go below it. If you trade intraday, download 1-minute or 5-minute data even if you plan to replay the 1-hour chart.
Backtesting needs price history, and the good news is that the data most traders need is free. The catch is that every source formats and timestamps it differently, which is where people usually get stuck.
Here are six sources worth using, the exact clicks for each, and the one setting that causes almost every failed import.
What counts as a usable file
A plain CSV with one row per candle:
time, open, high, low, close, volume
Volume is optional. A header row is fine but not required. Commas, semicolons and tabs all work. Dates can be ISO, a Unix timestamp, MetaTrader's YYYY.MM.DD HH:MM, or the compact YYYYMMDD HHMMSS that some sites use.
1. A ready-made Nasdaq dataset
Best for: having a chart loaded in two minutes.
If you trade the Nasdaq, someone has already done the export. This NAS100 dataset on Kaggle holds the index at nine timeframes, from one minute up to monthly, published as public domain.
- Open the page and sign in. Kaggle asks for a free account before it will let you download.
- Download and unzip it. There is one file per timeframe.
- Import the 1-minute file and name the symbol whatever you call the instrument, NQ or NAS100.
Set the timezone to one of the MT4/MT5 server time options, because the files carry a broker clock rather than UTC.
Two things to know before you rely on it. It is one person's upload rather than an exchange feed, so it can go stale or move in a way a bank's own feed will not. And it currently ends around October 2025. For the months since, export the same symbol from your own terminal using the next section and import it under its own name, since a second import on the same symbol and timeframe replaces the first rather than extending it.
2. Your own MetaTrader terminal
Best for: matching your live trading exactly.
This is the source most traders overlook, and it is usually the right one. The candles come from your own broker, so a backtest lines up with the chart you actually trade, spreads and all. It costs nothing and you already have it installed.
On MT5
- Open View → Symbols, or press Ctrl+U.
- Select your symbol in the tree on the left.
- Open the Bars tab and choose the timeframe and start date.
- Click Export Bars and save it as .csv.
On MT4
- Open Tools → History Center, or press F2.
- Double-click the symbol, then the timeframe.
- Click Download to pull more history from your broker.
- Click Export and save it as .csv.
One thing to know about MT4: it exports whatever it already has cached and cannot take a date range, and the lower the timeframe the less it keeps. Scroll the chart far to the left first so the terminal downloads more history before you export.
3. QuantDataManager
Best for: getting a lot of data at once.
QuantDataManager is a free desktop app that downloads Dukascopy history for you and exports it as CSV. Clicking through a website works fine for one symbol and one year. The moment you want several pairs, several timeframes, or a decade of minute data, this is the tool that saves you an afternoon.
- Install it and let it download the symbols you want.
- In Data manager, select the dataset and click Export on the toolbar.
- Set the date range and the timeframe. It offers TICK, M1, M5, M15, M30, H1, H4 and D1.
- Choose the format Generic bar format (comma delimited) and export.
It also converts the data to whatever timezone you tell it to, which is worth using. Set it to UTC and you can pick UTC on import without thinking about it again.
The free version downloads exactly the same data as the paid one. Pro adds CDN servers and integrity-checked transfers, which speeds up multi-year tick downloads but changes nothing about the candles themselves.
4. Dukascopy
Best for: the deepest free history, without installing anything.
Dukascopy publishes its own historical feed going back to roughly 2003, covering forex, metals, indices and commodities. No account needed. This is the same source QuantDataManager pulls from, so use whichever suits the job: the website for a quick single download, the app for volume.
- Open the Historical Data Feed page.
- Pick the instrument, the date range and the timeframe.
- Set the output format to CSV, then download.
Their index names are not broker tickers, which is where most people give up looking. The Nasdaq 100 is listed as USA 100 Technical Index, not NAS100 or US100.
5. HistData
Best for: free 1-minute forex depth.
HistData publishes one-minute forex data back to 2000, packaged one month per file.
- Choose your pair, then the ASCII / M1 download.
- Unzip it. Each file holds a single month.
- Import the months one at a time. They replay back-to-back.
6. Binance
Best for: crypto.
data.binance.vision hosts free monthly candle files for every spot pair, at every timeframe from one minute up.
- Navigate to data → spot → monthly → klines, then your symbol and timeframe.
- Download a month's ZIP and unzip it.
Which timezone to pick
This is the setting that trips up almost everyone. If your candles look shifted by an hour or two, or the London open lands at the wrong time, this is why.
| Source | Pick this on import |
|---|---|
| Kaggle NAS100 files | MT4/MT5 server time |
| MetaTrader export | MT4/MT5 server time |
| QuantDataManager | Whatever you set in the app (set it to UTC and pick UTC) |
| Dukascopy | Whatever the export page was set to (leave it on GMT and pick UTC) |
| HistData | Fixed UTC−5 |
| Binance | Anything, it is ignored |
Two of those deserve an explanation.
MetaTrader writes its server clock, not UTC. Most brokers run UTC+2 in winter and UTC+3 in summer so the daily candle closes at 5pm New York. That is why a broker export lands hours off if you leave the setting on UTC.
HistData is the sharp edge. Their timestamps are Eastern Standard all year with no summer-time switch. So the DST-aware "New York time" option is wrong for them, and would sit an hour off for half of every year. Choose the fixed UTC−5 instead.
Binance files timestamp in Unix epoch, which is already absolute, so the picker does not apply to them.
If you realise afterwards that you picked wrong, you do not need to re-download anything. Open Import again and change the timezone on the dataset in the list at the bottom, and every candle is re-timed in place.
Which timeframe to download
Import the lowest timeframe you can get. Higher ones are built from it automatically, so a 1-minute file gives you 5m, 15m, 1h and everything above, plus any custom timeframe you define. The reverse is not possible: an hourly file can never produce a 5-minute chart.
The practical answer for most traders is 1-minute data for intraday work, or 1-hour if you only swing trade.
If the import fails
"Could not find the OHLC columns." The file is missing one of open, high, low or close, or the columns are in an unusual order without a header row. Open it in a text editor and check the first few lines.
Every row was skipped. Usually a timestamp format the parser could not read. Check what the first column actually looks like.
The file is too large. A few million candles is the ceiling for a single browser import, which is roughly thirteen years of 1-minute data. Split the file by year and import each part. They replay back-to-back with no gap.
The candles are shifted. Timezone. See the table above, and remember you can fix it after the fact from the dataset list.
Where your data ends up
Imported candles are parsed in your browser and stored on your own device. They are never uploaded to us, which means the size of your dataset is limited by your disk rather than by a plan, and your data is not sitting on someone else's server. Only the trades you log from a replay are saved to your account.
Next step
Once a dataset is in, the backtester replays it bar by bar. You can log trades as you go, tag them with the same confluences you use on live trades, and the results land in the same analytics as everything else. That is the point of doing it: a live month might give you ten trades, while an afternoon of replay gives you dozens, and both feed the same filters.
Ready to start journaling your trades?
Import trades directly from TradingView or log them manually — either way, your data builds your edge.
Start Free Trial