Tick data downloads

Note: if you wish to link to one of the downloads here, please link to the page and not directly to the file, the reason being that the files here get updated quite often, the older versions get archived & deleted and your link will end up leading to a 404 page.

Enabling tick data backtesting

Tick Data Suite v1.1.1 (updated 02.05.2012, compatible: MT4 build 225 – 419)
Birt’s patch script v0.21 (updated 21.02.2012, compatible: MT4 build 225 – 409)

Processing tick data

Birt’s CSV2FXT script v0.34 binaries (updated 29.04.2012)
Birt’s CSV2FXT script v0.34 source (you don’t need this unless you want to modify or recompile the DLL)

Downloading Dukascopy tick data

Birt’s Dukascopy tick data PHP scripts v0.25 (updated 22.03.2012)
Tim’s Dukascopier v0.4 (updated 26.03.2011)

Miscellaneous

Gain Capital data tools
Multiple MT4 instance loaders (only working up to MT4 build 409)
History file (HST) time shifter

Runtime links

.NET Framework 4.0 (required for Tim’s DukasCopier)
Visual C 2010 runtime (x86) (required for removing the 2GB limit on Windows XP/2003 Server with MT4 builds 405+)
Visual C 2010 runtime (x64) (required for removing the 2GB limit on Windows XP x64/2003 Server x64 with MT4 builds 405+)

