Simple ConnorsRSI Strategy on S&P500 Stocks

A frequently asked question is how I pick which variation from an optimization run to trade.  This post will cover a ConnorsRSI strategy on S&P500 stocks. We will use a wide range of parameters to give us lots of choices to be used in the next post. In that next post, I will show how I take the results and narrow them down to one potential variation to trade. And then the final post, I will cover parameter sensitivity to help determine if the results are likely overfitted or not.

3/27/2017 CORRECTION: When I originally posted this, the results shown in the tables were not for the rules shown below. The table results are now matching the rules as below. The spreadsheet also has the corrected results.

The Strategy

Test range from 1/1/2007 to 12/31/2016. Any mention of ConnorsRSI is using the default parameters of (3,2,100).

Set up Rules

  1. Stock is member of the S&P 500 index
  2. It has been less than (10,15,20,25,30) days since a 39 week high
  3. ConnorsRSI is less than (10 to 40 in steps of 2.5)

Rule (A) gives us a good trading universe.

Rule (B) is looking for a stock with recent strength. Why 39 weeks? Originally I was trying to decide between 26 weeks and 52 weeks. I decided to split the difference.

Rule (C) is our sell off rule. Nothing fancy but I wanted to test a large range of values

Entry Rules

  • If we have a set up, then enter a limit order for the next day at (.5, 1.0, 1.5, 2.0)% below the close. Order good for one day only.
  • Only place enough orders so if they are all filled you are not in more than 7 positions
  • If have multiple set ups, then rank from high to low by the 100 day historical volatility.

We enter on additional intraday weakness.

Exit Rules

  • ConnorsRSI is greater than (50, 55, 65, 70)
  • Exit on next open

Simple mean reversion exit of waiting for the bounce. No stops. You may have also noticed there is no market timing rule. Will this get killed in 2008?

My Goals

When developing a strategy, I have metrics I am looking to beat. For an S&P500 strategy, I am looking for CAGR greater than 20% and a max drawdown less than 25%. I like these metrics because they are simple to understand and at the end of the day they are what I care about. You must decide what metrics and values you are looking for. The spreadsheet will have the full run results so you can filter it to look for what you like.

Results – Highest CAR

We have 1300 variations and here we have the top ten results sorted by CAR. We can see there are already several variations that satisfy my goals. I am surprised to see how well these variations did in 2008 and 2011. Even last year had good results. Sometimes simple is good. But I pick none of these top ones to trade. These likely got more lucky than other variations. These are also more likely to be on a parameter peak which I will explain in the future post.

Results – Lowest CAR

Looking at the lowest CAR, we can see single digit CAR but notice that the exposure is also very low.

Potential Future Tests

There are lots of other tests you can do to improve the results

  • Try different N-week high. Especially 26 & 52 week since those are common values
  • Try the limit entry to take a stock’s volatility into account
  • Add a minimum volatility for a stock to be a setup
  • Add that today’s close is under X% of the day’s range
  • Try a different ranking method

Spreadsheet

File the form below to get the spreadsheet with lots of additional information. See the results of all variations from the optimization run. This includes top drawdowns, trade statistics and more.

Final Thoughts

Even though I created ConnorsRSI, I am still surprised on how well it can work. Just a couple of rules have produced good numbers for trading the S&P500. In the next post, I will show how I go about taking those 1300 variations to the one I would consider trading.

Backtesting platform used: AmiBroker. Data provider:Norgate Data (referral link)

4/12/2017: Read the follow up posts, ConnorsRSI Strategy: Optimization Selection and ConnorsRSI Strategy: Sensitivity Analysis.

2/14/2018: Read Trading the Equity Curve on this strategy

Good quant trading,

Fill in for free spreadsheet:

spreadsheeticon

 

Click Here to Leave a Comment Below

Jack Brennan - March 15, 2017 Reply

Cesar,

Hoping you will publish a series of articles that uses only ETFs for an identical strategy. Thanks

Jack Brennan

MP - March 15, 2017 Reply

Can you direct me to a description of the ConnorsRSI?

AM - March 23, 2017 Reply

