Dukascopy tick data and HistData CSV: free, step by step
Free forex tick data with both the bid and the ask is out there, but each source has its own catch. This page walks through the two routes we have checked against real files — HistData's monthly CSV and Dukascopy's hourly bi5 archives — along with what we found on the way: prices stored the other way round, timestamps that do not match the vendor's own FAQ, and rate limits that turn a few months of data into days of waiting.
We wrote it for Exactick, which never downloads market data itself: you bring the files, and the app reads them from your browser's local storage.
Exactick is open. Open it in your browser — free, no account, every feature working on any three months of data. To learn the controls before you download anything, Getting started runs a first backtest on the built-in sample.
1. What Exactick can read
Exactick imports a folder, not individual files. Two formats are accepted:
- Tick CSV from HistData or TrueFX — a folder of CSV files, one per month. Exactick works out which of the two formats it is by reading the first lines. This is the route we recommend, and section 2 walks through it.
-
Dukascopy bi5 — one compressed file per hour, in folders that
mirror Dukascopy's own structure:
EURUSD/2024/02/06/13h_ticks.bi5. Note that the month in that path is zero-based:02is March. Section 3 covers it, including why it takes far longer to collect.
Drag the folder onto the Data screen, or use Choose folder. You will see a summary — instrument, period, file count, size — before anything is converted.
Which instruments can be replayed. Exactick will import a folder of
any instrument, but the replay engine currently supports
EURUSD, GBPUSD, USDJPY and XAUUSD.
Anything else converts and then refuses to open, so import one of those four first.
2. HistData CSV, step by step (recommended)
HistData.com publishes tick data with bid and ask, free, one zip file per month, with no account and no registration. Three months of data is three downloads that take a few minutes — which is why this is the route we suggest first.
Download
- Go to Download Free Forex Data and choose Generic ASCII → Tick Data. This part matters: the M1 and NinjaTrader options are bar data, and only the Generic ASCII tick files carry the ask price. Without the ask there is no spread, and without a spread Exactick cannot fill an order honestly.
- Pick your pair, then a year, then a month, and press the download button.
-
You get
HISTDATA_COM_ASCII_EURUSD_T202407.zip. Unzip it. Inside areDAT_ASCII_EURUSD_T_202407.csv— the data — and a small.txtstatus report, which Exactick ignores. - Repeat for each month you want, unzip them all into one folder, and drop that folder onto the Data screen.
Keep the file names HistData gives you. There is no instrument column in
this format, so Exactick reads the pair out of the file name — the
EURUSD in DAT_ASCII_EURUSD_T_202407.csv. Rename the file to
something without the pair in it and the import will land under the wrong name.
Sizes, so nothing surprises you: a month of EUR/USD is roughly 8 MB zipped and about 55 MB as CSV (measured on 2018-01 and 2024-07). Three months is around 170 MB of CSV on disk before Exactick converts it into its own compact store.
Use 2010 or later
HistData's tick files carry the two prices as DateTime,Bid,Ask, and that is
what Exactick reads. In files from before 2010 the two prices are the other
way round: we downloaded a dozen months across three pairs on 2026-09-07, and every
row of EUR/USD 2000–2009, GBP/USD 2005 and USD/JPY 2006 has the ask below the bid,
while everything from 2010 onwards is correct.
A backtest run on those files would be given a negative spread — it would buy below the bid and sell above the ask, and every result would flatter you. So: take your three months from 2010 or later. If you specifically need an older period, use Dukascopy bi5 for it instead. Exactick checks for this when you drop the folder and stops before converting anything, rather than quietly building you a dataset that pays out on a spread that never existed.
About the clock in these files
HistData stamps its rows in New York local time, and Exactick converts them to UTC on import, following US daylight saving. Their own FAQ says the times are a fixed Eastern offset with no daylight-saving adjustment; the files say otherwise, and we went with the files. We checked two independent markers — the Friday close and Sunday open of every weekend in the file, and the tick burst at the US payrolls release — on data from 2010 and from 2024, and both land where New York local time puts them. If an import still looks shifted in time to you, that is worth telling us about: email [email protected] with one line of the file.
3. Dukascopy bi5, when you want Dukascopy's data specifically
Dukascopy publishes historical tick data free of charge and permits downloading it for personal use. There is no public API and no way for a web page to fetch it directly, so you run a small script on your own machine. Choose this route when you want that particular feed, or a period HistData does not serve well — not because it is faster, because it is not.
What you need
- Node.js version 18 or newer.
- Our downloader: exactick-fetch-bi5.mjs. It is a single file with no dependencies, and you can read all of it before running it.
Run it
Open a terminal in the folder where you saved the script, and ask for a few days to start with:
node exactick-fetch-bi5.mjs --pair EURUSD --from 2024-03-04 --to 2024-03-08
That writes into ./exactick-data/EURUSD/. When it finishes, drop the
EURUSD folder onto the Data screen. Other options are
--out (where to save) and --interval (milliseconds between
requests). --pair will download any Dukascopy instrument, but replay currently
supports EURUSD, GBPUSD, USDJPY and
XAUUSD — anything else imports and then refuses to open, so start with one of
those four.
Expect this to be slow, and plan for it
Dukascopy rate-limits repeated downloads from the same IP address, and the limit is real. How real varies a great deal between sessions. Our best measurement got six consecutive hourly files before a refusal. Our worst, on the same day and from the same machine, completed two requests out of twenty in five minutes — the rest were refused, timed out, or had the connection dropped outright. No setting in the script removes this — it is on their side. Plan for the worst case, not the best one.
So the honest advice is:
- Start with days, not years. A week is 168 files; a year is more than 8,700. Test your idea on a small period first — if it does not survive a week of ticks, a year will not save it.
- Stopping is safe. The script never re-downloads a file you already have. Press Ctrl+C whenever you like and run the same command again later to continue where it stopped.
-
Do not fight the limit. After a failure the script waits several minutes
on purpose; retrying hard during a block appears to make it last longer. If you see
repeated retries, stop, raise
--interval, and come back later.
4. TrueFX
TrueFX also publishes historical tick CSV, and Exactick recognises its layout. Two things to know before you go there: their historical downloads require you to register an account, and unlike HistData we have not yet been able to verify our reader against a real TrueFX file — the format we implemented is the publicly known one, not one we have confirmed byte for byte. It should work. If you use TrueFX, we would genuinely like to hear how it went: [email protected].
5. How much data do you actually need?
More than you think for a conclusion, and less than you think to start. A week is enough to see whether your exits behave the way your backtester claimed. A few months is enough to see whether an edge survives a change of regime. The Free tier covers any single dataset up to three months long — and you choose which three months, so you can test 2015 as easily as last quarter.
Getting three months is a few minutes of clicking on the CSV route in section 2, and days of elapsed time on the bi5 route in section 3 — three months of hourly bi5 files is about 2,160 downloads, and at the rates we measured that is something you start and leave running, not an afternoon's work. Whichever route you take, import a short range first and confirm it looks right before committing to the rest.
6. Troubleshooting
-
The instrument shows up with the wrong name (CSV). HistData files carry
no instrument column, so the pair is read from the file name. Restore the original name,
such as
DAT_ASCII_EURUSD_T_202407.csv. - “The ask price is below the bid” on import (CSV). Check the year of the files. In HistData files from before 2010 the bid and ask columns are the other way round, and Exactick refuses them rather than give your backtest a negative spread. Use 2010 onwards, as in section 2.
- Some files are zero bytes (bi5). That is correct. The market is closed at weekends and Dukascopy answers with an empty file rather than an error. Exactick skips them.
-
“No bi5 or CSV files matched a known format” on import.
The folder structure
matters. Exactick reads the instrument and the timestamp out of the path, so
EURUSD/2024/02/06/13h_ticks.bi5works and a flat folder of renamed files does not. -
The dates look one month off (bi5). Dukascopy's month is zero-based in
the path.
2024/02is March 2024, not February. - The download keeps retrying (bi5). You are rate-limited. Stop, wait, and re-run the same command — only the missing files will be fetched.
-
“Replay does not support the pair” after importing. The data
is fine and stays where it is; the replay engine only covers
EURUSD,GBPUSD,USDJPYandXAUUSDtoday. Import one of those four to replay now, and delete the other dataset from the Data screen if you want the space back. - Still stuck? Email [email protected]. Questions are answered asynchronously, usually within two business days.
7. A note on data licensing
The data belongs to whoever published it, not to us and not to you. Dukascopy permits downloads for personal use but does not permit redistributing the data or building a competing database from it. HistData gives the data away without publishing licence terms beyond “use it at your own risk”, and TrueFX has terms of its own. Read the terms of whichever source you use, and keep what you download to yourself.
This is also why the built-in sample is synthetic. We cannot legally ship you somebody else's market data, so we generate our own for the demo and leave the real thing to you.