English

Question with for(i=0; i&lt;=limit; i++)

 82 scfx 2014.06.03 16:07   Good morning,I write a simple EA below to run my indicator```  if (lastCandle != Time[0])   {    if(iCustom(NULL,0,"MY_INDICATOR",0,1)==2)       {  buy=Close[1];          sl=Close[1]-0.01;          tp2=Close[1]+0.01;          tp1=Close[1]+0.01;       }       else buy=0;``` I find that this trading will run correctly if in my indicator there is an EQUAL sign on limit condition```int limit=rates_total-prev_calculated; if(limit<0) limit=2;````......``for(int i=0;i<=limit;i++)` Without that EQUAL sign, it still trade but the entry is wrong in many occasion. Can you tell me why it is like that?Many thanks,SCFX
 1815 SDC 2014.06.03 17:09 #   It is really not possible to say without seeing the rest of the indicator code.
 82 scfx 2014.06.03 18:25 #   The indicator (MY_INDICATOR) that feed to the trading EA is ```   int limit=rates_total-prev_calculated;    if(limit<0) limit=2;    if(prev_calculated>0)    limit++;        //----------------------------------------------------------------------------------------- //BUY SECTION for(int i=1;i0.01) feedbuffer[i]=2;} ``` And the original H_roc indicator is:```int limit=rates_total-prev_calculated;    if(limit<0) limit=2;    if(prev_calculated>0)    limit++; for(int i=1;i<=limit   && (i+shortwindow)
13116
WHRoeder 2014.06.03 18:30 #

scfx: I find that this trading will run correctly if in my indicator there is an EQUAL sign on limit condition
```int limit=rates_total-prev_calculated;
if(limit<0) limit=2;```
1.  I'd recommend ignoring those (and open[],close[],etc.) and just set buffers as series and count down (using Open[], Close[], etc) using the simpler: ```int ic = IndicatorCounted(); if(ic < LOOKBACK) ic = LOOKBACK; for(iBar = Bars - 1 - ic; iBar >= 0; iBar--){ ...```

2. When you count up useing rates_total and prev_calculated ... return(rates_total) there are two possibilities. If prev_calculated==0 you must loop [0..rates_total-1] (pos<rates_total or all bars) but if prev_calculated != 0 you loop from [prev_calculated-1 .. rates_total - 1] (recalculating the previously forming bar next time.) You have to check in calculating limit. You can NOT use rates_total - prev_calculated. That is your "EQUAL sign on limit condition" problem.
3. If you return(rates_total-1) than you can just use [prev_calculated .. rates_total -1] for both cases.

 82 scfx 2014.06.04 03:21 #   Thank you, WHRoeder.I will study your note.SCFX
1815
SDC 2014.06.07 21:13 #

WHRoeder:
1.  I'd recommend ignoring those (and open[],close[],etc.) and just set buffers as series and count down (using Open[], Close[], etc) using the simpler:

2. When you count up useing rates_total and prev_calculated ... return(rates_total) there are two possibilities. If prev_calculated==0 you must loop [0..rates_total-1] (pos<rates_total or all bars) but if prev_calculated != 0 you loop from [prev_calculated-1 .. rates_total - 1] (recalculating the previously forming bar next time.) You have to check in calculating limit. You can NOT use rates_total - prev_calculated. That is your "EQUAL sign on limit condition" problem.
3. If you return(rates_total-1) than you can just use [prev_calculated .. rates_total -1] for both cases.
3) I dont think the return value of OnCalculate does anything. You can return(0) and it still functions the same as return(rates_total).
13116
WHRoeder 2014.06.08 03:59 #

 SDC: 3) I dont think the return value of OnCalculate does anything. You can return(0) and it still functions the same as return(rates_total). Then it needs to be reported as broken. as OnCalculate says:During the function call, the prev_calculated parameter contains a value returned by OnCalculate() during previous call.