[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: BarsSince returns nulls, why?



PureBytes Links

Trading Reference Links

Sorry about that. The following code works and gives barssince values before and after the assignment in the signal logic. It seems that barssince can not be used before the logic WHEN looking at the current bar, probably because it has not been assigned yet. But if you reference the previous cell it provides true values. The updated code follows.

Thanks,
Barry

// BarsSince test
#include <AT Functions\Colors.afl>

fMA = MA(C, 5);
fMAup = fMA >= Ref(fMA, -1);
fMAdn = fMA < Ref(fMA, -1);

Plot(fMA, "MA", MA1color);
Plot( C, "Close", pricecolor, styleNoTitle | styleBar ); // shows all style options

Buy	= Sell = Short = Cover = 0;
myBuy	= mySell = myShort = myCover = 0;

// referencing the previous bar gives values
bsBuy 	= BarsSince(Ref(fMAup, -1));
bsSel 	= BarsSince(Ref(fMAdn, -1));
bsSht 	= BarsSince(Ref(fMAdn, -1));
bsCov 	= BarsSince(Ref(fMAup, -1));
StrFormat("\nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g", bsBuy , bsSel, bsSht, bsCov);

myBuy		= fMAup;
myShort 	= fMAdn;
mySell		= fMAdn;
myCover	= fMAup;

// barssince returns the true values referenced to the current bar
bsBuy 	= BarsSince(fMAup);
bsSel 	= BarsSince(fMAdn);
bsSht 	= BarsSince(fMAdn);
bsCov 	= BarsSince(fMAup);
StrFormat("\nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g", bsBuy , bsSel, bsSht, bsCov);
StrFormat("\nBBbuy > BSsell = %g barindex = %g", bsSel - bsBuy, BarIndex());

Buy	= myBuy 	AND Ref(bsBuy - bsSel, -1) > 0;
Short	= myShort 	AND Ref(bsSht - bsCov, -1) > 0;
Sell	= mySell 	AND Ref(bsSel - bsBuy, -1) > 0;
Cover	= myCover 	AND Ref(bsCov - bsSht, -1) > 0;
StrFormat("\nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g", Buy , Sell, Short, Cover);

PlotShapes(Buy 	* shapeUpArrow, uparrow, 0, Low, -5);
PlotShapes(Sell * shapeDownArrow, dnarrow,0, High, -5 );
PlotShapes(Short * shapeHollowDownArrow, dnarrow, 0, High, -20 );
PlotShapes(Cover * shapeHollowUpArrow, uparrow, 0, Low, -20);


--- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:
>
> It's not clear what code you were testing since your mixing two snippets together that don't coincide with each other.
> 
> The point that I'm trying to make is this: BarsSince returns the number of bars since the *last non zero value*.
> 
> Breaking it down to the most simplified form;
> 
> -- begin file --
> // At this point BarsSince(Buy) is "never" or an error depending on whether Buy array is considered undefined here. Sorry I don't have AmiBroker at my disposal.
> 
> Buy = 0;
> // At this point BarsSince(Buy) is "never", there are no non zero values.
> 
> Buy = <any non zero value or array>
> // At this point BarsSince(Buy) is the number of bars since last non zero value.
> -- end file --
> 
> Your observations would seem to suggest that "never" maps to 1e+010. If 1e+010 is the representation of null, then so be it. Again, I don't have AmiBroker in front of me right now to test.
> 
> Are you suggesting that you have found a case where you have assigned a *non zero value* to Buy and then found BarsSince(Buy) to be null?
> 
> Mike
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Barry Scarborough" <razzbarry@> wrote:
> >
> > Lets forget the logic and figure out why the first barssince assignment always returns nulls. I took all the time and other conditions out and just assigned 
> > 
> > buy  = cover = maUp;
> > sell = short = maDn;
> > 
> > I assigned sinceBars for all 4 cases above and below the assignment of buy, sell, short and cover and barssince still returns nulls before and true values after. If barssince can never return good values before a logic statement how can it ever be used? I have used barssince before and never ran into this. I must be missing something very basic.
> > 
> > Buy	= Sell = Short = Cover = 0;
> > 
> > // barssince returns null here
> > bsBuy 	= BarsSince(Buy);
> > bsSel 	= BarsSince(Sell);
> > bsSht 	= BarsSince(Short);
> > bsCov 	= BarsSince(Cover);
> > StrFormat("\nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g", bsBuy , bsSel, bsSht, bsCov);
> > 
> > Buy	= fMAup;
> > Short 	= fMAdn;
> > Sell	= fMAdn;
> > Cover	= fMAup;
> > 
> > // barssince returns the true values here
> > bsBuy 	= BarsSince(Buy);
> > bsSel 	= BarsSince(Sell);
> > bsSht 	= BarsSince(Short);
> > bsCov 	= BarsSince(Cover);
> > StrFormat("\nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g", bsBuy , bsSel, bsSht, bsCov);
> > 
> > Why is the first barssince always null?
> > 
> > Thanks,
> > Barry
> > 
> > 
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@> wrote:
> > >
> > > I haven't tested this out. But, what value would you expect if the condition you are looking for has never happened?
> > > 
> > > Zero means most recent occurence is current bar, 1 means one bar ago, 2 means two bars ago, etc. What value means "never happened yet"?
> > > 
> > > Based on your observations, presumably the answer is 1e+010. You will need to handle that scenario in your logic.
> > > 
> > > Mike
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "Barry Scarborough" <razzbarry@> wrote:
> > > >
> > > > I must be brain dead this morning. BarsSince is not working as expected. I am trying to use BarsSince in the signal logic but when I try to set the values before the buy sell short and cover the value returned is null, 1e+010. That doesn't make sense. If I get the values after the signals are set the values are correct. But this prevents them from being use in the signal logic. 
> > > > 
> > > > Why doesn't BarsSince return the correct values in the first assignment?
> > > > 
> > > > The code follows.
> > > > 
> > > > Thanks,
> > > > Barry
> > > > 
> > > > // BarsSince test
> > > > #include <AT Functions\Colors.afl>
> > > > 
> > > > fMA = MA(C, 5);
> > > > fMAup = fMA >= Ref(fMA, -1);
> > > > fMAdn = fMA < Ref(fMA, -1);
> > > > Plot(fMA, "MA", MA1color);
> > > > 
> > > > sysTime = TimeNum();
> > > > tradeTime = IIf(sysTime >= 73000 AND sysTime < 161500, True, False);
> > > > 
> > > > Plot( C, "Close", pricecolor, styleNoTitle | styleBar ); // shows all style options
> > > > 
> > > > Buy	= Sell = Short = Cover = 0;
> > > > 
> > > > // #### First assignment
> > > > // barssince returns null here
> > > > bsBuy 	= BarsSince(Buy);
> > > > bsSel 	= BarsSince(Sell);
> > > > bsSht 	= BarsSince(Short);
> > > > bsCov 	= BarsSince(Cover);
> > > > StrFormat("sysTime=%g, TradeTime=%g \nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g",sysTime, tradeTime, bsBuy , bsSel, bsSht, bsCov);
> > > > 
> > > > Buy	= tradeTime AND fMAup; // works fine
> > > > // when I try to use barssince the buy logic is never true.
> > > > Buy	= tradeTime AND fMAup AND bsBuy > bsSell; // never true
> > > > 
> > > > Short 	= tradetime AND fMAdn;
> > > > Sell	= tradetime AND fMAdn;
> > > > Cover	= tradetime AND fMAup;
> > > > 
> > > > // #### Second assignment
> > > > // barssince returns the true values here
> > > > bsBuy 	= BarsSince(Buy);
> > > > bsSel 	= BarsSince(Sell);
> > > > bsSht 	= BarsSince(Short);
> > > > bsCov 	= BarsSince(Cover);
> > > > 
> > > > StrFormat("\nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g", bsBuy , bsSel, bsSht, bsCov);
> > > > 
> > > > PlotShapes(Buy 	* shapeUpArrow, uparrow, 0, Low, -5);
> > > > PlotShapes(Sell * shapeDownArrow, dnarrow,0, High, -5 );
> > > > PlotShapes(Short * shapeHollowDownArrow, dnarrow, 0, High, -20 );
> > > > PlotShapes(Cover * shapeHollowUpArrow, uparrow, 0, Low, -20);
> > > >
> > >
> >
>




------------------------------------

**** 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/