[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: PositionScore question (was Optimizing Max Open Positions)



PureBytes Links

Trading Reference Links

Came out with the following solution:

equity_lookback_bars = 0;
equity_lookback_smoothing = 30;
equity_drawdown_discount_pct = 90;  //not sure what this should be
function PerformanceScore() { // returns score for current trade 
signals;
//Highest score is used
e = Equity(0, 0);
if(equity_lookback_bars == 0) { // test all performance to date
e_ref = e[0];
} else { // test performance back spec'd number of bars
e_ref = Ref(e, -equity_lookback_bars);
}
perf_score = (e - e_ref) / e_ref; // growth over lookback period
perf_score = MA(perf_score, equity_lookback_smoothing) * 100; // 
smoothed pct
perf_score = perf_score * 100 / IIf(equity_lookback_bars == 0, Cum(1),
equity_lookback_bars); // per 100 bars
e_max = Highest(e); // peak equity so far
mdd = Highest(e_max - e); // max drawdown so far
mdd_fraction = Highest(mdd / e_max); // fraction max drawdown is of 
peak equity
perf_score = perf_score - (perf_score * mdd_fraction *
(equity_drawdown_discount_pct/100)); // reduce score by mdd fraction 
scaled
//by drawdown discount
return perf_score;
}
PositionScore = PerformanceScore();

Any Feedback appreciated.

rgds, Pal
--- In amibroker@xxxxxxxxxxxxxxx, "palsanand" <palsanand@xxxx> wrote:
> Previously I forgot that I read the following in the ReadMe file of 
> the latest beta of AB:
> 
> in regular backtest mode now it is possible to specify the score of 
> the symbol (on bar-by-bar basis) via PositionScore variable. In 
this 
> mode the score is used only at trade ENTRY to decide which 
securities 
> should be traded in case when there are more simultaneous entry 
> signals than max. allowable positions or available funds. AmiBroker 
> will 'prefer' securities with higher absolute value of the score. 
If 
> PositionScore is not used then it is assumed to be 1 for all 
> securities.
> 
> You can use new PositionScore variable to decide which trades 
should 
> be entered if there are more entry signals on different securities 
> than maximum allowable number of open positions or available funds. 
> In such case AmiBroker will use the absolute value of PositionScore 
> variable to decide which trades are preferred. See the code below. 
It 
> implements simple MA crossover system, but with additional flavour 
of 
> preferring entering trades on symbols that have low RSI value. If 
> more buy signals occur than available cash/max. positions then the 
> stock with lower RSI will be preferred. You can watch selection 
> process if you backtest with "Detailed log" report mode turned on.
> 
> // now additional score 
> // that is used to rank equities 
> // when there are more ENTRY signals that available
> // positions/cash
> PositionScore = 100-RSI(); // prefer stocks that have low RSI;
> 
> This would now solve the problem of issue selection.  Now I have 7 
> Max open positions, but naturally some "underlying instrument" 
issues 
> are different than before I used PositionScore, depending on the 
> PositionScore, which I hope AB uses to select low RSI for Long and 
> high RSI for Short positions which is the rule I use for 
reversals.  
> If not then I would not use PositionScore and let it to default to 
> the value of 1.  RSI doesn't matter for some trades like 
continuation 
> signals.    How would I handle these 2 trading situations?  Could 
> somebody clarify what AB does here with this PositionScore?
> 
> rgds, Pal
> --- In amibroker@xxxxxxxxxxxxxxx, "palsanand" <palsanand@xxxx> 
wrote:
> > I modified the AA code as follows:
> > 
> > in_trade_long = Flip( Buy, Sell );
> > in_trade_short = Flip( Short, Cover);
> > 
> > AddToComposite( in_trade_long, "~OpenLongPosCount", "V" );
> > AddToComposite( in_trade_short, "~OpenShortPosCount", "V" );
> > 
> > /* We use "~OpenPosLongCount" and "~OpenPosShortCount" artificial 
> > ticker to store the results. Again we should run just Scan of the 
> > formula AND these tickers would become available. 
> > 
> > Use */ 
> > 
> > Graph1 = Foreign( "~OpenLongPosCount", "V"); 
> > Graph2 = Foreign( "~OpenShortPosCount", "V"); 
> > 
> > /* in Indicator Builder after running the back-test to see the 
> chart 
> > of the number of Open long and short positions of your system. */
> > 
> > Modified Indicator code as follows:
> > 
> > Graph1 = Foreign( "~OpenLongPosCount", "V"); 
> > Plot(Graph1,"OpenLongPosCount",1,style=1,0,20);
> > Graph2 = Foreign( "~OpenShortPosCount", "V"); 
> > Plot(Graph2,"OpenShortPosCount",2,style=1,0,20);
> > Plot(7,"My line",colorRed);
> > 
> > Now, I show both open long (12) and short positions (5), but 
since 
> > the MaxOpenPos has been optimized/set to 7, the trades list has 
> only 
> > 7 open positions ( 5 long and 2 short).  I have no idea yet what 
> the 
> > issue selection criteria is for long and short trades, though.  
Can 
> > anybody take a guess?
> > 
> > rgds, Pal
> > --- In amibroker@xxxxxxxxxxxxxxx, "palsanand" <palsanand@xxxx> 
> wrote:
> > > I came out with the following results adding more code:
> > > 
> > > eq = Foreign("~~~EQUITY", "C");
> > > cash = Foreign("~~~EQUITY", "L");
> > > dr = eq - Highest(eq);
> > > MR1 = 0.1;  
> > > MR2 = 0.5;
> > > MaxRisk = Optimize("MaxRisk",0.10,MR1,MR2,0.05);
> > > Pd1=3;Pd2=12;LB1=1;LB2=17;
> > > MaxOpenPos= LB = Optimize("MaxOpenPos",7,LB1,LB2,1);
> > > //MaxOpenPos= LB = Param("MaxOpenPos",7,LB1,LB2,1);
> > > GPS = (MaxRisk * eq)/dr;
> > > PositionSize = GPS = -100/MaxOpenPos;
> > > MaxOpenPos = 
> > > SetOption("MaxOpenPositions", MaxOpenPos );
> > > Period = Pd = Param("Period", 3, Pd1, Pd2, 1 );
> > > //Period = Pd = Optimize("Period", 3, Pd1, Pd2, 1 );
> > > OptStart = (Pd = 3) AND (LB = 1) AND (MR1 = 0.1);
> > > 
> > > It was interesting to find that there were a range of values 
for 
> > > MaxRisk and the same MaxOpenPos for the highest CAR/MDD and 
UPI, 
> > but 
> > > all the values in the optimization were the same for this 
range.  
> > > Since, I want to minimize the Max% of the closed equity to 
> > > risk/trade, I guess I need to use the minimum in this range, 
> which 
> > is 
> > > 0.10 (10% Max risked/trade).  
> > > 
> > > Also, concidentally or optimally, the MaxOpenPos came out to be 
> 7, 
> > > which is also the same value I originally chose as part of the 
> > trader-
> > > defined criteria.  Still the discrepancy with the MaxOpenPos 
and 
> > the 
> > > Composite ~OpenPosCount through which I got 12 positions open 
> now, 
> > > (where I plot it in a indicator window), still exists.
> > > 
> > > rgds, Pal
> > > 
> > > 
> > > 
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "palsanand" <palsanand@xxxx> 
> > wrote:
> > > > Thanks.  I optimized the Max Open Positions to 8.
> > > > 
> > > > Maxpos=Optimize("maxpos",8,1,20,1);
> > > > PositionSize = -100/Maxpos;
> > > > SetOption("MaxOpenPositions", Maxpos );
> > > > 
> > > > I am getting 8 positions open in the Results window:
> > > > 
> > > > 12/4/03							
> > > 	
> > > > 			
> > > > 	Entry signals(score):GU-9967=short(-1)	 UC-9967=buy
(1)	 
> > > > 							
	
> > > > 	Exit signals:GU-9967=sell	 UC-9967=cover	 
	
> > > > 							
> > > > 	Enter Short	 GU-9967	 Price: 1.7278	 
Shares: 250
> > > > 	 Commission: 0	 Rank: -1	 Equity 3712.71	
	
> > > > 		
> > > > 	Enter Long	 UC-9967	 Price: 1.3007	 
Shares: 350
> > > > 	 Commission: 0	 Rank: 1	 Equity 3712.71	
	
> > > > 		
> > > > 	8 Open Positions:$C-9967	 $E-9967	 AU-
9967
> > > > 	 AC-9967	 E$-9967	 EA-9967	 GU-
9967
> > > > 	 UC-9967	 Equity: 3718.23	 Cash: 317.445
	
> > > > 
> > > > But I find a discrepancy with the Open position count using 
the 
> > > > following code, where I got 11 positions open, when I plot it 
> in 
> > a 
> > > > indicator window using 
> > > > 
> > > > Graph1 = Foreign( "~OpenPosCount", "V"); 
> > > > Plot(Graph1,"OpenPosCount",1,style=1,0,100);
> > > > 
> > > > The following is in Automatic Analysis:
> > > > 
> > > > /* the following line uses Flip function to get "1" after the 
> buy 
> > > > signal and reset it back to "0" after sell appears. */
> > > > 
> > > > in_trade = Flip( Buy, Sell );
> > > > 
> > > > AddToComposite( in_trade, "~OpenPosCount", "V" );
> > > > 
> > > > /* We use "~OpenPosCount" artificial ticker to store the 
> results. 
> > > > Again we should run just Scan of the formula AND 
> > > the "~OpenPosCount" 
> > > > ticker would become available. 
> > > > 
> > > > Use */ 
> > > > 
> > > > Graph0 = Foreign( "~OpenPosCount", "V"); 
> > > > 
> > > > /* in Indicator Builder after running the back-test to see 
the 
> > > chart 
> > > > of the number of Open positions of your system. */
> > > > 
> > > > Can somebody tell me why this discrepancy occurs.  TIA.
> > > > 
> > > > rgds, Pal
> > > > 
> > > > 
> > > > 
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "bvandyke" <bvandyke@xxxx> 
> > wrote:
> > > > > Pal,
> > > > > 
> > > > > Try the following example and modify the # of positions as 
> > needed:
> > > > > 
> > > > > Maxpos=Optimize("maxpos",2,1,4,1);
> > > > > PositionSize = -100/Maxpos;
> > > > > SetOption("MaxOpenPositions", Maxpos );
> > > > > 
> > > > > Bill
> > > > > 
> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "palsanand" 
> <palsanand@xxxx> 
> > > > wrote:
> > > > > > Hi All,
> > > > > > 
> > > > > > Does anybody has the code for Optimizing Max Open 
> Positions.  
> > I 
> > > > > > remember seeing it somewhere in AFL guides.  I can't seem 
> to 
> > > find 
> > > > > it 
> > > > > > now or remember how to do it.
> > > > > > 
> > > > > > TIA
> > > > > > 
> > > > > > rgds, Pal


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com. Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/