Hi Cesar, thank you for sharing your research. Is this survivourship bias free?
I cannot replicate your results with historical index constituents data (norgate).
However I think with a longer data horizon and in combination with a holding period stop this might be tradable from my point of view. With a limited number of stocks in the portfolio of course.

    Cesar Alvarez - March 23, 2017 Reply

    It is probably because I did not make one of my rules clear. I will email you and we can see if we can determine why we do not match.

    Cesar Alvarez - March 24, 2017 Reply

    After emailing we determined that the issue was I did not make this rule clear “The number of orders placed is seven minus the current number of open positions plus the number of positions exiting at the open. So if all order trigger, then you will be 100% invested. No going on margin.”

Mike A - March 29, 2017 Reply

Hey Cesar, good stuff as always.

If you get multiple hits on a stock that already has a position on will you add to the position and would it count as another position in your max of 7?

    Cesar Alvarez - March 29, 2017 Reply

    If I am already in the position and it sets up again, I will just ignore the signal. So not enter more into the position.

Neha - April 6, 2017 Reply

Greetings of the day sir.

I would like to thank you for all your informative posts. I dont think i have missed reading any since the time I have subscribed to your blog. Sir this week you were to do a followup of this blog. However, I received a mail on “Revisiting old research can spark new research or trading ideas”. Sir I thank you for the same, but I am looking forward for the remaining part of this blog too. I am extremely sorry if I appear demanding; all I am is excited and curious since your posts are so interesting.

Thanks,
Neha

Hardik Narendra Upadhyay - April 23, 2017 Reply

Hi Cezar,

In the above entry rules, how does Amibroker captures the signals when you have more setups than 7 ?. Does it first check how many limit orders are trigerred and then rank it in terms of HV? If that so, in real trading you are not going to know which setups will be filled next day. Or is it that when you have more than 7 setupts, you put orders in terms of highest HV ? I have the same confusion about the positionscore in terms of RSI(2).

It will be highly appreciated if you can shed some light here.

Thanks,
Hardik Upadhyay.

Tatiana - May 8, 2017 Reply

Hi Cesar,
Thank you for sharing the research. I am following your blog. If no trouble, could you please include trade list in the spreadsheet next time. I believe trade list is the most helpful trying to match a strategy report.

    Cesar Alvarez - May 8, 2017 Reply

    I do not provide trade lists. Because of different data providers it would just cause more problems than help. You are welcome to replicate my results and if you have questions to contact me directly.

Gary - August 22, 2018 Reply

Have you tried this strategy with options and are there any special considerations compared to trading something like the SPY? I read the Guidebook from Connors Research on trading the SPY with CRSI and curious if you have tried it out?

    Cesar Alvarez - August 22, 2018 Reply

    I don’t trade options so I really cannot comment on this.

marty - June 26, 2020 Reply

Cesar,

Is there any way to improve this strategy in terms of win rate?

    Cesar Alvarez - June 29, 2020 Reply

    That is a typical win rate for a mean reversion strategy. I would try different exits. Maybe shorter ones?

Chris Blackmon - November 3, 2022 Reply

Hi Cesar.

I’m trying to reproduce this in Amibroker and I’m close, but my results are still a little off. I have two questions.

Is this how you check for days since a 39 week high?

TimeFrameSet(inWeekly) ;
wkHi = HHV(C, 39) ;
TimeFrameRestore() ;

bsHi = BarIndex()-ValueWhen(TimeFrameExpand(wkHi, inWeekly)==C,BarIndex()) ;

In the custom backtester section, do you iterate through the exit signals and decrement the open position count so that the slots of any positions closing at the open today are available for new limit orders today.

For example, at the close yesterday I had 7 open positions (maximum open positions = 7) and 2 of them are being closed at the open today. Do you enter 2 limit orders today or simply not fill those open slots until the next trading day?

I’ve learned a ton from reading your blog. Thanks for sharing!

Chris

    Cesar Alvarez - November 3, 2022 Reply

    This is how I do the 39 week high
    C == HHV(C,39*5)

    Yes, if I exit the 2 positions today, I place 2 limit orders for the day.

Leave a Reply: