Проблема с получением корректных исторических данных

 

Добрый день.

Столкнулся со следующей проблемой:
В индикаторе нужно взять для дальнейших рассчетов High/Low указанного инструмент с указанного TF.

Во вложении пример индикатора.

Если инструмент не имеет свежих исторических данных то при первом  вызове функции iHighest(symbol,PERIOD_D1,MODE_HIGH,Number_ofdays_PHL,1) выдает ошибку

4066

ERR_HISTORY_WILL_UPDATED

Запрошенные исторические данные в состоянии обновления

потом уже только 0

Как можна задержать выполнение индикатора, до окончания обновления данных. Цикл, который пробую использовать не работает , функция Sleep тоже не работает в индикаторах.

Начинает работать только когда добавить дополнительную временную переменную, как в индикаторе 01

Какие могут быть еще решения проблемы?

Спаибо.

Файлы:
 
Piotr Storozenko:

Какие могут быть еще решения проблемы?

Спаибо.

Нужно делать так:

bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
   iTime(NULL, eTF, 1);
   return GetLastError() == ERR_NO_ERROR;
}

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 (!IsTFDataReady(<нужный ТФ>))
      return 0;   

   ....
}

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

 
Ihor Herasko:

Нужно делать так:

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

Спаибо!