2.5 C
New York
Saturday, February 22, 2025

Indicator calculation loops and the beginning index – Different – 8 February 2025


When an indicator first hundreds, prev_calculated is 0 on the firs execution. On subsequent calls, prev_calculated holds the variety of bars that have been processed within the earlier execution.

So when the indicator has has calculated multiple bar, prev_calculated – 1 could be accepted because the final processed bar and is an environment friendly place to begin for future calculations if solely the present bar within the indicator is important to be up to date on every recalculation.

If the indicator should replace X bars at a time like within the Fractals indicator (instance 5 bars), then the beginning index needs to be prev_calculated – 5.

 

When prev_calculated == 0 (first execution), the indicator must calculate the preliminary information.

In some customized indicators, you want sufficient historic information factors to appropriately calculate the buffers, this is able to be for instance pivot indicators the place the result’s obtained based mostly on a interval of bars. This additionally applies to indicators that don’t use CopyBuffer.

In thiskind of indicator, you might have a begin index like this:

it begin = (prev_calculated == 0) ?  period_var : prev_calculated – 1;

or else

int begin = (prev_calculated 1;

 

When you needed to create bar confirmations, then you definately would alter the beginning index to help this:

int begin = (prev_calculated == 0) ? period_var : prev_calculated - (bar_confirmations + 1);

( + 1 needs to be added to bar_confirmations to account for the truth that “bar_confirmations” could be 0 and prev_calculated – 1 is the final calculated bar)

 

 

Prev_calculated can theoretically be -1 (although often 0) or larger than rates_total.

In some indicators iMA equal bars are copied with copybuffer and there’s no strict minimal variety of bars required. If prev_calculated

When copying bars in an indicator with copybuffer, it’s finest to not copy all charges/bars as a result of it could actually decelerate the indicator, which is able to then additionally decelerate an EA if the indicator is instantiated within the EA with iCustom.

To correctly and safely copy bars, that you must be sure that prev_calculated will not be lower than 0 and never larger than rates_total. Whether it is, copy all bars quickly, in any other case solely copy new unprocessed bars. Then it doesn’t must recalculate every part on every execution.

if(prev_calculated > rates_total || prev_calculated 0){

      to_copy = rates_total;
}
else
{
      to_copy = rates_total - prev_calculated;

      if(prev_calculated > 0) to_copy++;
}

or

if(prev_calculated > rates_total || prev_calculated 0)
{
      to_copy = rates_total;
}
else
{
      to_copy = rates_total - prev_calculated + 1;
}

 

 Lastly name the CopyBuffer operate to repeat the info into your plot buffer:

 if(CopyBuffer(deal with, 0, 0, to_copy, buffer) 0){

     Print(“Errror encountered copying bars, please stand by.”);

      ChartRedraw();
   }

  

     

 

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles