7 Winning Trading Systems Reviewed - Pt. 2: MDD / MDU


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.

Strategy 2:  MDD / MDU

The rules:
1. ETF is above MA(200)
2. ETF is below MA(5)
3. ETF has closed lower 4 days out of the last 5.

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 = 107468.13 (107.47%), CAR = 10.99%, MaxSysDD = -12050.93 (-9.00%), CAR/MDD = 1.22, 
# winners = 876 (72.76%), # losers = 328 (27.24%) 

"Out-of-sample"  2009-2012: CAR/MDD=0.55
Profit = 29002.70 (29.00%), CAR = 7.36%, MaxSysDD = -15523.51 (-13.34%), CAR/MDD = 0.55, 
# winners = 482 (68.08%), # losers = 226 (31.92%) 

The strategy brings 29% return with a maximum drawdown of 13.34%. That's not too bad, but it's nothing close to the pre-2009 results.

a. Simple version, 20 ETFs - Jan 1,2002 - Aug.1,2012

Jan 1,2002 - Aug.1,2012
Profit = 160048.03 (160.05%), CAR = 9.44%, MaxSysDD = -31337.40 (-13.37%), CAR/MDD = 0.71, 
# winners = 1351 (71.07%), # losers = 550 (28.93%)

Jan 1,2009- Aug.1,2012
Profit = 29002.70 (29.00%), CAR = 7.36%, MaxSysDD = -15523.51 (-13.34%), CAR/MDD = 0.55, 
# winners = 482 (68.08%), # losers = 226 (31.92%) 

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 = 200653.84 (200.65%), CAR = 10.95%, MaxSysDD = -48630.97 (-18.19%), CAR/MDD = 0.60, 
# winners = 1382 (72.70%), # losers = 519 (27.30%) 

Jan 1,2009- Aug.1,2012:
Profit = 29119.88 (29.12%), CAR = 7.39%, MaxSysDD = -20885.92 (-18.17%), CAR/MDD = 0.41, 
# winners = 493 (69.63%), # losers = 215 (30.37%) 

Not impressed? You should be...

Although you might not be impressed, there is a very impressive and potentially usefull aspect of this strategy. Let's zoom in on the 2008-2009 crash:

While SPY (SP500 ETF) crashed 52%, the strategy made 48%. 

That's a time when most managers were wiped out. It turns out this "tail risk" protection came purely from the SHORT trades.

Let's break down the equity to long trade equit and short trade equity:
Equity due to LONG trades (flat due to 200 Mov. Average filter)

Equity due to SHORT trades (Once prices under their 200 MA, shorts kick in) :

And here's the Equity for the strategy Short positions only, from 2002 till 2012. Notice the Augoust 2011 mini crash that did damage to most intelligent strategies? This is what I call cheap "tail risk" insurance. This is the effect that most managers want when buying VIX futures and have to accept the roll-over cost.




The Short only stats 2002-2012:
Profit = 70574.62 (70.57%), CAR = 5.17%, MaxSysDD = -11885.08 (-7.72%), CAR/MDD = 0.67, 
# winners = 480 (69.87%), # losers = 207 (30.13%) 


So here's a strategy that provides tail risk protection, has negative correlation to the market and historically had only a -7.72% draw-down.  That is not bad at all.

Keep in mind that there is a extra charge for being short an ETF. For example when Spain was in trouble (2012), keeping an EWP short (spain ETF) would have cost you a 7+% interest. This strategy holds an ETF short for an average of 4.66 bars and it holds up to 10 Etfs. So this would not be much of an additional cost. 




Amibroker Code:


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() ); 


aggresive=ParamToggle("Agressive?","NO|YES",0);
Buy=Sell=Cover=Short=0;
SetTradeDelays(0,0,0,0);
BuyPrice=SellPrice=CoverPrice=ShortPrice=C;
qty=Param("Positions",1,1,50,1);
SetOption( "MaxOpenPositions", qty );

FirstTriggerPrice =InFirstPos=0;


if(!aggresive)
{
aboveMA=C>MA(C,220);
belowMA5=C<MA(C,5);
MDD=Sum(C<Ref(C,-1),5)>=4;

Buy1=aboveMA AND belowMA5 AND MDD;
Buy=Buy1;
Sell=!belowMA5;
Sell=ExRem(Sell,Buy);


MDU=Sum(C>Ref(C,-1),5)>=4;
Short1=C<MA(C,220) AND !belowMA5 AND MDU;
Short=Short1;
Cover=belowMA5;

PositionSize=-98/qty;
PositionScore=IIf(Buy,100-RSI(3),RSI(3));

}

if(aggresive)
{

aboveMA=C>MA(C,220);
belowMA5=C<MA(C,5);
MDD=Sum(C<Ref(C,-1),5)==4;

Buy1=aboveMA AND belowMA5 AND MDD;
Buy=Buy1;
Sell=!belowMA5;
Sell=ExRem(Sell,Buy);


MDU=Sum(C>Ref(C,-1),5)==4;
Short1=C<MA(C,220) AND !belowMA5 AND MDU;
Short=Short1;
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));



}
"FirstTriggerPrice "+FirstTriggerPrice ;
"InFirstPos "+InFirstPos ;
"InFirstPos -1 "+Ref(InFirstPos, -1) ;
GfxSelectPen( colorBlack, 2 ); 
GfxSelectFont("Times New Roman", 12, 200, False ); 
GfxTextOut("Larry Connors MDD/MDU",10,20);





shape = Buy * shapeUpArrow + Sell * shapeDownArrow;

PlotShapes( shape, IIf( Buy, colorGreen, colorYellow ), 0,C );

Labels: , , , , , , ,