SPY: How to short a bull market [Part I.]

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;
About these ads

Comments

  1. Brilliant.

    Thanks Frank.

Trackbacks

  1. [...] ndx100 ← SPY: How to short a bull market [Part I.] [...]

  2. [...] post is closing a series of posts (post1 post2) about how to short a bull market. It started with the question: 1.) What’s the edge for a [...]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 304 other followers

%d bloggers like this: