Ed, Thank you...The code below is doing what is supposed to happen...still curious what is wrong with the formula I posted...any ideas ?
Anthony ----- Original Message ----- From: Edward Pottasch To: [email protected] Sent: Saturday, January 23, 2010 8:19 AM Subject: Re: [amibroker] Help with formula have a look at code below Anthony. I guess it could be programmed using arrays only, not sure, regards, Ed function cccc(Buy,Sell) { CumCst = Null; for (i = 1; i < BarCount; i++) { if(Buy[i]) { CumCst[i]=0.10; for (j = i + 1; j < BarCount; j++) { if (Sell[ j ] ) { i = j - 1; break; } else if(C[j] > C[j-1]) { CumCst[j] = Min(CumCst[j-1] + 0.003,0.13); } else if(C[j] <= C[j-1]) { CumCst[j] = CumCst[j-1]; } else if (j == BarCount - 1) { i = BarCount; break; } } } else if(Sell[i]) { CumCst[i]=0.10; for (j = i + 1; j < BarCount; j++) { if (Sell[ j ] ) { i = j - 1; break; } else if(C[j] < C[j-1]) { CumCst[j] = Min(CumCst[j-1] + 0.003,0.13); } else if(C[j] >= C[j-1]) { CumCst[j] = CumCst[j-1]; } else if (j == BarCount - 1) { i = BarCount; break; } } } } return CumCst; } Buy=Cross(C,EMA(C,19)); Sell=Cross(EMA(C,19),C) ; CumCst = cccc(Buy,Sell); per=19; Smth = 2/(per+1)+CumCst; MovAvg = AMA(C,Smth); Plot(movavg,"",colorBlue,1); Plot(C,"",1,64); PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-20); PlotShapes(Sell* shapeDownArrow,colorRed,0,H,-20); Title="cumulative value = "+WriteVal(Cumcst,1.3); ----- Original Message ----- From: Anthony Faragasso To: [email protected] Sent: Saturday, January 23, 2010 1:47 PM Subject: Re: [amibroker] Help with formula Keith, Have you tried the formula ? I made the adjustments as you stated still does not work...although I had them the way you suggested earlier...I have been trying but something is not working properly. Description: When there is a new buy or sell signal the cumCst will reset to 0.10 and increment by 0.003 until it gets to a maximum of 0.13, this is not happening with the formula below....I can not see the error, can anyone ? Here is the complete formula Buy=Cross(C,EMA(C,19)); Sell=Cross(EMA(C,19),C) ; CumCst=0.00; poslong=0; posshort=0; for (i=1; i < BarCount; i++) { if(Buy[i]) { poslong=1; posshort=0; CumCst[i]=0.10; } if(Sell[i]) { poslong=0; posshort=1; CumCst[i]=0.10; } if(posshort) { if(C[i] < C[i-1]) CumCst[i] = CumCst[i-1] + 0.003; else CumCst[i] = CumCst[i-1]; } if(poslong) { if(C[i] > C[i-1]) CumCst[i] = CumCst[i-1] + 0.003; else CumCst[i] = CumCst[i-1]; } if(CumCst[i] > 0.13) CumCst[i] = 0.13; } per=19; Smth=2/(per+1)+CumCst; MovAvg=AMA(C,Smth); Plot(movavg,"",colorBlue,1); Plot(C,"",1,64); PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-20); PlotShapes(Sell* shapeDownArrow,colorRed,0,H,-20); Title="cumulative value = "+WriteVal(Cumcst,1.3); ----- Original Message ----- From: Keith McCombs To: [email protected] Sent: Saturday, January 23, 2010 1:37 AM Subject: Re: [amibroker] Help with formula Anthony -- I have added comments to your code below: // Anthony.afl Buy=Cross(C,EMA(C,19)); Sell=Cross(EMA(C,19),C) ; CumCst=0.00; poslong=0; posshort=0; for (i=1; i < BarCount; i++) { if(Buy[i]) { poslong==1; // == doesn't set poslong to 1, it stays 0 posshort==0; // use = to set value CumCst[i]=0.10; } if(Sell[i]) { poslong==0; posshort==1; // == doesn't set posshort to 1, it stays 0 CumCst[i]=0.10; // use = to set value } if(posshort) // posshort is 0 and code below is never executed { if(C[i] < C[i-1]) CumCst[i] = CumCst[i-1] + 0.003; else CumCst[i] = CumCst[i-1]; } if(poslong) // poslong is 0 and code below is never executed { if(C[i] > C[i-1]) CumCst[i] = CumCst[i-1] + 0.003; else CumCst[i] = CumCst[i-1]; } Keith, Thanks...but that does not seem to be the problem..when there is a signal buy or sell...cumCST starts at 0.10 and increments by 0.003 as per the formula...that is not happening....it must be something else Anthony ----- Original Message ----- From: Keith McCombs To: [email protected] Sent: Friday, January 22, 2010 10:35 PM Subject: Re: [amibroker] Help with formula In four places you used == where you should have used only =. Anthony Faragasso wrote: Hello, Could someone look at this please...I can not see the error... The cumCST should increment up to .13 but it is not happening.. Thank you Anthony Buy=Cross(C,EMA(C,19)); Sell=Cross(EMA(C,19),C) ; CumCst=0.00; poslong=0; posshort=0; for (i=1; i < BarCount; i++) { if(Buy[i]) { poslong==1; posshort==0; CumCst[i]=0.10; } if(Sell[i]) { poslong==0; posshort==1; CumCst[i]=0.10; } if(posshort) { if(C[i] < C[i-1]) CumCst[i] = CumCst[i-1] + 0.003; else CumCst[i] = CumCst[i-1]; } if(poslong) { if(C[i] > C[i-1]) CumCst[i] = CumCst[i-1] + 0.003; else CumCst[i] = CumCst[i-1]; } if(CumCst[i] >= 0.13) CumCst[i] = 0.13; } per=19; Smth=2/(per+1)+CumCst; MovAvg=AMA(C,Smth); Plot(movavg,"",colorBlue,1); Plot(C,"",1,64); PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-20); PlotShapes(Sell* shapeDownArrow,colorRed,0,H,-20); Title="cumulative value = "+WriteVal(Cumcst,1.3);
