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 [email protected], "Mike" <sfclimb...@...> 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 [email protected], "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 [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