Where can someone get free (or very cheap) high frequency tick forex data?

I am currently working on a large data set (approx 80 million data points over 10 years). I would like another set of data that has one currency in common. Eg, I have EUR/USD and would like USD/CNY or EUR/AUD etc. Doesn't need to be over the full 10 years, 1 year would be more than sufficient.

I found a few places online that sell this data, but the cheapest I could find was approx 60 Euros which is a lot for a student.

Is there anywhere someone can get data like this cheaper?

• Which platform or programming language do you intend to trade this strategy though and/or test your strategy with? – Jon Grah Mar 13 '18 at 14:54

You might get something from Integral's True FX

• Hi, thanks! This is exactly what I wanted. Just to add in case anyone finds this also after data, True FX provides monthly data from 2009-2017 with all major currency pairs. I just downloaed all months of 2010 and combined the CSV files. Very helpful! Thanks! – Patty Jul 3 '17 at 23:54

Dukascopy offers historical tick data. Through their historical data website you can download what you want, but registration is required, and lots of manual clicking.

However if you are comfortable with scripting, you can directly download the tick data yourself. The URL pattern is http://www.dukascopy.com/datafeed/{currency}/{year}/{month}/{day}/{hour}h_ticks.bi5, so for example http://www.dukascopy.com/datafeed/AUDCAD/2017/00/01/23h_ticks.bi5 gets you ticks for AUDCAD from 1 January 2017, 23:00-23:59:59.999 UTC.

Note that the months are zero-based (I don't know why), so Jan-Dec is 00-11 (two digits). Every hour is present as a file, even if the market is closed.

The file format is an LZMA-compressed binary packed file, so you will need to decompress it to CSV or other format according to your need. Each tick is 20 bytes, five four-byte fields:

• (long) the relative time from the hour, in milliseconds
• (long) the ask price, in points
• (long) the bid price, in points
In python, I use a struct.unpack('>LLLff', bytes) to extract the fields.