I found a way to accomplish what I want to do. I cannot get the first 
assignment of barssince to work. Teh code is below.

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;

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

// barssince returns the true values here
bsBuy   = Ref(BarsSince(myBuy), -1);
bsSel   = Ref(BarsSince(mySell), -1);
bsSht   = Ref(BarsSince(myShort), -1);
bsCov   = Ref(BarsSince(myCover), -1);
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 bsBuy - bsSel > 0;
Short   = myShort       AND bsSht - bsCov > 0;
Sell    = mySell        AND bsSel - bsBuy > 0;
Cover   = myCover       AND bsCov - bsSht > 0;
StrFormat("\nBS buy=%g, BS sell=%g \nBS short=%g, BS cover=%g", Buy , Sell, 
Short, Cover);

PlotShapes(myBuy        * shapeUpArrow, uparrow, 0, Low, -5);
PlotShapes(mySell       * 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