Несовпадение значений MA в тестере и в реале. Проверьте, pls.

 
Дошли руки наконец склепать простенький стенд для проверки соответствия значений индикаторов в режиме тестирования и в реале (имеется ввиду время, а не реальный счет :)

Выглядит это дело так:

1. Эксперт пишет потиковые значения котировок в файл, параллельно пишутся значения MA (можно и любой другой индикатор) в другой файл.
2. Из файла котировок делаем fxt файл, который подсовываем тестеру.
3. Запускаем тот же эксперт в тестере.
4. Экперт в тестере опять же пишет котировки и значения MA в раздельные файлики.
5. Сравниваем файлы значений тиков и MA в папках experts\files и tester\files

Долго тестировать необходимости нет - достаточно поставить эксперт на M1 больше, чем на 100 минут - ибо тестер работает только при наличии > 100 баров.

У меня по результатам тестирования значения файла с тиками совпадают один в один, а вот с MA - расходятся.
Пример:
Тики:
Тестер:
otm;ctm;open;low;high;close;volume;flag
17.7.2006 13:4:00;17.7.2006 13:4:18;1.2538;1.2538;1.2538;1.2538;1;1
17.7.2006 13:4:00;17.7.2006 13:4:25;1.2537;1.2537;1.2538;1.2537;1;1
17.7.2006 13:4:00;17.7.2006 13:4:42;1.2537;1.2536;1.2538;1.2536;1;1
17.7.2006 13:4:00;17.7.2006 13:4:58;1.2537;1.2536;1.2538;1.2537;1;1
Реал:
otm;ctm;open;low;high;close;volume;flag
17.7.2006 13:4:00;17.7.2006 13:4:18;1.2538;1.2538;1.2538;1.2538;1;1
17.7.2006 13:4:00;17.7.2006 13:4:25;1.2537;1.2537;1.2538;1.2537;1;1
17.7.2006 13:4:00;17.7.2006 13:4:42;1.2537;1.2536;1.2538;1.2536;1;1
17.7.2006 13:4:00;17.7.2006 13:4:58;1.2537;1.2536;1.2538;1.2537;1;1

Значения MA:

Тестер:
otm, ctm, ma0_10; ma1_10; ma0_100; ma1_10
17.7.2006 13:4:00;17.7.2006 13:4:18;1.25387;1.2539;1.254011;1.25403
17.7.2006 13:4:00;17.7.2006 13:4:25;1.25386;1.2539;1.25401;1.25403
17.7.2006 13:4:00;17.7.2006 13:4:42;1.25386;1.2539;1.25401;1.25403
17.7.2006 13:4:00;17.7.2006 13:4:58;1.25386;1.2539;1.25401;1.25403
Реал:
otm, ctm, ma0_10; ma1_10; ma0_100; ma1_10
17.7.2006 13:4:00;17.7.2006 13:4:18;1.25378;1.25376;1.253832;1.253851
17.7.2006 13:4:00;17.7.2006 13:4:25;1.25377;1.25376;1.253811;1.25383
17.7.2006 13:4:00;17.7.2006 13:4:42;1.25377;1.25376;1.253811;1.25383
17.7.2006 13:4:00;17.7.2006 13:4:58;1.25377;1.25376;1.253811;1.25383

Разница налицо...

Текст эксперта для желающих:


//+------------------------------------------------------------------+
//|                                                           tt.mq4 |
//|                                                              Max |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Max"
#property link      ""

//---- input parameters
extern int       tt=0;

