OnInit в индикаторе и в советнике?

 

Не могу понять, может, кто подскажет?

OnInit в индикаторе выполняется мгновенно. Тот же код в OnInit эксперта выполняется секунд 40.

В обоих случаях используется одна и та-же библиотека классов, написанных мной.

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

clsIndR0_MultyChart _indR0_MC;
clsIndR1_MultyChart _indR1_MC;
clsIndR2_MultyChart _indR2_MC;
clsIndR3_MultyChart _indR3_MC;


bool _blnUseTimer=false;
//-------------------------------------------------------------------------------------------------
int OnInit() {
    ArrayInitialize(_adblR0,0.0);
    ArrayInitialize(_adblR1,0.0);
    ArrayInitialize(_adblR2,0.0);
    ArrayInitialize(_adblR3,0.0);

    _structIndicParam_MC.strSymbol=_Symbol;
    _structIndicParam_MC.enumTF_thisTF=_Period;
    _structIndicParam_MC.intAmountBarsForCalc=_intAmountBarsForCalc;
    _structIndicParam_MC.intBarFromCalc=0;
    _structIndicParam_MC.intWidthInBars=200;
    _structIndicParam_MC.intSpaceInBars=1;
   
Print("Start OnInit");   
    _indR0_MC.Initialize(_structIndicParam_MC);
    _indR1_MC.Initialize(_structIndicParam_MC);
    _indR2_MC.Initialize(_structIndicParam_MC);
    _indR3_MC.Initialize(_structIndicParam_MC);

Print("End OnInit");  // появляется секунд через 40 после "Start OnInit"

    if(_blnUseTimer) {EventSetTimer(1);}
    return(0);

}


Такой же код в индикаторе, но там "End OnInit" появляется мгновенно после "Start OnInit"

Не могу понять, в чем дело. Может, кто сталкивался с подобным?

Если не сложно, попробуйте, пожалуйста, повызывать свои классы из индикаторов и советников и сравнить время.

 
falkov:

Не могу понять, может, кто подскажет?

OnInit в индикаторе выполняется мгновенно. Тот же код в OnInit эксперта выполняется секунд 40.

В обоих случаях используется одна и та-же библиотека классов, написанных мной.

Такой же код в индикаторе, но там "End OnInit" появляется мгновенно после "Start OnInit"

Не могу понять, в чем дело. Может, кто сталкивался с подобным?

Если не сложно, попробуйте, пожалуйста, повызывать свои классы из индикаторов и советников и сравнить время.


Судя по всему, Вам необходимо обратить внимание на примечания к функциям из раздела Доступ к таймсериям и индикаторам:

При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.

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


 

Спасибо, Рош!

Буду смотреть указанное Вами.

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


 

Уважаемый Rosh, спасибо еще раз!

Как это часто бывает (но не всегда :), это был мой косяк.


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