Ed, again, thanks. I believe that you are observing the behavior that I described. If the outer loop is cycling through all signals, the output should look like:
> Sig: AMZN Sig2: AMZN > Sig: AMZN Sig2: ESLR > Sig: AMZN Sig2: GNTX > Sig: AMZN Sig2: GPRO > Sig: AMZN Sig2: GROW > Sig: ESLR Sig2: AMZN > Sig: ESLR Sig2: ESLR > Sig: ESLR Sig2: GNTX > Sig: ESLR Sig2: GPRO > Sig: ESLR Sig2: GROW > Sig: GNTX Sig2: AMZN > Sig: GNTX Sig2: ESLR > Sig: GNTX Sig2: GNTX > Sig: GNTX Sig2: GPRO > Sig: GNTX Sig2: GROW etc.... I.e., for the first bar, AMZN is the first signal, ESLR the second, etc. and one should have a total of 25 lines of output for that bar (5 x 5) because there are 5 signals. Likewise, the 2nd bar should produce 9 (3x3) lines of output. Make sense? David --- In [email protected], "Edward Pottasch" <[EMAIL PROTECTED]> wrote: > > david, > > below a complete test system including this code. A snapshort of the output in the AA window looks like this: > > Sig: AMZN Sig2: AMZN > Sig: AMZN Sig2: ESLR > Sig: AMZN Sig2: GNTX > Sig: AMZN Sig2: GPRO > Sig: AMZN Sig2: GROW > Sig: IFIN Sig2: IFIN > Sig: IFIN Sig2: OSIP > Sig: IFIN Sig2: VARI > Sig: AMCC Sig2: AMCC > Sig: AMCC Sig2: SEPR > Sig: CELG Sig2: CELG > Sig: CORS Sig2: CORS > Sig: CYMI Sig2: CYMI > Sig: CYMI Sig2: DAKT > Sig: CYMI Sig2: INTU > Sig: CYMI Sig2: JNPR > Sig: CYMI Sig2: SSRI > Sig: AGIX Sig2: AGIX > Sig: AGIX Sig2: AMAG > Sig: AGIX Sig2: CHRS > Sig: AGIX Sig2: COLM > Sig: AGIX Sig2: DRIV > Sig: AGIX Sig2: FLEX > Sig: AGIX Sig2: FORM > Sig: AGIX Sig2: LECO > Sig: IDXX Sig2: IDXX > Sig: IDXX Sig2: JBLU > Sig: IDXX Sig2: XMSR > > etc. > > > regards, ed > > > > > SetOption("UseCustomBacktestProc", True ); > > if( Status("action") == actionPortfolio ) { > > bo = GetBacktesterObject(); > bo.backtest(); > > for(bar=0; bar<BarCount; bar++) { > > for ( sig = bo.GetFirstSignal(bar); sig; sig=bo.GetNextSignal (bar)) { > > for ( sig2 = bo.GetFirstSignal(bar); sig2; sig2=bo.GetNextSignal(bar)) { > > bo.RawTextOutput( "\t" + "Sig: " + sig.Symbol + " Sig2: " + sig2.Symbol ); > > } > > } > > } > > } > > > > SetOption("InitialEquity", 100000 ); > SetOption("MaxOpenPositions", 4 ); > > PositionSize = -25; > SetTradeDelays(0,0,0,0); > > Buy = Cross(RSI(14),30); Buy = Ref(Buy,-1); BuyPrice = O; > Sell = Cross(70,RSI(14)); Sell = Ref(Sell,-1); SellPrice = O; > > Short = Sell; ShortPrice = O; > Cover = Buy; CoverPrice = O; > > Buy = ExRem( Buy, Sell ); > Sell = ExRem( Sell, Buy ); > Short = ExRem( Short, Cover ); > Cover = ExRem( Cover, Short ); > > > SetChartOptions(0, chartShowDates); > Plot(C,"C",1,64); > > PlotShapes(IIf(Buy,shapeUpArrow,0),colorWhite, layer = 0, yposition = BuyPrice, offset = 0 ); > PlotShapes(IIf(Sell,shapeDownArrow,0),colorYellow, layer = 0, yposition = SellPrice, offset = 0 ); > PlotShapes(IIf(Short,shapeHollowDownArrow,0),colorLightBlue, layer = 0, yposition = ShortPrice, offset = -15 ); > PlotShapes(IIf(Cover,shapeHollowUpArrow,0),colorGold, layer = 0, yposition = CoverPrice, offset = -15 ) > > > > ----- Original Message ----- > From: david.weilmuenster > To: [email protected] > Sent: Monday, July 02, 2007 8:41 PM > Subject: [amibroker] Re: Nested Loops - Custom Backtester > > > Ed, > > Unfortunately, I cannot re-create your results here. I used a very > simple backtest, and copied your code verbatim, but the outer loop > still executes only for the first signal. > > Thanks, though, for the suggestion, > > David > > --- In [email protected], "Edward Pottasch" <empottasch@> > wrote: > > > > hi, > > > > it seems to be possible. I ran this code on top of some backtest. > The results in the AA window show that both loops are used. If you > want to change a trade then you will have to change this setup. Here > I first run the backtest and then go through the signal object. > > > > Ed > > > > > > > > > > SetOption("UseCustomBacktestProc", True ); > > > > if( Status("action") == actionPortfolio ) { > > > > bo = GetBacktesterObject(); > > //bo.PreProcess(); // Initialize backtester > > bo.backtest(); > > > > for(bar=0; bar<BarCount; bar++) { > > > > > > for ( sig = bo.GetFirstSignal(bar); sig; > sig=bo.GetNextSignal(bar)) { > > > > > > for ( sig2 = bo.GetFirstSignal(bar); sig2; > sig2=bo.GetNextSignal(bar)) { > > > > bo.RawTextOutput( "\t" + "Sig: " + sig.Symbol > + " Sig2: " + sig2.Symbol ); > > > > > > } > > > > } > > > > } > > //bo.PostProcess(); // Finalize backtester > > > > } > > > > > > > > > > ----- Original Message ----- > > From: david.weilmuenster > > To: [email protected] > > Sent: Monday, July 02, 2007 5:18 PM > > Subject: [amibroker] Nested Loops - Custom Backtester > > > > > > Hi, > > > > In the Custom Backtester, I need to run a nested loop to examine > all > > signals in comparison to a given signal, and have tried the > following > > code to implement a nested loop: > > > > for ( sig = bo.getfirstsignal(bar); sig; sig = bo.getnextsignal > (bar)) > > > > { > > > > for ( sig_2 = bo.getfirstsignal(bar); sig_2; sig_2 = > > bo.getnextsignal(bar)) > > > > { > > > > ... logic to compare signals > > > > } > > > > } > > > > ------------------------------------------- > > > > But, the code executes only for the first signal in the outer > loop. > > I.e., it runs the inner loop perfectly, but only for the first > signal > > in the outer loop. > > > > Any clues as to what I'm doing wrong? Maybe this isn't possible? > > Other approaches I should try? > > > > Thanks, > > David Weilmuenster > > >
