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 amibroker@xxxxxxxxxps.com,
"Edward Pottasch" <empottasch@...>
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: amibroker@xxxxxxxxxps.com
> 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 amibroker@xxxxxxxxxps.com,
"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: amibroker@xxxxxxxxxps.com
> > 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
>
>
>