Технический вопрос по обновлению баров

 

Эксперт, установленный на минутном графике выполняет расчеты с барами. Причем расчеты занимают достаточно большое время (больше периода графика).

//Эксперт проходит по барам и выполняет расчеты 
for (int i=Bars-1; i>0; i--)
{
  //Обработка i-го бара
}

Примерно на середине цикла появится новый бар и произойдет смещение порядкового номера бара.

То есть когда цикл перейдет на новую итерацию, то бар окажется тем же, что обработался на предыдущей итерации.

Вопрос таков: Как эксперт сможет опознать эту ситуацию? 

 
sergeev писал (а) >>

Вопрос таков: Как эксперт сможет опознать, что перейдя на обработку следующего бара он окажется уже обработанным?

Аналогичная ситуация возникает и при старте терминала, когда он начинает подкачивать историю start иногда не успевает доработать полностью.

Я решил проблему так: завел себе статическую переменную FullExecuteDone. В init проинитил ее значением false. В самом конце start ( перед закрывающей } ) написал FullExecuteDone=true;

Ну а внутри по коду анализирую if(FullExecuteDone).... /* хотябы раз полностью выполнилось */ else ... /* вычисления были прерваны */

Возможно есть более изящный способ, но этот мою проблему решил и я пока успокоился :)


 

Если с таким кодом - то перед началом цикла можно запомнить количество баров (BarsStart=Bars;) а внутри цикла проверять условие BarsStart==Bars и решать что с ними делать.

Или по другому: перед началом цикла можно запомнить время нулевого бара (BarsStartTime=Time[0];) а внутри цикла проверять условие BarsStartTime==Time[0] и решать что с ними делать.

 
ForexTools писал (а) >>

Или по другому: перед началом цикла можно запомнить время нулевого бара (BarsStartTime=Time[0];) а внутри цикла проверять условие BarsStartTime==Time[0] и решать что с ними делать.

А вот это уже дельное предложение спасибо.