Различия в тестере стратегий

 

Добрый день.

Писал о ситуации в соответствующую тему (Ошибки, баги, вопросы), но там интерес направлен был на другие проблемы у форумчан.

Надеюсь здесь увидеть полезный ответ от разработчиков и коллег по алготрейдингу.

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

Итог с визуализацией


Итог без визуализации

Настройки и ТФ идентичные, разумеется. Кроме того, проблема встречается не на всех роботах, а только на тех, которые используют в качестве фильтра входа индикатор фракталов.

Более глубокий анализ показал, что проблема кроется в работе тестера с фракталами. Когда запускаешь с визуализацией, МТ корректно определяет фракталы. Без визуализации определение фракталов работает  неправильно.

Что удалось понять. Ниже функция определения последнего фрактала

double _getFractalPrice(int FHandle,int indBuffer,ENUM_TIMEFRAMES TF)
  {
   double FPrice=0;
   double copyBuffer[];
   int barCount=Bars(_Symbol,TF);
   CopyBuffer(FHandle,indBuffer,0,barCount,copyBuffer);
   ArraySetAsSeries(copyBuffer,true);
   for(int n=0; n<barCount; n++)
     {
      if(copyBuffer[n]!=EMPTY_VALUE && copyBuffer[n]>0.000001)
        {
         FPrice=copyBuffer[n]; //запишем ценовое значение  фрактала 
         break;
        }
     }
   return FPrice;
  }

Данная функция вызывается не на каждом баре, а только при определенных условиях. Так вот, в тестере стратегий без визуализации корректно фрактал определяется только в том случае, если функция была запущена на свече формирования фрактала. Проще говоря,  если у нас для формирования фрактала требуется 3 свечи после и функцию запустить на 4ой свече, то свежий фрактал определится корректно. Если же функцию запустить на 5ой, 6ой и т.д., но не запускать на 4ой, то функция вернет не новый фрактал, а фрактал, который удалось определить при прошлых запусках. 

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

Собственно, такая ситуация оказывает негативное влияние на тестирование за большой период, когда визуализация не нужна. Так как искажаются важные показатели.

В общем, что думаете? Это баг?

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

Ниже наглядно для понимания проблемы. Использован фрактал 3-3


 
ап
 

То есть Вы не в курсе, что в визуализаторе все индикаторы считаются на каждом тике, а в простом тестировании - не все?

Почитайте про #property tester_everytick_calculate здесь https://www.mql5.com/ru/docs/basis/preprosessor/compilation

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Путь к файлу с картинкой, которая будет показываться для программы EX5. Правила указания пути такие же, как и для ресурсов. Свойство должно указываться в главном модуле с исходным кодом MQL5. Файл иконки должен быть в формате ICO. Краткое текстовое описание mql5-программы. Может присутствовать несколько description, каждый из которых...
 

Мде, заходил по ссылке ранее, но до этого свойства не дочитал.

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

Причина обращения: