iBars в индикаторе MT5

 

Код банальный MQL5

Print(iBars(_Symbol,PERIOD_D1));

Порядок действий:

Включаю терминал, запускаю ПЕРВЫЙ раз индикатор.

Внутри индикатора вызываю кусок кода, указанный выше, больше там ничего нет. Этот принт находится в OnInit. Запуск на ТФ ниже, чем D1, получаю 0.

В OnCalculate получаю сначала 0, на следующем тике нормальное значение.

В чем заключается такая особенность? Или это баг? в экспертах все сразу подтягивается.

Из-за такой штуки я не могу подготовить расчетные данные перед запуском.

 

При вызове iBars() начинается построение таймфрейма. Происходит это не мгновенно. С учетом этого и надо проектировать свои программы. 

Про выполнение всех предварительных расчетов в ините стоит вообще забыть.

Все эти предварительные расчеты делать в OnCalculate() или OnTick(). Объявить статическую или глобальную переменную. Если она false,

делать попытки, пока не будет успешного завершение, после этого установить переменной true, чтобы больше не повторять попытки.

Если в индикаторе, то выполнять подготовительные расчет при prev_calculated=0 и возвращать 0 при неудаче, чтобы на следуем тике был повтор. 
 
Dmitry Fedoseev #:

При вызове iBars() начинается построение таймфрейма. Происходит это не мгновенно. С учетом этого и надо проектировать свои программы. 

Про выполнение всех предварительных расчетов в ините стоит вообще забыть.

Все эти предварительные расчеты делать в OnCalculate() или OnTick(). Объявить статическую или глобальную переменную. Если она false,

делать попытки, пока не будет успешного завершение, после этого установить переменной true, чтобы больше не повторять попытки.

Если в индикаторе, то выполнять подготовительные расчет при prev_calculated=0 и возвращать 0 при неудаче, чтобы на следуем тике был повтор. 

Спасибо. Но вопрос: почему в советниках это происходит мгновенно? т.е. окружение уже известно

 
Nikita Chernyshov #:

Спасибо. Но вопрос: почему в советниках это происходит мгновенно? т.е. окружение уже известно

Как-то были разговоры, что терминал ждет подготовки всего окружения, нужного для работы эксперта, а потом вызывается инит. 

В МТ4 это относилось только к свойствам символа графика.

В МТ5 по работе тестера наглядно видно, что тестер сначала подгружает все требуемые данные, а потом запускается тестирование.

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

подгружаются все данные, а потом вызывается инит. Круто! Но не знаю, стоит ли этому доверять. В индикаторах этого точно нет.