Разное отображение графика баланса в тестере МТ5

 

Добрый день.

Делаю одиночный прогон советника в тестере МТ5 со включенной галкой "визуальный режим с отображением графиков, индикаторов и торговли", а потом тот же прогон с выключенной галкой (без визуализации). При этом в первом случае график баланса рисуется вполне обычно, во втором случае - просто прямая линия на несколько клеток, и все (см. картинки ниже).

Ошибок в логах никаких, все штатно.

Кто-нибудь сталкивался с таким? С чем это может быть связано?

Нормальный график

Пустой график

 

Вы не привели абсолютно никаких данных:

  1. Код советника
  2. Тип операционной системы и билд терминала
  3. Символ и таймфрейм


Я взял и проверил на оборудовании

MetaTrader 5 x64 build 2669 started for MetaQuotes Software Corp.
Windows 10 build 19042, Intel Core i7-9750H  @ 2.60GHz, 24 / 31 Gb memory, 1670 / 1861 Gb disk, IE 11, UAC, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

стандартный советник '[dats folder]\MQL5\Experts\Advisors\ExpertMACD.mq5'


Настройки и параметры тестера:


И в визуальном режиме и в режиме без визуализации график одинаковый:



 
Vladimir Karputov:

Вы не привели абсолютно никаких данных:

  1. Код советника
  2. Тип операционной системы и билд терминала
  3. Символ и таймфрейм

Alpari MT5 x64 build 2650 started for Alpari International
Windows 7 Service Pack 1 build 7601, Intel Core i5-2430M  @ 2.40GHz, 2 / 7 Gb memory, 24 / 114 Gb disk, IE 11, UAC, GMT+3
Terminal    D:\fx\Alpari MT5

Символы и таймфреймы, которые пробовал - XAUUSD, EURUSD (M5, M15)

Остальные настройки ниже

Файл с советником приложил.

Файлы:
MATest.mq5  35 kb
 
satorifx:

Alpari MT5 x64 build 2650 started for Alpari International
Windows 7 Service Pack 1 build 7601, Intel Core i5-2430M  @ 2.40GHz, 2 / 7 Gb memory, 24 / 114 Gb disk, IE 11, UAC, GMT+3
Terminal    D:\fx\Alpari MT5

Символы и таймфреймы, которые пробовал - XAUUSD, EURUSD (M5, M15)

Остальные настройки ниже

Файл с советником приложил.

Тест проведите в режиме как минимум "Все тики".


Добавлено: Ваш файл не компилируется.

Проведите тест со стандартным советником - все данные возьмите из  

 
Vladimir Karputov:

Тест проведите в режиме как минимум "Все тики".

Добавлено: Ваш файл не компилируется.

Проведите тест со стандартным советником - все данные возьмите из  

1. Разумеется проводил тесты в разных режимах, и в режиме "Все тики" тоже - реакция одинаковая.

2. То, что файл не компилируется - как минимум странно: инклюды стандартные, ничего левого и самописного. У меня компилируется без вопросов.

А какие ошибки при компиляции?

3. Дело в том, что и стандарные советники я проовал - там все нормально. Хотелось бы понять, что в моем коде не так, что вызывает такую реакцию....
 
satorifx:

1. Разумеется проводил тесты в разных режимах, и в режиме "Все тики" тоже - реакция одинаковая.

2. То, что файл не компилируется - как минимум странно: инклюды стандартные, ничего левого и самописного. У меня компилируется без вопросов.

А какие ошибки при компиляции?

3. Дело в том, что и стандарные советники я проовал - там все нормально. Хотелось бы понять, что в моем коде не так, что вызывает такую реакцию....

Начните искать ошибку в своем коде - я не могу помочь, так как Ваш код не компилируется. 

 
satorifx:

2. То, что файл не компилируется - как минимум странно: инклюды стандартные, ничего левого и самописного. У меня компилируется без вопросов.

can't open "C:\............MQL5\Include\controlerrors.mqh" include file


 

Нашел проблему в коде.

Дело в получаемом количестве баров на графике и количестве баров, на которых рассчитываются индикаторы в эксперте.

Буду решать...

 

В коде эксперта

в OnInit:

MA1_hndl =  iMA(NULL, 0, MA1Period, 0, MA1Method, PRICE_TYPICAL);
MA2_hndl =  iMA(NULL, 0, MA2Period, 0, MA2Method, PRICE_TYPICAL);

в OnTick:

   chartBars   =  Bars(_Symbol, period);
   if (chartBars == 0) {
      Print("Нет данных по кол-ву баров " + _Symbol + "(" + periodStr + ")");
      return;
   }
   Print(IntegerToString(chartBars));

   Print(IntegerToString(BarsCalculated(MA1_hndl)) + "/" + IntegerToString(BarsCalculated(MA2_hndl)));
   if (
         (chartBars <= (int)MathMax(MA1Period, MA2Period))  ||
         (BarsCalculated(MA1_hndl)     <  chartBars)        ||
         (BarsCalculated(MA2_hndl)     <  chartBars)
      ) {Print("Прервались, т.к. рассчитанных данных индикторов меньше, чем баров на графике..."); return;}

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

Если этот код запустить в реалтайм-режиме (эксперт на графике), то значение chartBars всегда равно BarsCalculated() по обоим хендлам, и все впорядке.

В то же время, в режиме тестера (по всем тикам или в режиме "Только цены открытия") история совсем другая:

Обратите внимание, что с самого начала теста  chartBars на 1 больше данных по индикаторам и на каждом вызове увеличивается (т.к. приходит новый бар), а кол-во данных по индикаторам никак не меняется. Откуда же тестер берет кол-во рассчитанных данных по индикаторам, и почему с приходом новых баров в тестере это значение не меняется?

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