Changelog for all the tick data stuff

  • #1 written by Uzair February 15, 2012 (3 months ago)

    Dukascopier is broken — won’t download any data past the end of Jan 2012.

    • #2 written by birt February 15, 2012 (3 months ago)

      It’s not the Dukascopier, it’s the Duakscopy data. They seem to be having some problems which should be temporary, they say.

    • #3 written by birt March 4, 2012 (2 months ago)

      Actually, you were right, it is the Dukascopier. The Dukascopy tick data storage format has changed and starting with the second half of Jan 2012, the older format is no longer available. Since currently the Dukascopier only “knows” about the older format, it will not download or process anything past that point.

      • #4 written by Uzair March 4, 2012 (2 months ago)

        Birt, any chance we can get an updated copy of the software?

        • #5 written by birt March 4, 2012 (2 months ago)

          Like I mentioned, I am not the one making the Dukascopier, Tim is. If he supplies an update, sure, I will upload it. In the meantime, you can contact him about an update (his email is in the about tab of the app) – my PHP scripts are updated to work with the new data format so he could just port my code. However, seeing that there was no update to it in a rather long time, I’m not sure if the project is still being maintained.

  • #6 written by Fred February 16, 2012 (3 months ago)

    Replacing the download URL from …*.bin to …*.bi5 redirects to a bin file. These work past end of Jan, however these bin files are totally different. They are compressed using 7zip. Having uncompressed this file, I am unable to reverse engineer the format. Matches 100% mpeg, but I can’t quite believe that…

    • #7 written by birt February 26, 2012 (2 months ago)

      The format is not a problem, but PHP doesn’t have anything readily available to decompress LZMA (7zip) so the PHP scripts are going to have to wait.

      The format (all integers are big endian):
      4 bytes – delta time (from start of the hour) in milliseconds, stored as a 32 bit int
      4 bytes – ask price multiplied by 10 * digits (divide by that to get the value), stored as a 32 bit int
      4 bytes – bid price multiplied by 10 * digits, stored as a 32 bit int
      4 bytes – ask volume, expressed in 100k units (so having 1 here means 100k), stored as a 32 bit float
      4 bytes – bid volume, same as ask volume, stored as a 32 bit float

      • #8 written by Dop March 1, 2012 (2 months ago)

        Hi Birt – what makes you think they’re in LZMA format? I have tried to unpack them with the utilities from 7zip – it seems to unpack but can’t decipher the result..

        • #9 written by birt March 1, 2012 (2 months ago)

          Well, I know it’s LZMA because I was able to unpack them using LZMA tools. As for the data format, it was quite easy to guess and it is specified in the comment above yours.

          I just updated the PHP scripts to v0.21 which are able to seamlessly work with the new format, however the processing script requires the command line 7-Zip executable when running on windows.

  • #10 written by nicco February 26, 2012 (2 months ago)

    Hi Everyone,

    I use the jForex dukas app to download bin files and create csv

    with the new script I get the error:

    Unable to identify the ask and bid colums
    “Bad CSV format”

    I have updated all scripts and made sure the dukas copy app is current – still get the error

    is there some other patch we need?

  • #11 written by alex February 26, 2012 (2 months ago)

    I have the same problem:

    Hi Everyone,

    I use the jForex dukas app to download bin files and create csv

    with the new script I get the error:

    Unable to identify the ask and bid colums
    “Bad CSV format”

    I have updated all scripts and made sure the dukas copy app is current – still get the error

    is there some other patch we need?

    • #12 written by birt February 27, 2012 (2 months ago)

      There’s no other patch or anything like that; all that has to be done is selecting the correct delimiter when saving the CSV, as specified in the guide.

  • #13 written by nicco February 27, 2012 (2 months ago)

    Here is a 18MB AUDNZD CSV as produced by dukascopy JForex
    http://…./AUDNZD.zip

    • #14 written by birt February 27, 2012 (2 months ago)

      In case you didn’t read the agreements, redistributing the tick data is prohibited and I try to stick to that on my website. I edited out the URL you posted.

  • #15 written by nicco February 27, 2012 (2 months ago)

    I see the problem. jForex Dukas is not using commas in their CSV production:
    Image: http://www.fastmage.com/dukas.PNG

  • #17 written by nicco February 27, 2012 (2 months ago)

    Of course – many apologies for being a hippocrate here. Very much appreciated Birt as always. Thank you very much – you are a champion

    • #18 written by birt February 27, 2012 (2 months ago)

      No worries. Glad you were able to sort it out.

  • #19 written by MachineGhost March 2, 2012 (2 months ago)

    There seems to be a problem with the process dukascopy PHP script and data holes with the new format:

    Warning: 0 sized AUDNZD/2009/00/07/00h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/01h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/02h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/03h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/04h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/05h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/06h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/07h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/08h_ticks.bi5
    Warning: 0 sized AUDNZD/2009/00/07/09h_ticks.bi5
    AUDNZD/2009/00/07/10h_ticks.bi5
    Error: failed to extract [AUDNZD/2009/00/07/10h_ticks.bi5]

    • #20 written by birt March 4, 2012 (2 months ago)

      Please download v0.22, the fix posted by Eugene below should fix that.

      • #21 written by MachineGhost March 5, 2012 (2 months ago)

        Is the AUDNZD data corrupted? CSV2FXT thinks the date is invalid.

        2009.01.07 10:04:37.397 1.20775 1.2091 -429492192 -429492192
        2009.01.07 10:04:38.576 1.2077 1.20905 -429492192 -429492192
        2009.01.07 10:04:42.505 1.208 1.2092 -429492192 0

        • #22 written by MachineGhost March 5, 2012 (2 months ago)

          That is, CSV2FXT thinks the third and fourth fields are the date columns and aborts.

          • #23 written by birt March 5, 2012 (2 months ago)

            The CSV file that contains the lines you posted is invalid. You need to use something other than a space as a field separator, I would recommend a comma. Also, the volume figures are all wrong.

          • #24 written by MachineGhost March 5, 2012 (2 months ago)

            But that CSV was from Dukascopy and processed by your script. Maybe the “fix” posted previously introduced an error?

            • #25 written by birt March 5, 2012 (2 months ago)

              By “your script” do you mean the PHP script or the CSV2FXT script? If you meant the PHP script, are you using v0.28? If you generated the CSV using JForex, did you select the comma as field separator as the guide instructs?

  • #26 written by Eugene March 2, 2012 (2 months ago)

    The file “process_dukascopy_data.php” needs a little fix in the line 201.

    Instead:

    $extracted = substr($extracted, 0, strrpos($fname, '.') + 1);

    should be:

    $extracted = substr($extracted, 0, strrpos($extracted, '.'));

    • #27 written by birt March 4, 2012 (2 months ago)

      Thanks, Eugene! Applied that fix and uploaded v0.22.

  • #28 written by Jack Lee March 4, 2012 (2 months ago)

    Hi Birt,

    The multiple loader for MT4 build 4.09 doesn’t work. It still rebuild the .fxt file. Could you also create a loader that patch the 2 GB Limit? Thanks & appreciated!

    • #29 written by birt March 4, 2012 (2 months ago)

      The loaders are not even supposed to prevent rebuilding the FXT file for over 1 year now. That functionality is now in the Tick Data Suite or alternatively in the Birt’s patch script. Same goes for the 2GB limit removal.

  • #30 written by Nicolas March 4, 2012 (2 months ago)

    Hi Birt,

    What is the size of the data for the back test so I can scale a solid state disks? Thanks N.

    • #31 written by birt March 4, 2012 (2 months ago)

      An FXT using Dukascopy data is some 2-3 GB per currency pair per timeframe. The CSV files are 5-7 GB per currency pair. The bin files for all currencies are over 10 GB, not sure exactly how big because it takes ages to measure their size given the number of files; likely they’re around 15 GB.

      If you intend to use SSD, I would advise downloading the bin files with the PHP scripts and simply creating the CSV + FXT for the currency pair and timeframe required whenever you need them and deleting them when you’re done. This way you could probably manage it without problems with a 64 GB SSD drive.

  • #32 written by jerome March 9, 2012 (2 months ago)

    the multiuple instance loader popup this message
    dUp sorry no data found!

    I execute the utility, and after 1 minute the message appear.
    and apprently no new instance of MT4 is started.
    any idea?

    • #33 written by birt March 9, 2012 (2 months ago)

      You are probably using build 414 while the most recent loader only supports up to build 409. The same functionality is now built into the Tick Data Suite.

  • #34 written by jiva March 21, 2012 (1 month ago)

    Hi Birt
    Oanda data is separated by a comma, I believe.
    What files do I need?
    Thanks…

    • #35 written by birt March 21, 2012 (1 month ago)

      What do you mean by “what files do I need”? You need the same files as for any other tick data; CSV2FXT to convert. I would advise reading the guide.

      • #36 written by jiva March 21, 2012 (1 month ago)

        Is there something different about Oanda tick data? Separated by commas?
        A while back you had a specific set of files just for Oanda, alternative something or other… because of the commas. I have tried to find that on your site but have not been able to.

        • #37 written by birt March 21, 2012 (1 month ago)

          All the CSV files are now handled by CSV2FXT, including Oanda. The old FXT scripts are obsolete.

  • #38 written by jiva March 21, 2012 (1 month ago)

    thank you…

  • #39 written by niks March 22, 2012 (1 month ago)

    Hi Birt
    I can’t run birt’s patch script on build 416, what should I do?
    thanks

  • #41 written by Pya March 27, 2012 (1 month ago)

    Hi Birt

    I cannot understand why the minimum lot size is 0.1 with the tick data suite.
    I cannot use 0.01 except with the normal optimization process in MT4.
    Thanks

    • #42 written by birt March 27, 2012 (1 month ago)

      The Tick Data Suite has nothing to do with the minimum lot size.

      The minimum lot size in a tick data backtest is the minimum lot size that is found on the brokerage that you used to create your FXT with CSV2FXT.

      Simply put: if you use a broker that has a min lot of 0.1 when running CSV2FXT, then your tick data FXT will also have a min lot of 0.1; if you use a broker with a min lot of 0.01, this will be reflected in the FXT and you will have a min lot of 0.01 in your tick data backtests.

      It is also possible to modify the minimum lot in an existing FXT file but it involves a hex editor and looking up the offset in FXTHeader.mqh, take a look at the FAQ for more info. I don’t recommend attempting this procedure if you’re not familiar with hex editing.

  • #43 written by Pya March 27, 2012 (1 month ago)

    I have download the data from dukascopy.
    So this is the reason

    • #44 written by birt March 27, 2012 (1 month ago)

      It does not matter where you download the data from. What matters is what broker you use when you run CSV2FXT.

  • #45 written by STan Fralick April 9, 2012 (1 month ago)

    Hi Bert, thanks for the scripts and the very useful web site.

    I have been using Dukascopier to download Dukas data, but as you stated it no longer works, so I downloaded the latest version of download_dukascopy_data.php(v0.25). Also downloaded and installed the latest version of php (5.4.0). Set up the ini file, and tried to run the download. I get errors indicating that several entry points in the php5.dll (and other dll’s) are not there. When I check the dll’s, sure enough there are no such entry points. I tried ver 5.3.10 and ver 5.2.10 of php and got similar errors (not exactly the same, but entry points are missing). I have php running under Vertrigo to support an Apache server, but I have turned Vertrigo off, and that version of php is in a different directory, so I don’t think I have interference. Have I missed some critical explanation?( My OS is XP).

    • #46 written by birt April 9, 2012 (1 month ago)

      Did you use C:\php as your PHP path? Can you please paste the exact errors that you are getting?

  • #47 written by STan Fralick April 10, 2012 (1 month ago)

    Using the ver 5.4.0 php I get the following error twice:
    “The procedural entry point -mysqlnd__end_psession could not be located in the dynamic link library php5.dll”
    Then I get the error:
    “The procedural entry point php_mb_check_encoding_list could not be located in the dynamic link library php mbstring.dll”
    Then the script chmods the folders for the first data, and exits.

    Sorry I cannot paste the error notices, because I cannot capture them on the clipboard. I have images but no way to upload. I checked the wording carefully.

    When I use earlier versions of php, I get similar errors, but the specific entry points are changed.

  • #49 written by STan Fralick April 10, 2012 (1 month ago)

    Thank you for your help.
    I have done exactly as you suggest. php is installed at c:\php. When I run cmd, I cd to the c:\php directory and run the script from there. I have modified the php.ini file so that the reference to the curl dll is now ‘extension=ext/php_curl.dll’. I have copied the php5.dll to both the php directory and the php\ext directory. I get the same resultant errors. When I examine the entry points into the dll’s using DLL viewer, I find that there are no such entry points. e.g. here are the listed entry points alphabetically near the missing entry:
    mysqlnd_connect 0x10147e80 0x00147e80 715 (0x2cb) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_cset_escape_quotes 0×10148890 0×00148890 716 (0x2cc) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_cset_escape_slashes 0×10148930 0×00148930 717 (0x2cd) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_debug_init 0x10149cb0 0x00149cb0 718 (0x2ce) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_debug_std_no_trace_funcs 0x1053e9c0 0x0053e9c0 719 (0x2cf) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_empty_string 0x103d6bfc 0x003d6bfc 720 (0x2d0) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_field_type_name 0x101471e0 0x001471e0 721 (0x2d1) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_fill_stats_hash 0×10155760 0×00155760 722 (0x2d2) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_find_charset_name 0×10148850 0×00148850 723 (0x2d3) php5.dll C:\php\php5.dll Exported Function
    mysqlnd_find_charset_nr 0×10148820 0×00148820 724 (0x2d4) php5.dll C:\php\php5.dll Exported Function

    Since these scripts work for so many users, I am quite sure that I am doing smething foolish, and will have a red face when I discover just what it is, but for now I am baffled.

    • #50 written by birt April 10, 2012 (1 month ago)

      Well, your problem is not with the scripts but with PHP itself. I’ve never had such problems before so I’m guessing it’s something specific to your machine, possibly having something to do with your other PHP installation. I would suggest posting your issue on a PHP forum such as http://www.phphelp.com/forum/. I suggest checking your environment vars for any potential issues.

      In the meantime, you could download the data with JForex or via the Dukascopy website.

  • #51 written by STan Fralick April 10, 2012 (1 month ago)

    Thanks again. I will try the php forum. Unfortunately, I am in the US so cannot get a dukascopy jForex account. So manual downloading is probably the answer for a while.

  • #52 written by STan Fralick April 10, 2012 (1 month ago)

    A final thanks. Just for others info, my problem was with one of my other php installations. When I removed all other installs and changed the path variable, the scripts operate perfectly. It’s great to be able to update my data again. Birt you are the best!

  • #53 written by iDouble April 11, 2012 (1 month ago)

    Build 409, anyone?

    All of a sudden, my build 409 now cares about the fact that I renamed the liveupdate file, when it never cared about it before – bizarre. Now, 409 starts and then immediately shuts down. If I rename liveupdate.old back to liveupdate, 409 launches, at then attempts to upgrade itself (of course).

    My stupid broker gave me a link, promising me that it was their previous 409 download – when in reality, it was their 419. After installing that, I can’t seem to find a 409. Everything that says its 409, install as 419. What pain in the neck.

    Does anybody know where you can get 409, and have it actually install as 409 and not 419?

    Much appreciated! Very frustrated today.

    Thanks,
    iD

  • #54 written by iDouble April 11, 2012 (1 month ago)

    Well, turns out that all you need to do is locate a copy of an old Terminal.exe for 409, and replace the current Terminal.exe file already on your file system. Rename the current Terminal.exe, to something like Terminal.old, and then simply drop the 409 version of the same file into its place. You might also want to rename liveupdate, to something like liveupdate.old, so MT4 won’t attempt any updates.

    Hope that helps someone.

    • #55 written by birt April 12, 2012 (1 month ago)

      Funny thing is that I contacted you via email and told you exactly what you posted but I’ve just noticed the email wasn’t delivered so I’m glad you were able to figure it out on your own.

  • You may use these HTML tags: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <strike> <strong>

     

  • Comment Feed for this Post
Go to Top