int v = 0;
string tfn, mfn;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   int fh;
   tfn = Symbol()+"_tick_log.csv";
   mfn = Symbol()+"_ma_log.csv";
   fh = FileOpen(tfn,FILE_READ|FILE_WRITE|FILE_CSV,";");
   FileSeek(fh,0,SEEK_END);
   if (FileSize(fh)==0) FileWrite(fh,"otm;ctm;open;low;high;close;volume;flag");
   FileClose(fh);

   fh = FileOpen(mfn,FILE_READ|FILE_WRITE|FILE_CSV,";");
   FileSeek(fh,0,SEEK_END);
   if (FileSize(fh)==0) FileWrite(fh,"otm, ctm, ma0_10; ma1_10; ma0_100; ma1_10");
   FileClose(fh);
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
string ctm(){
  int ct = CurTime();
  return (TimeDay(ct)+"."+TimeMonth(ct)+"."+TimeYear(ct)+" "+TimeHour(ct)+":"+TimeMinute(ct)+":"+TimeSeconds(ct));
}
string otm(){
  int ct = CurTime();
  return (TimeDay(ct)+"."+TimeMonth(ct)+"."+TimeYear(ct)+" "+TimeHour(ct)+":"+TimeMinute(ct)+":00");
}

int start(){
   int fh;
   double ma0_10, ma1_10, ma0_100, ma1_100;
   string od,cd;
   od = otm();
   cd = ctm();
   ma0_10  = iMA(NULL,0,10 ,0, MODE_SMA,PRICE_OPEN, 0);
   ma1_10  = iMA(NULL,0,10 ,0, MODE_SMA,PRICE_OPEN, 1);
   ma0_100 = iMA(NULL,0,100,0, MODE_SMA,PRICE_OPEN, 0);
   ma1_100 = iMA(NULL,0,100,0, MODE_SMA,PRICE_OPEN, 1);

   fh = FileOpen(tfn,FILE_READ|FILE_WRITE|FILE_CSV,";");
   FileSeek(fh,0,SEEK_END);
   FileWrite(fh,od,cd,Open[0],Low[0], High[0], Close[0],1,1);
   FileClose(fh);

   fh = FileOpen(mfn,FILE_READ|FILE_WRITE|FILE_CSV,";");
   FileSeek(fh,0,SEEK_END);
   FileWrite(fh,od,cd,ma0_10, ma1_10, ma0_100, ma1_100);
   FileClose(fh);
   return(0);
  }



Ссылку на утиль для преобразования в fxt дам по необходимости..
Буду рад, если кто-то воспроизведет тот же сценарий - тем же или другим способами, что и я.. Особенно буду рад, если результаты тестирования не совпадут с моими.

 
Есть вопрос по пункту 2 (самому сложному в данному случае)
2. Из файла котировок делаем fxt файл, который подсовываем тестеру.

Правильно ли и со всеми условиями собрали FXT файл?

Кроме того, Вы приводите в качестве совпадения 4 последних бара, хотя MA на 10,100 периодов. Если 10 или 100 баров совпадают, то и MA будут совпадать.

Проверьте корректность всех условий еще раз, пожалуйста. Выберите 10 минутный период, гарантированно его прождите, собрав все тики. Перепроверьте все тики (объемы сходятся с барами?), потом соберите FXT файл и прогоните тест. Достаточно будет МА10.
 
Уточните, pls - как объем влияет на расчет MA? - Поскольку я его не учитываю, в fxt везде пишется единица. И тики по времени в тестере и в реале - совпадают. Но если действительно влияет - поправлю..

И еще - принимает ли в расчет тестер 100 начальных баров? Если нет, то похоже, действительно надо выждать еще некоторое количество баров для проверки..
 
Уточните, pls - как объем влияет на расчет MA? - Поскольку я его не учитываю, в fxt везде пишется единица. И тики по времени в тестере и в реале - совпадают. Но если действительно влияет - поправлю..

Объем - как проверочный параметр для проверки корректности баров. Нужно именно удостовериться, что все собранные тики за 10 баров (если речь об МА10) точно соответствуют существующим барам. После этого нужно уже переходить к сборке FXT файла, а дальше к проверкам в тестере.

Если Вы собрали 10 тиков, а на графике видите 11, то значит Вы потеряли один тик и, возможно, бар будет чуть другой. На быстром рынке вполне вероятно прибытие нескольких котировок по одному инструменту в одном пакете и эксперт запустится только один раз, на последнем пакете.
Причина обращения: