Не могу в индикаторе получить данные индикатора со старшего ТФ

 
Добрый день, друзья.
Есть кастомный индикатор, 2 буфера, нормально работает.
На его основе хочу создать индикатор, чтобы отражал данные этого индюка со старшего ТФ.
Столкнулся с проблемой. На младшем тайме не могу получить эти данные.
Вот вырезки из кода
// Модуль инициализации
   ...
   Handle_W1=iCustom(_Symbol,PERIOD_W1,"Indikator",...);
   ...
// Модуль исполнения
   ...
       int calculated=BarsCalculated(Handle_W1);
   ...
       double longPointMN[1];
       double shortPointMN[1];

       datetime timePoint[1];
       CopyTime(_Symbol,0,i,1,timePoint);
       Print("------------------");
       Print(timePoint[0]);
       int bar_index=iBarShift(_Symbol,PERIOD_W1,timePoint[0]);
       Print(bar_index,"  ",calculated);
       CopyBuffer(Handle_W1,0,bar_index,1,longPointMN);
       CopyBuffer(Handle_W1,1,bar_index,1,shortPointMN);
       Print(longPointMN[0],"  ",shortPointMN[0]);
   ...
   ...

Вот что выдает терминал на образовании нового бара

        ------------------
        2019.01.20 00:00:00
        0  -1
        0.0  0.0
т.е. он не может взять ни одного значения из индикатора... calculated = -1
Как выйти из этой ситуации?
 
Как можно взять то что не существует?)
 
Gennady Mazur:
Добрый день, друзья.
Есть кастомный индикатор, 2 буфера, нормально работает.
На его основе хочу создать индикатор, чтобы отражал данные этого индюка со старшего ТФ.
Столкнулся с проблемой. На младшем тайме не могу получить эти данные.
Вот вырезки из кода
Вот что выдает терминал на образовании нового бара

т.е. он не может взять ни одного значения из индикатора... calculated = -1
Как выйти из этой ситуации?

Сначала убедитесь что хендл индикатора получен.

 
Vitaliy Kashcheev:
Как можно взять то что не существует?)

В модуле инициализации хендл индикатора определяется без ошибок.
Что значит не существует? 
Если стоит на текущем ТФ то существует, а на меньшем нет, так что ли? 
извините но это абсурд.

 
Alexey Viktorov:

Сначала убедитесь что хендл индикатора получен.

Алексей, я проверяю хендл...

int OnInit()
  {
//--- indicator buffers mapping
 ...
 ...
// Здесь индикатор просто написал без параметров, чтобы не заморачиваться
 Handle_D1=iCustom(_Symbol,PERIOD_D1,"Indikator",...);

 if(Handle_D1==INVALID_HANDLE)
     {
      Print(" Не удалось получить хендл индикатора");
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }

так вот, ошибок нет ни нам одном ТФ, значит индикатор определяется.

 
Gennady Mazur:

Алексей, я проверяю хендл...

так вот, ошибок нет ни нам одном ТФ, значит индикатор определяется.

Дебагером пользоваться умеете?

 
Alexey Viktorov:

Дебагером пользоваться умеете?

По старинке ошибки выявляю с помощью Принтов...

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

 if(calculated<bar_TF)
     {
       Print("Not all data is calculated (",calculated,"bars ). Error",GetLastError());
       return(-1);
     }
 
Alexey Viktorov:

Дебагером пользоваться умеете?

Ошибка возникает вот тут

int bar_TF=iBars(_Symbol,PERIOD_D1);
int calculated=BarsCalculated(Handle_D1);
if(calculated<bar_TF)
     {
       Print("Not all data is calculated (",calculated,"bars ). Error",GetLastError());
       return(-1);
     }
 
Gennady Mazur:

Ошибка возникает вот тут

В OnInit() запросите время с D1.

В OnCalculate() запросите время с D1 и, если оно равно 0, то return 0; И только после строки проверки времени запрашивайте данные с вашего кастомного индикатора.

В секундном таймере не менее раза в две минуты запрашивайте время с D1

 
Artyom Trishkin:

В OnInit() запросите время с D1.

В OnCalculate() запросите время с D1 и, если оно равно 0, то return 0; И только после строки проверки времени запрашивайте данные с вашего кастомного индикатора.

В секундном таймере не менее раза в две минуты запрашивайте время с D1

Хорошо, попробую.

 
Gennady Mazur:

По старинке ошибки выявляю с помощью Принтов...

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

Попробуйте, вам понравится. Дебагер позволяет увидеть значения всех доступных переменных, а не только тех которые вывели принтом.
Причина обращения: