Несоответствие в тестировщике в разных режимах

 

Оптимизация эксперта была проведена по "Только цены открытия" на таймфрейме H1, при этом в коде эксперта не ставилось никаких ограничений на новый бар. Поясню что тестирование в режиме по "Каждый тик на основе реальных данных" не представляется возможным, ввиду отсутствия доступа к суперЭВМ. Результат тестирования оптимизированного советника по "Только по ценам открытия" таймфрейме H1 таков:


С целью приближения работы эксперта к режиму "Только цены открытия" на первом этапе был взят код из стандартного эксперта Moving Average, который допускает прохождение только по открытию нового бара, в виде:

  

MqlRates rt[2];
//--- go trading only for first ticks of new bar
   if(CopyRates(_Symbol,_Period,0,2,rt)!=2)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   if(rt[1].tick_volume>1)
      return;

и вставлен в самое начало события OnTick .

Результат теста по "Только цены открытия" таков:


Разница есть, но она не так существенна.

Результат теста по "Каждый тик на основе реальных данных" таков:


Видим сильные отличия как по форме графика так и по суммам более чем в 4 раза.

На втором этапе  чтобы сделать так, чтобы реальные торговые операции выполнялись однозначно раз в час и только на открытии нового бара перевесил всю торговлю на OnTimer, событие OnTimer  при инициализации эксперта запускается с периодом в 1 сек, потому сделал следующий код в начале процедуры OnTimer, суть которого синхронизировать время открытия нового бара и одновременно установить период на OnTimer в 1 час:

   if
   (
      flagNewBarH1==false
      && isNewBar(PERIOD_H1)!=true
   )
   {
      return;
   } 
   else
   {
      if ( flagNewBarH1==false )
                {
                      EventSetTimer( 60*60 );
                      flagNewBarH1=true;
                }
   }


где

//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool isNewBar(ENUM_TIMEFRAMES period)
  {
   //--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
   //--- текущее время
   datetime lastbar_time=SeriesInfoInteger(Symbol(),period,SERIES_LASTBAR_DATE); //Period()

   //--- если это первый вызов функции
   if(last_time==0)
     {
      //--- установим время и выйдем
      last_time=lastbar_time;
      return(false);
     }

    //--- если время отличается
   if(last_time!=lastbar_time)
     {
      //--- запомним время и вернем true
      last_time=lastbar_time;
      return(true);
     }
   //--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }

 Результат теста по "Только цены открытия" совпадает с первым рисунком. 

Результат теста по "Каждый тик на основе реальных данных" таков:


 

Прошу помощи в интерпретации результатов торговли одного и того же эксперта, но с разными режимами "Только цены открытия" и "Каждый тик на основе реальных данных", а главное что не так и что надо сделать чтобы результаты были одинаковыми.

По моему мнению результаты должны совпадать, ну или быть хотя бы близкими по виду и цифрам, а мы наблюдаем кардинальное отличие.

 

Отрежьте от своего кода все, что вносит разницу. Заодно сами разберетесь.

Если не использовать отложенных ордеров, СЛ и ТП, а все действия совершать на первом тике бара, то разницы не будет.

 
Andrey Khatimlianskii:

Отрежьте от своего кода все, что вносит разницу. Заодно сами разберетесь.

Если не использовать отложенных ордеров, СЛ и ТП, а все действия совершать на первом тике бара, то разницы не будет.


отложенные ордера отключены

стопов и тейков нет, но есть программный трейлинг ...

 
gedd:

отложенные ордера отключены

стопов и тейков нет, но есть программный трейлинг ...

Трейлинг раз в бар проверяется? И закрывает ордера по рынку на первом тике бара? Тогда разницы быть не должно.

А если он тянет стоп, да еще — каждый тик, да еще — на небольшом расстоянии, то шансов адекватно протестировать советника по ценам открытия — нет.

 
Andrey Khatimlianskii:

Трейлинг раз в бар проверяется? И закрывает ордера по рынку на первом тике бара? Тогда разницы быть не должно.

А если он тянет стоп, да еще — каждый тик, да еще — на небольшом расстоянии, то шансов адекватно протестировать советника по ценам открытия — нет.


Именно так: Трейлинг раз в бар проверяется, вообще все действия раз в бар

>И закрывает ордера по рынку на первом тике бара?

а вот тут не так, конечно он ставит стопы 

 
gedd:

а вот тут не так, конечно он ставит стопы 

Вот они по-разному и срабатывают.

Да вы бы уже 20 раз разобрались, если бы сравнили пару сделок в разных режимах. Зачем сидите ждете ответа?

 
Andrey Khatimlianskii:

Вот они по-разному и срабатывают.

Да вы бы уже 20 раз разобрались, если бы сравнили пару сделок в разных режимах. Зачем сидите ждете ответа?


ок, спасибо

просто шарики за ролики уже зашли ... :-)