Hi again.

I think you may be trying to treat as arrays some items whose typeof() is 
number.  

Below is a section of the code with a few extra printf() statements, showing 
that, for example, nbuy_ is a number, not an array.

Despite this, later notation such as:

nbuy_[i] = 1;

is silently accepted.

I think that to get the results you want may require very careful attention to 
types, and possibly a different idiom than you are using.

There may be little help in that generalization, but I've not personally 
written/tested AFL ala your example, so I don't have a ready-made "solution" 
available to offer.  (Others might.)

-----------

//filter the raw signals 
nBuy_ = nSell_ = nShort_ = nCover_ = 0; // make sure all arrays are set empty

printf( "\ntypeof(nBuy_): " + typeof(nBuy_) ) ;
printf( "\ntypeof(Buy_): " + typeof(Buy_) ) ;


printf( "\nAfter initialization: \n" ) ;
printf( "nBuy_= %g nSell_= %g\n", nBuy_, nSell_ );
printf( "nShort_ = %g nCover_= %g\n", nShort_, nCover_ );


inBuy = inShort = 0;
vinBuy = vinShort = 0;
eprice = 0; //
veprice = 0; //
branch = 0;

printf( "\ntypeof(inBuy): " + typeof(inBuy) ) ;
printf( "\ntypeof(branch): " + typeof(branch) ) ;



--- In amibroker@yahoogroups.com, "redberryys" <redberr...@...> wrote:
>
> Hi progster,
> Thank you for your response. I've tried it and it still does the same thing. 
> I should add that the printed variables are incorrect themselves [not only in 
> relation with the arrows].
> An example:
> 
> sys5_bug
> Date: 7/24/2008 10:57:00 PM
> 
> PBuy_= 0 PSell_= 1
> PShort_ = 0 PCover_= 0
> nBuy_= 0 nSell_= 0
> nShort_ = 0 nCover_= 0
> inBuy = 1 inShort = 0
> Branch= 3
> 
> Next bar:
> sys5_bug
> Date: 7/24/2008 10:58:00 PM
> 
> PBuy_= 0 PSell_= 1
> PShort_ = 1 PCover_= 0
> nBuy_= 0 nSell_= 0
> nShort_ = 1 nCover_= 0
> inBuy = 0 inShort = 1
> Branch= 10
> 
> at 10:57, Branch 3 does not modify inBuy, which was 1; how did it become 0 at 
> 10:58? 
> 
> Incidentally, at 10:58, nShort_ is 1, but the triangle shape is not shown.
> 
> Thank you,
> Alex
> 
> Here's the code exhibiting the bug, simplified further:
> 
> SetBarsRequired( -1, -1 ); 
> OptimizerSetEngine("cmae");
> 
> Med = (High+Low)/2; stopLine = EMA(Med,5);
> 
> ml = MACD(12, 26); sl = Signal(12,26,9); macd_h = ml-sl;
> 
> rstopline = Ref(stopLine, -1);
> rmacd_h=Ref(macd_h,-1);
> 
> Hoc = Max(O,C); Loc = Min(O,C); rC = Ref(C,-1); rH = Ref(H,-1); rL = 
> Ref(L,-1);
> stopin = rH>=rstopLine  && rstopLine >=rL;
> 
> Buy_=rmacd_h>0 && rC > rstopLine && !stopin && stopline > rstopline && 
> rmacd_h < macd_h ;
> Sell_= (L < rstopLine);
> Short_=rmacd_h<0 && rC < rstopLine && !stopin && stopline < rstopline && 
> rmacd_h > macd_h;
> Cover_=(H > rstopLine);
> 
> //just for debug
> pBuy = Buy_; pSell = Sell_; pShort = Short_; pCover = Cover_;
> 
> printf("PBuy_= %g PSell_= %g\n", PBuy, PSell);
> printf("PShort_ = %g PCover_= %g\n", PShort, PCover);
> 
> //filter the raw signals
> nBuy_ = nSell_ = nShort_ = nCover_ = 0; // make sure all arrays are set empty
> 
> tRange = 0.0010; //modify this for stocks
> inBuy = inShort = 0;
> vinBuy = vinShort = 0;
> eprice = 0; //
> veprice = 0; //
> branch = 0;
> for( i = 0; i < BarCount; i++ ) 
> { //these are just for tracing
> //  veprice[i] = eprice; VInBuy[i] = inBuy; VInShort[i] = inShort;
>   branch[i] = 0;
>   if (inBuy == 1){
>     branch[i] = 1;
>     nbuy_[i] = 0; nshort_[i] = 0; ncover_[i] = 0;
>     if (sell_[i]){
>       branch[i] = 2;
>         if (C[i] > (eprice - tRange) && C[i] < (eprice + tRange)) {
>        branch[i] = 3;
>        nsell_[i] = 0;
>         } else {
>        branch[i] = 4;
>        nsell_[i] = 1;
>        inBuy = 0;
>      }
>       }
>   } else { //inBuy == 0
>   if (inShort == 1){
>   branch[i] = 5;
>     nbuy_[i] = 0; nsell_[i] = 0; nshort_[i] = 0;
>     if (cover_[i]){
>         if (C[i] > (eprice - tRange) && C[i] < (eprice + tRange)) {
>        branch[i] = 6;
>        ncover_[i] = 0;
>         } else {
>        branch[i] = 7;
>        ncover_[i] = 1;
>        inShort = 0;
>      }
>       }
>   } else {
>   branch[i] = 8;
>     if (buy_[i] == 1) {
>   branch[i] = 9;
>       nbuy_[i] = 1;
>         eprice = C[i];
>         inBuy = 1;
>         ncover_[i] = 0; nshort_[i] = 0; nSell_[i] = 0;
>       } else if (short_[i] == 1){
>   branch[i] = 10;
>      nshort_[i] = 1;
>         eprice = C[i];
>         inShort = 1; 
>       ncover_[i] = 0; nsell_[i] = 0;
>   } else {
>   branch[i] = 11;
>       ncover_[i] = 0;
>       nsell_[i] = 0;
>     }
>   }
>  } //end inBuy == 0
>   veprice[i] = eprice; VInBuy[i] = inBuy; VInShort[i] = inShort;
> } 
> 
> printf("nBuy_= %g nSell_= %g\n", nBuy_, nSell_);
> printf("nShort_ = %g nCover_= %g\n", nShort_, nCover_);
> printf("inBuy = %g inShort = %g\n", vinBuy, vinShort);
> printf("Branch= %g \n", branch);
> 
> Plot( C, "Close", colorBlack, styleNoTitle | ParamStyle("Style") | 
> GetPriceStyle()); 
> Plot(stopLine   , _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), 
> ParamStyle("Style",styleNoLabel, maskDefault) ); 
> 
> // plot shapes with colors that are different from candle colors
> PlotShapes( shapeSmallUpTriangle*nBuy_, colorBlue );
> PlotShapes( shapeHollowSmallDownTriangle*nSell_, colorBlue );
> PlotShapes( shapeSmallDownTriangle*nShort_, colorYellow );
> PlotShapes( shapeHollowSmallUpTriangle*nCover_, colorYellow );
>


Reply via email to