As a follow up. I think my code for the stops was acceptable. The reason I was not seeing 10 as the reason for being stopped often is that the worst rank held was cycling to other stocks before the stops were hit.
--- In amibroker@yahoogroups.com, "radmobile_radmobile" <dan...@...> wrote: > > Still hoping that someone here more knowledgeable in the CBT will be able to > offer some direction. Thank you. > > --- In amibroker@yahoogroups.com, "radmobile_radmobile" <danv83@> wrote: > > > > I want to exit all trades if the average profit for all the open positions > > in a portfolio exceeds a specified value. At the end of this message is the > > code I have come up with, I do not think it is working correctly. The > > reason I am suspect is that the number of trades I see that show "10" as > > the reason for exit is only about 1% of all the trades taken. I'd expect > > the portfolio stop to be triggered more like 40% of the time. I am new to > > the custom backtester and could really use some help. Thanks! > > > > > > EnableRotationalTrading(); > > > > Maxp = 3; > > PositionScore = 1000 - MA( (C/Ref(C,-1)-1),3); > > > > PositionSize = -(100/Maxp); > > > > SetOption("WorstRankHeld", Maxp+2); > > SetOption("MaxOpenPositions", Maxp); > > SetOption("MaxOpenlong", Maxp); > > SetOption("MaxOpenshort", Maxp); > > > > > > > > SetOption("UseCustomBacktestProc", True ); > > if( Status("action") == actionPortfolio ) > > { > > bo = GetBacktesterObject(); > > bo.PreProcess(); // Initialize backtester > > for(bar=0; bar < BarCount; bar++) > > { > > bo.ProcessTradeSignals( bar ); > > > > > > SumProfitPer= 0; //reset on every bar > > NumTrades = 0; > > > > > > for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() > > )//iterate through all open positions for current bar > > { > > SumProfitPer = SumProfitPer + pos.GetPercentProfit(); //sum > > open profit percent for positions > > NumTrades++; // count open trades > > > > } > > > > > > Avp = (SumProfitPer / NumTrades); //average portfolio profit > > > > for( posi = bo.GetFirstOpenPos(); posi; posi = bo.GetNextOpenPos() ) > > //iterate through open positions again > > { > > price = posi.GetPrice( bar, "c" ); > > > > > > if( Avp >= 1.5 AND NumTrades=Maxp ) // if average profit crosses amount > > exit all open trades at bar close > > { > > bo.exittrade( bar, posi.Symbol,price,10); //10 is just the tag so we > > know this stop was triggered > > } > > } > > > > > > } > > bo.PostProcess(); // Finalize backtester > > } > > >