My trading systems are focused on trading in direction of the overall market trend. That’s because I’ve found the risk/reward ratio better. Second, it’s easier to find a good entry. However, there is of course also a down-side to this approach: Capital isn’t efficiently used as in every bull market there is some time where down-side pressure exists. Furthermore, if one wants to hedge his long positions, by definition one has to take a counter trend trade. With this post I want to explore: 1.) What’s the edge for a “pure” short trade within an overall bull market? 2.) When is it worth to hedge my long positions?
Background
For this post I’m going to define a bull market as the rate of change 200 above zero (ROC200>0). I’m not looking into how to short a bear market, as my existing systems cover that already. Let’s look at the actual events that trigger a short trade.
- E1: 2 up days
- E2: 3 up days
- E3: 4 up days
- E4: 1 ATR up move
- E5: 1.5 ATR up move
- E6: Close > lowest close of last 5 days + 1.5 ATR
- E7: Close > lowest close of last 5 days + 2.0 ATR
- E8: Close > lowest close of last 10 days + 3.0 ATR
- E9: Close > lowest close of last 10 days + 4.0 ATR
- E10: Close > lowest close of last 10 days + 5.0 ATR
- E11: Close > lowest low of last 5 days + 2.0 ATR
- E12: Close > lowest low of last 5 days + 3.0 ATR
- E13: Close > lowest low of last 10 days + 4.0 ATR
- E14: Close > lowest low of last 10 days + 5.0 ATR
- E15: Close > MA3
- E16: Close above MA3 for two days
- E17: Close above MA3 for three days
- E18: Close > MA5
- E19: Close above MA5 for two days
- E20: Close above MA5 for three days
- E21: DVO > 0.5
- E22: DVO > 0.7
- E23: DVO > 0.85
- E24: DVO > 0.9
- E25: DVO > 0.95
- E26: RSI2 > 50
- E27: RSI2 > 80
- E28: RSI2 > 85
- E29: RSI2 > 90
- E30: RSI2 > 95
- E31: RSI2>70 and RSI > DVO*100
- E32: RSI2>80 and RSI > DVO*100
- E33: RSI2>90 and RSI > DVO*100
In case you aren’t aware of the DVO indicator please read here. The 33 events that trigger a short trade are a mix of raw price action, indicator movement as well as indicator divergence. Some of these are extremely short-term focused, e.g. 2 up days. Others are more intermediate kind of nature, e.g. close + 4 ATR are higher than the lowest low of the last 10 days.
The first set of results
All tests are conducted close2close, without commission, first trade 1998 (~3150 bars) . I’m looking at next day returns only at this point.
The results are sorted in the order as the events above are listed E1 -> E33. In column DVR you see 3 different symbols. The results in the upper percentile band (> 70) are being marked with a green up arrow, the results in the lower percentile band < 30 are red colored. The remaining ones are yellow.
The good
- A 4 ATR move from the lowest close of last 10 days [E13]
- MA5 returns better results than MA3, especially after 2-3 consecutive days above MA5 [E15 - E20]
- Combining RSI2 / DVO appears to be more interesting than RSI2 alone. [E31-E33]
The bad
- Shorting after a 1ATR move looks more attractive than after a 1.5 ATR move [E4, E5]
- Extreme RSI2 levels alone don’t provide a good entry [E27 - E30]
The ugly
- Just looking at the number of up days doesn’t carry any advantage
Conclusion
Non of the short-term focused entries such as “consecutive number of up days” or ” RSI2″ provide an edge at this point. Most of the returns are a result of looking into the intermediate time frame as well, e.g. A 4 ATR move from the lowest low of last 10 days. While we have identified promising counter trend entries two new questions appear:
1.) are these entries [E9 / E13] already at it’s best
2.) how does an intermediate overbought filter improve performance of short-term mean reversion indicators.
Stay tuned in part II. of this series we are going to look at these questions.
Amibroker AFL – Code
SetOption("CommissionAmount",0.00);
SetBacktestMode( backtestRegular);
SetOption("InitialEquity", 100000);
SetPositionSize( 100000, spsValue );
Buy = Sell = False;
ApplyStop( stopTypeNBar, 1, 1, 0, False, 0 );
_RSI = RSI(2);
_ATR = ATR(10);
eventnr = Optimize("Even",31,1,33,1);
switch (eventnr)
{
case 1: { Shortcond = Close > Ref(Close,-1) AND Ref(Close,-1) > Ref(Close,-2); break;}
case 2: { Shortcond = Close > Ref(Close,-1) AND Ref(Close,-1) > Ref(Close,-2) AND Ref(Close,-2) > Ref(Close,-3); break;}
case 3: { Shortcond = Close > Ref(Close,-1) AND Ref(Close,-1) > Ref(Close,-2) AND Ref(Close,-2) > Ref(Close,-3) AND Ref(Close,-3) > Ref(Close,-4); break;}
case 4: { Shortcond = Close > Ref(Close,-1) + (_ATR * 1); break;}
case 5: { Shortcond = Close > Ref(Close,-1) + (_ATR * 1.5); break;}
case 6: { Shortcond = Close > LLV(Close,5) + (_ATR * 1.5); break;}
case 7: { Shortcond = Close > LLV(Close,5) + (_ATR * 2); break;}
case 8: { Shortcond = Close > LLV(Close,10) + (_ATR * 3); break;}
case 9: { Shortcond = Close > LLV(Close,10) + (_ATR * 4); break;}
case 10: { Shortcond = Close > LLV(Close,10) + (_ATR * 5); break;}
case 11: { Shortcond = Close > LLV(Low,5) + (_ATR * 2); break;}
case 12: { Shortcond = Close > LLV(Low,5) + (_ATR * 3); break;}
case 13: { Shortcond = Close > LLV(Low,10) + (_ATR * 4); break;}
case 14: { Shortcond = Close > LLV(Low,10) + (_ATR * 5); break;}
case 15: {MA3 = MA(Close,3); Shortcond = Close > MA3 ; break;}
case 16: {MA3 = MA(Close,3); Shortcond = Close > MA3 AND Ref(Close,-1) > Ref(MA3,-1); break;}
case 17: {MA3 = MA(Close,3); Shortcond = Close > MA3 AND Ref(Close,-1) > Ref(MA3,-1) AND Ref(Close,-2) > Ref(MA3,-3); break;}
case 18: {MA5 = MA(Close,5); Shortcond = Close > MA5 ; break;}
case 19: {MA5 = MA(Close,5); Shortcond = Close > MA5 AND Ref(Close,-1) > Ref(MA5,-1); break;}
case 20: {MA5 = MA(Close,5); Shortcond = Close > MA5 AND Ref(Close,-1) > Ref(MA5,-1) AND Ref(Close,-2) > Ref(MA5,-3); break;}
case 21: {_DVO = DVO(H,L,C); Shortcond = _dvo>0.5; break;}
case 22: {_DVO = DVO(H,L,C); Shortcond = _dvo>0.7; break;}
case 23: {_DVO = DVO(H,L,C); Shortcond = _dvo>0.85; break;}
case 24: {_DVO = DVO(H,L,C); Shortcond = _dvo>0.9; break;}
case 25: {_DVO = DVO(H,L,C); Shortcond = _dvo>0.95; break;}
case 26: { Shortcond = _rsi>50; break;}
case 27: { Shortcond = _rsi>80; break;}
case 28: { Shortcond = _rsi>85; break;}
case 29: { Shortcond = _rsi>90; break;}
case 30: { Shortcond = _rsi>95; break;}
case 31: {_DVO = DVO(H,L,C); Shortcond = _rsi > _dvo*100 AND _rsi>70; break;}
case 32: {_DVO = DVO(H,L,C); Shortcond = _rsi > _dvo*100 AND _rsi>80; break;}
case 33: {_DVO = DVO(H,L,C); Shortcond = _rsi > _dvo*100 AND _rsi>90; break;}
}
Short = Year()>=1998 AND ROC(Close,200)> 0 AND Shortcond;
Cover = False;


Brilliant.
Thanks Frank.
Thanks Carl. I appreciate your comment!
Part II can be found here:
http://engineering-returns.com/2010/06/15/spy-how-to-short-a-bull-market-part-ii/