How to prepare your tick data for Metatrader 4 – old version

If you’re reading this guide, I will assume you already downloaded your tick data either from one of the free sources mentioned on the Downloading free tick data page or from your own private source and now you need to use it in Metatrader 4.

Converting the data

To put it simply, Metatrader 4 does not know how to directly read a CSV file containing tick data and thus it cannot use it in your backtests. However, what it can read is a proprietary file format that contains ticks so all we have to do is convert from our CSV file to FXT, the latter being the format I mentioned. To this end, I wrote a few scripts but later decided to make it less complicated and merged them into a single script that should be able to convert data from pretty much any source and put it into an FXT. One thing to note is that during backtesting, Metatrader 4 also makes use of the HST files when calculating the indicators so in order to have accurate tick data backtesting, you must also have HST files that match your FXT file.

So, what you need to convert is the CSV2FXT binaries that can be found in the tick data downloads section. This script has been compiled with MT4 build 225 to ensure it works on a wide range of MT4 builds.

Finally, here’s a short guide on how to convert the tick data to an FXT file and a series of HST files:

  1. If you haven’t done so already, you have to head to the tick data downloads section and download the CSV2FXT binaries archive.
  2. Copy the files from the zip archive to your MT4 installation folder. There’s a directory structure inside, make sure they land in the proper places (CSV2FXT.mq4 and CSV2FXT.ex4 must be in experts\scripts, FXTHeader.mqh must be in experts\include, CsvReader.dll must be in experts\libraries). Also make sure that you are copying them to the correct folder if you have multiple MT4 installations on your system.
  3. Move the tick data file (the CSV file) to experts\files in the same MT4 installation folder.
  4. Open a chart for the pair that you have data for (if you have an EURUSD.csv file, you MUST open an EURUSD chart).
  5. Select the timeframe that you wish to generate the FXT for. For instance, if you want to backtest on M1, then select M1 as the chart timeframe. Please note that the FXT file that you create for a particular timeframe (even M1) will NOT work for any other timeframe; you simply have to generate a new FXT if you want to backtest on another timeframe.
  6. Ensure that your terminal is connected to the broker (look in the lower right corner, if it says “not connected” you need to fix that before proceeding).
  7. Make sure that DLL calls are allowed. If you don’t know how to do that, you have to open the Tools menu, select Options, select Expert Advisors and ensure that Allow DLL imports is enabled while Confirm DLL function calls is disabled.
  8. Double click the CSV2FXT script in the navigation panel (it’s in the scripts section).
  9. Configure the parameters in the window that pops up.
    • CSV2FXT_version – this is a parameter that is only meant to give you a quick indication of what version you have installed. Changing it has no effect.
    • CsvFile – you can leave this blank if the file is named just like the symbol and has a CSV extension (e.g. EURUSD.csv); otherwise, just type the file name.
    • CreateHst – this setting must be true in order to create the HST files that you need for your backtest. You can set it to false if you already generated HST files for the symbol with the same GMT/DST settings and you’re just generating an FXT for a different timeframe. You must create new HST files every time you change the GMT or DST.
      Note: Enabling this setting will create HST files for the whole time span of your tick data file regardless of the time range selected.
    • Spread – the fixed spread of your resulting FXT file, expressed in pips (2.3 will result in a 2.3 pips spread). Leaving it set to the default of 0.0 will make the converter use the current spread of your broker. Please pay attention to the fact that many brokers are widening their spreads during the weekends.
      If you intend to use real spread (the variable spread in your CSV), you can leave this parameter set to 0.0. Note: the Spread field in the MT4 backtesting window has no effect when backtesting using tick data.
    • StartDate and EndDate – these fields control the time span of the FXT file. The format of the StartDate and EndDate fields is YYYY.MM.DD. You can leave these fields blank, in which case the converter will just use the earliest, respectively the latest date available in the CSV file.
    • UseRealSpread – as its name suggests, enabling this parameter will make your resulting FXT use the real (variable) spread from your CSV file.
      The Tick Data Suite will autodetect whether your FXT is using real spread or not so there’s nothing to worry about if you’re using that. Once more, note that the Spread field in the MT4 backtesting window has no effect when backtesting using tick data.
    • SpreadPadding – if using real spread, you can pad it by a given number of pips – if you want to pad it by 0.8 pips, just specify 0.8 here.
    • PipsCommission – if you want your FXT to have a commission, you can configure the desired value here. The figure is round-trip and it is expressed in pips.
    • MoneyCommission – as an alternative to having the commission in pips, you can also set the commission in money. The value is expressed in base account currency per lot. If you fill this in, any value specified for PipsCommission will be disregarded.
    • Leverage – changes the leverage of your FXT.
    • FXTGMTOffset – if you want your FXT to have a GMT offset other than 0, specify it here.
    • CSVGMTOffset – the GMT offset of the data in your CSV file. The conversion script is able to autodetect the formats of several free tick data providers and apply the correct setting here, so it’s probably safe to leave it set to “autodetect”. If you get a message in the experts log about the script not being able to identify your tick data source, you can set the CSV GMT offset here manually.
    • FXTDST – the DST setting of your FXT. Type 0 for no DST, 1 for US DST, 2 for European DST. Note that the US DST setting calculates the DST according to the regulations that were applied starting with 2007.
    • CSVDST – the DST setting of your CSV. Should be safe to leave it to “autodetect”. Otherwise, use the same guidelines as for the FXTDST.
    • TimeShift – Enabling this parameter will shift all the generated data 28 years in the past. This is intended for use with EAs that are suspect of having hardcoded days for the purpose of cheating backtesting. The reason behind the 28 year shift is that the calendar is identical when it comes to the days of the week and leap years. This is not a foolproof method and some EAs may have legitimate reasons to yield different results when backtested with a shifted time.
    • CreateM1, CreateM5, CreateM15, CreateM30, CreateH1, CreateH4, CreateD1, CreateW1, CreateMN – These parameters are meant to allow you to create multiple FXT files in a single run. By default, the script will create the FXT for the timeframe of the chart you are running it on, no matter if the parameter for that specific timeframe is enabled or not. Only enable these parameters if you actually need the FXT for a different timeframe.
  10. Click “Ok”. Once you do that, the data generation process will start and it will typically take 20 to 45 minutes, depending on the data range and volume, possibly even more if you’re using a slow machine. A progress indicator will appear in the upper left side of your chart and when the processing is finished, you will get an alert. During the conversion, some data is being printed in the experts log and if you have any problems with the script it’s probably a good idea to keep an eye on that.

