Нашел БАГ или не БАГ, но помощь нужна!!!

 

Привет! 

Простой код индикатора, который выводит кол-во баров. 

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
      if (prev_calculated==0) Print("rates_total = ",rates_total); 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

При запуске терминала с прикрепленным на график нашим индикатором, выдает разные значения и 2 раза 

может выдать 3 раза))


настройки терминала


Это глюк или ?

 

Справка: Функции обработки событий.

В разделе о OnCalculate() есть описание:

...

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

...


То есть Вы видели или подкачку или изменение истории. Это абсолютно нормально.

 
Vladimir Karputov:

Справка: Функции обработки событий.

В разделе о OnCalculate() есть описание:


То есть Вы видели или подкачку или изменение истории. Это абсолютно нормально.


Спасибо, и извините за глупый вопрос)

 
Tango_X:

Спасибо, и извините за глупый вопрос)


Измените свой код на такой:

//---
   Print("rates_total: ",IntegerToString(rates_total),", prev_calculated: ",IntegerToString(prev_calculated));
//--- return value of prev_calculated for next call
   return(rates_total);

и увидите ещё больше интересного.

Причём этот код полезно запустить:

  • когда рынок открыт
  • когда выходные и нет тиков
  • когда выходные и нет тиков и после правого клика на графике и выбора команды "Обновить"

 
Vladimir Karputov:

Измените свой код на такой:

и увидите ещё больше интересного.

Причём этот код полезно запустить:

  • когда рынок открыт
  • когда выходные и нет тиков
  • когда выходные и нет тиков и после правого клика на графике и выбора команды "Обновить"


Спасибо, я принцип понимаю, просто я не подумал что это подкачка(изменение) истории.

 
Vladimir Karputov:

Измените свой код на такой:

и увидите ещё больше интересного.

Причём этот код полезно запустить:

  • когда рынок открыт
  • когда выходные и нет тиков
  • когда выходные и нет тиков и после правого клика на графике и выбора команды "Обновить"


сразу по ходу хочу задать вопрос не по теме, если можно - почему Вы используете конструкцию  IntegerToString(rates_total), а не  просто string(rates_total) - всегда хотел знать в чем разница)

 
Tango_X:

сразу по ходу хочу задать вопрос не по теме, если можно - почему Вы используете конструкцию  IntegerToString(rates_total), а не  просто string(rates_total) - всегда хотел знать в чем разница)


Я так привык, когда дело касается вывода информации (например при печати или получение string)

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