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 [email protected], "Barry Scarborough" <razzba...@...> 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 [email protected], "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 [email protected], "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);
> > >
> >
>


Reply via email to