Once you’re done with all the steps above and the script finishes processing, you will be asked whether you want the script to move the files to their proper locations. If you choose Yes, restart the terminal to ensure the HST files are properly synchronised and skip to the next guide (Using the tick data in your backtests). If you choose No, you will have an FXT file and a bunch of HST files in your experts\files folder and before actually using them, you need to copy them in the correct location. Proceed with the following steps:

  1. Exit the Metatrader 4 terminal.
  2. Move all .HST files from experts\files to history\[your_server_name].
    Pay very close attention if you have multiple server directories in your history folder – you will have to move them into the one that’s correct for active account!
  3. Move the generated FXT file from experts\files to tester\history.

At this point, you’re done with the conversion and setup! You’re now ready to proceed to backtesting, but please note that it’s not as easy as clicking Start in the backtesting user interface. You will have to use some additional tools which are described in the Using the tick data in your backtests section.

If you run into any problems, please head to the FAQ & Troubleshooting page.

  • #1 written by SteveChou March 5, 2015 (1 year ago)

    Dear Birts
    can you help me to use the CSV2FXT for 509 without login, because my mt4 show old version, so i can’t build the FXT with 509 thank you!

    • #2 written by birt March 5, 2015 (1 year ago)

      You would have to edit CSV2FXT to let you run it even when you are not connected. You would also have to edit FXTHeader.mqh to specify defaults for values that are normally read from the server via MarketInfo(), Account* etc..

  • #3 written by Anas April 25, 2015 (1 year ago)

    after apply CSV2FXT:

    2015.04.25 07:05:22.262 CSV2FXT EURUSD,M1: The date column appears to be 0. Sample: 2010.04.01 00:00:02.822 1.35263 1.35253 1.5 2.3

    then wait many hours with no results no HSt or FXT files, where is the problem ?

    • #4 written by birt April 25, 2015 (1 year ago)

      Your CSV file is using space as a delimiter. You need to export it with comma as a delimiter.

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

     

  • Comment Feed for this Post
Go to Top