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); > > > > > >
