Ошибка в визуализации при работе индикаторов с иным таймфреймом

 
Тестировал с визуализацией советника на H1. Поставил на график индикатор, который обращается к периоду D1. Оказалось, что из массива iHigh(NULL, PERIOD_D1, 0) поступает не иммитируемая история, а текущая реальная.

Пример индикатора (на IE7 непонятно, как вставить код корректно)

#property indicator_chart_window
int start()
{
Comment ("D1 high=", iHigh(NULL, PERIOD_D1,0)," low=", iLow(NULL, PERIOD_D1, 0)," close=",iClose(NULL, PERIOD_D1,0)," ATR=", iATR(NULL, PERIOD_D1, 10, 0));
return(0);
}


Вообще давно заметил, что если советник при тестировании обращается к другому периоду, то возникают проблемы со стабильностью результатов его тестирования на разных машинах.

Когда дадите доступ к историческим данным, то, пожалуйста, добавьте скрипт, который бы проверял целостность этих данных. Желательно, чтобы охватывались все периоды. Такой скрипт даст уверенность в качестве истории при смене машины или переинсталяции программы.
 
Почему бы разработчикам не пойти по другому пути - чтонить типа вирутального сервера в виде отдельной программы с возможностью изменения скорости подачи котировок. Все проблемы решаются - и портфельные и визуализация и ручная тренировка. 
 
ArtemRG:
Тестировал с визуализацией советника на H1. Поставил на график индикатор, который обращается к периоду D1. Оказалось, что из массива iHigh(NULL, PERIOD_D1, 0) поступает не иммитируемая история, а текущая реальная.

Пример индикатора (на IE7 непонятно, как вставить код корректно)

#property indicator_chart_window
int start()
{
Comment ("D1 high=", iHigh(NULL, PERIOD_D1,0)," low=", iLow(NULL, PERIOD_D1, 0)," close=",iClose(NULL, PERIOD_D1,0)," ATR=", iATR(NULL, PERIOD_D1, 10, 0));
return(0);
}


Вообще давно заметил, что если советник при тестировании обращается к другому периоду, то возникают проблемы со стабильностью результатов его тестирования на разных машинах.

Когда дадите доступ к историческим данным, то, пожалуйста, добавьте скрипт, который бы проверял целостность этих данных. Желательно, чтобы охватывались все периоды. Такой скрипт даст уверенность в качестве истории при смене машины или переинсталяции программы.
Дело в том, что в индикаторах при Визуальном Тестировании не работает функция эмуляции текущего времени.
Т.е. если индикатор использует текущее время например, как у вас iHigh(NULL, PERIOD_D1,0) данные будут вычисляться с 0-ого барра т.е. с сегодняшнего, а нужно вычислить номер бара на момент тестирования.
я это делаю так:
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   datetime _curtime=CurTime();
   //---
   datetime _cur_time=iTime(NULL,0,0); // Сами моделируем CurTime()
   //---
   int      _nbar_day=iBarShift(NULL,PERIOD_D1,_cur_time); // Вычислим номер бара большего ТФ
   datetime _time_day=iTime(NULL,PERIOD_D1,_nbar_day); // Найдем абсолютное время открытия дня
   int      _nbar_cur_period=iBarShift(NULL,0,_time_day); // Вычислим номер бара текущего ТФ
   datetime _time_nbar_cur_period=iTime(NULL,0,_nbar_cur_period); //Проверка времени открытия бара
   //---
    Comment(
           "_cur_time= ",TimeToStr(_cur_time,TIME_DATE|TIME_SECONDS),"\n", 
           "_time_day= ",TimeToStr(_time_day,TIME_DATE|TIME_SECONDS),"\n",
           "_time_nbar_cur_period= ",TimeToStr(_time_nbar_cur_period,TIME_DATE|TIME_SECONDS),"\n",
           "_curtime= ",TimeToStr(_curtime,TIME_DATE|TIME_SECONDS),"\n",
           "_nbar_day= ",_nbar_day,"\n",
           "__nbar_cur_period= ",_nbar_cur_period );
   //---
   // Всё получилось, что хотел!!!
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
ArtemRG:
Тестировал с визуализацией советника на H1. Поставил на график индикатор, который обращается к периоду D1. Оказалось, что из массива iHigh(NULL, PERIOD_D1, 0) поступает не иммитируемая история, а текущая реальная.

Вообще давно заметил, что если советник при тестировании обращается к другому периоду, то возникают проблемы со стабильностью результатов его тестирования на разных машинах.


В советниках и скриптах - время при визуально тестировании правильно эмулируется. Я не замечал ошибок.
 
Integer писал (а):
Почему бы разработчикам не пойти по другому пути - чтонить типа вирутального сервера в виде отдельной программы с возможностью изменения скорости подачи котировок. Все проблемы решаются - и портфельные и визуализация и ручная тренировка.

Идея отличная, осталось дождаться её реализации :)
Причина обращения: