PureBytes Links
Trading Reference Links
|
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@xxxxxxxxxxxxxxx, "redberryys" <redberryys@xxx> 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 );
>
------------------------------------
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|