Справка по MetaTrader 4
Справка по MetaTrader 4АвтотрейдингТестирование стратегийФайлы истории FXT

Файлы истории FXT

В своей работе тестер использует файл *.FXT со сгенерированной последовательностью баров. Каждая запись сгенерированной последовательности представляет собой состояние бара на тот или иной момент времени в пределах одного бара. Проводя моделирование баров, тестер берет из этого файла новые бары и обновляет текущий бар либо добавляет новый, если он только начал формироваться.

Ниже приведено краткое описание формата. Файл начинается с заголовка:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct TestHistoryHeader
  {
   int               version;            // 405
   char              copyright[64];      // copyright
   char              symbol[12];
   int               period;
   int               model;              // for what modeling type was the ticks sequence generated
   int               bars;               // amount of bars in history
   time_t            fromdate;           // ticks generated from this date
   time_t            todate;             // ticks generating stopped at this date
   double            modelquality;       // modeling quality
   //---- general parameters
   char              currency[12];       // currency base
   int               spread;
   int               digits;
   double            point;
   int               lot_min;            // minimum lot size
   int               lot_max;            // maximum lot size
   int               lot_step;
   int               stops_level;        // stops level value
   int               gtc_pendings;       // instruction to close pending orders at the end of day
   //---- profit calculation parameters
   double            contract_size;      // contract size
   double            tick_value;         // value of one tick
   double            tick_size;          // size of one tick
   int               profit_mode;        // profit calculation mode        
   //---- swap calculation
   int               swap_enable;        // enable swap
   int               swap_type;          // type of swap                   { SWAP_BY_POINTS, SWAP_BY_DOLLARS, SWAP_BY_INTEREST }
   double            swap_long;
   double            swap_short;         // swap overnight value
   int               swap_rollover3days; // three-days swap rollover
   //---- margin calculation
   int               leverage;           // leverage
   int               free_margin_mode;   // free margin calculation mode   { MARGIN_DONT_USE, MARGIN_USE_ALL, MARGIN_USE_PROFIT, MARGIN_USE_LOSS }
   int               margin_mode;        // margin calculation mode        
   int               margin_stopout;     // margin stopout level
   int               margin_stopout_mode;// stop out check mode            { MARGIN_TYPE_PERCENT, MARGIN_TYPE_CURRENCY }
   double            margin_initial;     // margin requirements
   double            margin_maintenance; // margin maintenance requirements
   double            margin_hedged;      // margin requirements for hedged positions
   double            margin_divider;     // margin divider
   char              margin_currency[12];// margin currency
   //---- commission calculation
   double            comm_base;          // basic commission
   int               comm_type;          // basic commission type          { COMM_TYPE_MONEY, COMM_TYPE_PIPS, COMM_TYPE_PERCENT }
   int               comm_lots;          // commission per lot or per deal { COMMISSION_PER_LOT, COMMISSION_PER_DEAL }
   //---- for internal use
   int               from_bar;           // fromdate bar number
   int               to_bar;             // todate bar number
   int               start_period[6];    // number of bar at which the smaller period modeling started
   int               set_from;           // begin date from tester settings
   int               set_to;             // end date from tester settings
   //----
   int               freeze_level;       // order's freeze level in points
   int               generating_errors;  
   //----
   int               reserved[60];
  };

После этого идет массив сгенерированных баров:

#pragma pack(push,1)
struct TestHistory
  {
   time_t            otm;                // время бара
   double            open;               // значения OHLCV
   double            low;
   double            high;
   double            close;
   double            volume;
   time_t            ctm;                // текущее рабочее время внутри бара
   int               flag;               // флаг запуска эксперта (0-бар модифицируем, а эксперта не запускаем)
  };
#pragma pack(pop)