Back in 2009 Larry Connors and Cesar Alvarez published several short term trading systems in their book “High Probability ETF Trading". They described 7 mean reverting strategies.
What happens, then once a strategy becomes public domain? Do they loose their edge?
All tests are performed on a set of 20 ETFs:
DIA,EEM,EFA,EWH,EWJ,EWT,EWZ,FXI,GLD,ILF,IWM,IYR,QQQQ,SPY,XHB,XLB,XLE,XLF,XLI,XLV
Tthe strategy can hold up to 10 ETFs at any time. Commissions at $0.005 a share.
Strategy 1: 3 Day High/Low
The rules:
1. ETF is above MA(200)
2. ETF is below MA(5)
3. ETF has made three consecutive lower lows
4. ETF has made three consecutive lower highs
BUY on the close of the day these criteria are met.
SELL on the close of the day the ETF closes above its MA(5).
The exact opposite for SHORT/COVER.
"In-Sample" 2002-2009: CAR/MDD=1.22 .
Profit = 77728.30 (77.73%), CAR = 8.56%, MaxSysDD = -10319.40 (-7.00%), CAR/MDD = 1.22,
# winners = 649 (75.20%), # losers = 214 (24.80%)
"Out-of-sample" 2009-2012: CAR/MDD=0.38
Profit = 22155.67 (22.16%), CAR = 5.74%, MaxSysDD = -18627.71 (-15.19%), CAR/MDD = 0.38,
# winners = 381 (71.48%), # losers = 152 (28.52%)
The strategy holds up fairly well even after 2009 but under-performs compared to it's 2002-2009 smooth equity, especially after 2011.Keep in mind that 2009-2011 has been a good bull run for the market in general.
During the difficult 2011 it does not perform so well.
Still, if someone bought the book and traded this strategy, they would come out with a 25.17% profit and a 15.35% draw-down.
a. Simple version, 20 ETFs - Jan 1,2002 - Aug.1,2012
Jan 1,2002 - Aug.1,2012
Profit = 112084.70 (112.08%), CAR = 7.36%, MaxSysDD = -32323.67 (-15.19%), CAR/MDD = 0.48, # winners = 1025 (73.79%), # losers = 364 (26.21%)
Jan 1,2009- Aug.1,2012
Profit = 22155.67 (22.16%), CAR = 5.74%, MaxSysDD = -18627.71 (-15.19%), CAR/MDD = 0.38, # winners = 381 (71.48%), # losers = 152 (28.52%)
b. Aggresive version, 20 ETFs - Jan 1,2002 - Aug.1,2012 (Scale In position uses up to x2 leverage)
Jan 1,2002 - Aug.1,2012:
Profit = 183182.36 (183.18%), CAR = 10.33%, MaxSysDD = -55801.39 (-19.73%), CAR/MDD = 0.52, # winners = 1092 (76.42%), # losers = 337 (23.58%)
Jan 1,2009- Aug.1,2012:
Profit = 32036.25 (32.04%), CAR = 8.06%, MaxSysDD = -25999.34 (-19.71%), CAR/MDD = 0.41, # winners = 406 (74.50%), # losers = 139 (25.50%)
Detailed Stats:
Here are the detailed stats for the Non aggressive versions
2002-2012
|
All trades |
Long trades |
Short trades |
Initial capital |
100000.00 |
100000.00 |
100000.00 |
Ending capital |
212084.70 |
153151.01 |
158933.69 |
Net Profit |
112084.70 |
53151.01 |
58933.69 |
Net Profit % |
112.08 % |
53.15 % |
58.93 % |
Exposure
% |
8.91 % |
5.44 % |
3.47 % |
Net Risk Adjusted Return % |
1258.07 % |
977.38 % |
1697.80 % |
Annual Return % |
7.36 % |
4.11 % |
4.47 % |
Risk Adjusted Return % |
82.57 % |
75.51 % |
128.81 % |
|
All trades |
1389 |
886 (63.79 %) |
503 (36.21 %) |
Avg.
Profit/Loss |
80.69 |
59.99 |
117.16 |
Avg.
Profit/Loss % |
0.57 % |
0.48 % |
0.74 % |
Avg. Bars Held |
4.56 |
4.40 |
4.84 |
|
Winners |
1025 (73.79 %) |
665 (47.88 %) |
360 (25.92 %) |
Total Profit |
266745.82 |
145768.63 |
120977.19 |
Avg. Profit |
260.24 |
219.20 |
336.05 |
Avg. Profit
% |
1.73 % |
1.50 % |
2.16 % |
Avg. Bars Held |
3.44 |
3.36 |
3.58 |
Max. Consecutive |
26 |
26 |
28 |
Largest win |
3369.36 |
1449.04 |
3369.36 |
# bars in largest win |
3 |
2 |
3 |
|
Losers |
364 (26.21 %) |
221 (15.91 %) |
143 (10.30 %) |
Total Loss |
-154661.12 |
-92617.62 |
-62043.50 |
Avg. Loss |
-424.89 |
-419.08 |
-433.87 |
Avg. Loss % |
-2.69 % |
-2.60 % |
-2.83 % |
Avg. Bars Held |
7.71 |
7.50 |
8.03 |
Max. Consecutive |
10 |
10 |
10 |
Largest loss |
-3070.01 |
-3070.01 |
-2365.74 |
# bars in largest loss |
13 |
13 |
13 |
|
Max.
trade drawdown |
-3944.05 |
-3944.05 |
-2993.90 |
Max.
trade % drawdown |
-18.94 % |
-18.92 % |
-18.94 % |
Max.
system drawdown |
-32323.67 |
-33724.74 |
-13937.44 |
Max.
system % drawdown |
-15.19 % |
-18.97 % |
-9.20 % |
Recovery Factor |
3.47 |
1.58 |
4.23 |
CAR/MaxDD |
0.48 |
0.22 |
0.49 |
RAR/MaxDD |
5.43 |
3.98 |
14.01 |
Profit Factor |
1.72 |
1.57 |
1.95 |
Payoff Ratio |
0.61 |
0.52 |
0.77 |
Standard
Error |
10672.47 |
6650.99 |
8080.77 |
Risk-Reward
Ratio |
1.18 |
1.14 |
0.62 |
Ulcer
Index |
2.06 |
4.21 |
2.53 |
Ulcer Performance
Index |
0.95 |
-0.31 |
-0.37 |
Sharpe
Ratio of trades |
1.60 |
1.49 |
1.79 |
K-Ratio |
0.0699 |
0.0677 |
0.0365 |
Out-of Sample 2009-2012
|
All trades |
Long trades |
Short trades |
Initial capital |
100000.00 |
100000.00 |
100000.00 |
Ending capital |
122155.67 |
104344.90 |
117810.77 |
Net Profit |
22155.67 |
4344.90 |
17810.77 |
Net Profit % |
22.16 % |
4.34 % |
17.81 % |
Exposure
% |
11.07 % |
6.02 % |
5.05 % |
Net Risk Adjusted Return % |
200.07 % |
72.15 % |
352.54 % |
Annual Return % |
5.74 % |
1.19 % |
4.68 % |
Risk Adjusted Return % |
51.82 % |
19.81 % |
92.56 % |
|
All trades |
533 |
300 (56.29 %) |
233 (43.71 %) |
Avg.
Profit/Loss |
41.57 |
14.48 |
76.44 |
Avg.
Profit/Loss % |
0.41 % |
0.17 % |
0.73 % |
Avg. Bars Held |
4.91 |
4.79 |
5.08 |
|
Winners |
381 (71.48 %) |
216 (40.53 %) |
165 (30.96 %) |
Total Profit |
76958.35 |
38256.95 |
38701.39 |
Avg. Profit |
201.99 |
177.12 |
234.55 |
Avg. Profit
% |
1.83 % |
1.58 % |
2.17 % |
Avg. Bars Held |
3.62 |
3.47 |
3.82 |
Max. Consecutive |
24 |
23 |
28 |
Largest win |
948.27 |
835.21 |
948.27 |
# bars in largest win |
3 |
2 |
3 |
|
Losers |
152 (28.52 %) |
84 (15.76 %) |
68 (12.76 %) |
Total Loss |
-54802.67 |
-33912.05 |
-20890.62 |
Avg. Loss |
-360.54 |
-403.71 |
-307.21 |
Avg. Loss % |
-3.15 % |
-3.45 % |
-2.77 % |
Avg. Bars Held |
8.15 |
8.18 |
8.12 |
Max. Consecutive |
10 |
10 |
10 |
Largest loss |
-1767.74 |
-1767.74 |
-1361.94 |
# bars in largest loss |
13 |
13 |
13 |
|
Max.
trade drawdown |
-2277.55 |
-2277.55 |
-1726.40 |
Max.
trade % drawdown |
-18.92 % |
-18.92 % |
-16.66 % |
Max.
system drawdown |
-18627.71 |
-19432.71 |
-8024.43 |
Max.
system % drawdown |
-15.19 % |
-16.39 % |
-7.07 % |
Recovery Factor |
1.19 |
0.22 |
2.22 |
CAR/MaxDD |
0.38 |
0.07 |
0.66 |
RAR/MaxDD |
3.41 |
1.21 |
13.10 |
Profit Factor |
1.40 |
1.13 |
1.85 |
Payoff Ratio |
0.56 |
0.44 |
0.76 |
Standard
Error |
3221.90 |
5001.76 |
2781.37 |
Risk-Reward
Ratio |
1.33 |
0.35 |
0.91 |
Ulcer
Index |
2.70 |
5.92 |
2.31 |
Ulcer Performance
Index |
0.13 |
-0.71 |
-0.31 |
Sharpe
Ratio of trades |
1.05 |
0.41 |
1.75 |
K-Ratio |
0.0459 |
0.0121 |
0.0314 |
Amibroker code:
//Code by VangelisM. (aka - sanzprophet )
//Part of Code taken by afl from Library - Paul's "Connors TPS - ETFs.afl"
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
SetBacktestMode( backtestRegularRaw );
aggresive=ParamToggle("Agreesive?","NO|YES",0);
Buy=Sell=Cover=Short=0;
SetTradeDelays(0,0,0,0);
BuyPrice=SellPrice=CoverPrice=ShortPrice=C;
qty=Param("PositionScoretions",1,1,50,1);
SetOption( "MaxOpenPositions", qty );
if(!aggresive)
{
aboveMA=C>MA(C,200);
belowMA5=C<MA(C,5);
Low3= H<Ref(H,-1) AND Ref(H,-1)<Ref(H,-2) AND Ref(H,-2)<Ref(H,-3)
AND L<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3);
Buy1=aboveMA AND belowMA5 AND Low3;
Buy=Buy1;
Sell=!belowMA5;
Sell=ExRem(Sell,Buy);
High3= H>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2) AND Ref(H,-2)>Ref(H,-3)
AND L>Ref(L,-1) AND Ref(L,-1)>Ref(L,-2) AND Ref(L,-2)>Ref(L,-3);
Short1=C<MA(C,200) AND !belowMA5 AND High3;
Short=Short1;
Cover=belowMA5;
PositionSize=-98/qty;
PositionScore=IIf(Buy,100-RSI(3),RSI(3));
}
if(aggresive)
{
aboveMA=C>MA(C,200);
belowMA5=C<MA(C,5);
Low3= H<Ref(H,-1) AND Ref(H,-1)<Ref(H,-2) AND Ref(H,-2)<Ref(H,-3)
AND L<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3);
Buy1=aboveMA AND belowMA5 AND Low3;
Sell=!belowMA5;
High3= H>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2) AND Ref(H,-2)>Ref(H,-3)
AND L>Ref(L,-1) AND Ref(L,-1)>Ref(L,-2) AND Ref(L,-2)>Ref(L,-3);
Short1=C<MA(C,200) AND !belowMA5 AND High3;
Cover=belowMA5;
BarsSinceSell = BarsSince(Sell);
InFirstPos =Flip(Buy1,Sell);
FirstTrigger = ExRem(InFirstPos, Sell);
BarsSinceFirstTrigger = BarsSince(FirstTrigger);
FirstTriggerPrice = IIf(BarsSinceFirstTrigger < BarsSinceSell,Ref(C,-BarsSinceFirstTrigger), 0 );
SecondEntry = aboveMA AND C < FirstTriggerPrice AND InFirstPos AND Ref(InFirstPos,-1);
InSecondPos = Flip(SecondEntry, Sell);
SecondTrigger = ExRem(InSecondPos, Sell);
BarsSinceSecondTrigger = BarsSince(SecondTrigger);
SecondTriggerPrice = IIf(BarsSinceSecondTrigger < BarsSinceSell,
Ref(C,-BarsSinceSecondTrigger), 0);
BarsSinceCover = BarsSince(Cover);
FirstShortEntry = Short1; ;
InFirstShortPos = Flip(FirstShortEntry, Cover );
FirstShortTrigger = ExRem(InFirstShortPos, Cover );
BarsSinceFirstShortTrigger = BarsSince(FirstShortTrigger);
FirstShortTriggerPrice = IIf(BarsSinceFirstShortTrigger < BarsSinceCover ,Ref(C,-BarsSinceFirstShortTrigger), 0 );
//FirstTriggerPrice = IIf(BarsSinceFirstTrigger < BarsSinceSell,Ref(O,-BarsSinceFirstTrigger+1), 0 );
SecondShortEntry = !aboveMA AND C > FirstShortTriggerPrice AND InFirstShortPos AND Ref(InFirstShortPos,-1);
InSecondShortPos = Flip(SecondShortEntry, Cover );
SecondShortTrigger = ExRem(InSecondShortPos, Cover );
BarsSinceSecondShortTrigger = BarsSince(SecondShortTrigger);
SecondShortTriggerPrice = IIf(BarsSinceSecondShortTrigger < BarsSinceCover,
Ref(C,-BarsSinceSecondShortTrigger), 0);
PositionSize=-98/qty;
PositionScore=IIf(Buy OR SecondEntry ,100-RSI(3),RSI(3));
Buy=IIf(Buy1,1,IIf(SecondEntry AND Sum(Secondentry,BarsSinceSell)==1 ,sigScaleIn,0));
Short=IIf(Short1,1,IIf(SecondShortEntry AND Sum(SecondShortentry,BarsSinceCover)==1 ,sigScaleIn,0));
}
GfxSelectPen( colorBlack, 2 );
GfxSelectFont("Times New Roman", 12, 200, False );
GfxTextOut("3 Day High/Low",10,20);
shape = Buy * shapeUpArrow + Sell * shapeDownArrow;
PlotShapes( shape, IIf( Buy, colorGreen, colorYellow ), 0,C );