This Simple Indicator Makes Money Again and Again

Here we are 3 months into 2019 and I've not updated one of the most popular articles. That would be articles about Connors' 2-period RSI trading model. This is a very popular trading method by Larry Connors and Cesar Alvarez. We all know there are no magic indicators but there is an indicator that certainly acted like magic over several decades. What indicator is it? Our reliable RSI indicator.

In past articles, I've looked at this trading model on the S&P cash market. Today, I'm going apply it to the S&P futures.

Starting around 2018 the standard 2-period trading model as defined in the book, "Short Term Trading Strategies That Work", has been in a drawdown. During 2011 the market experienced a sudden and sustained drop which put the trading model into loss. Recall, the trading model has no stops. Since this drop the model has been slowly recovering and made new equity highs. Then in 2018 we entered another drawdown. Below is an equity graph depicting the trading model's equity curve trading the S&P futures (@ES) index from 2000. 


Baseline

Net Profit

$7,887

Profit Factor

1.30

Trades

60

Percent Profitable

76%

Ave. Trade Net Profit

$131.46

Return on Capital

7.89%

Annual Rate of Return

.041

The trading model as originally proposed by Larry Connors is very simple and consist of long-only trades. As a reminder, the rules are as follows:

  • Price must be above its 200-day moving average.
  • Buy on close when cumulative RSI(2) is below 5.
  • Exit when price closes above the 5-day moving average.

All the tests within this article are going to use the following assumptions:

  • Starting Equity: $100,000.
  • 1 Contract per trade
  • There are no stops.
  • The P&L of each trade is not reinvested.
  • Commissions & Slippage are not accounted for.

Below is the annual performance of this trading model over the past few years.

Modified Trading Model

Back in the year 2013, I explored the robustness of the trading parameters used by the 2-period RSI trading model. That article can be found here. Within that article a slightly modified version of the original trading rules was proposed. In short, they doubled the value of the RSI threshold value (from 5 to 10) and doubled the look-back period for the simple moving average exit rule (from 5 to 10). Finally, a stop value of $2,000 was added. I picked this value because it represents our risk value when scaling the number of shares to trade. Notice we are only risking 2% of our $100,000 account on each trade. Here is a summary of the rule changes.

  • Use a value of 10 as the RSI threshold.
  • Use a 10-period simple moving average as our exit signal.
  • Use a $2,000 hard stop.

Below is the equity curve.

Big improvement! Below is a table showing the difference between the original Connors' rules and the modified Connors' rules.


Baseline

Modified Rules

Net Profit

$7,887

$47,525

Profit Factor

1.30

1.91

Trades

60

120

Percent Profitable

76%

77%

Ave. Trade Net Profit

$131.46

$352.03

Return on Capital

7.89%

47.53%

Annual Rate of Return

.041%

2.11%

Our increase in net profit comes at the cost of more trades which is due to the fact of lowering the stand on what we consider a viable pullback. By increasing the RSI threshold from 5 to 10 more setups qualify as a valid entry, we take more trades. But we also increased our look-back period for our exit calculation. Thus, we should be holding some of the trades a little longer in an attempt to make more profit.

Conclusion

As of recently it's in a strong drawdown. Does this mean the edge is lost. Hard to say. However, given the RSI indicator has been a robust indicator at locating high probability entry points within the major market indices for so long, I think it may have some life left in it.

You can modify the trigger threshold and holding period over a large range of values and still produce positive trading results. I hope this article will give you lots of ideas to explore on your own. Another idea with regards to testing parameters is to independently optimize the parameters over the "portfolio" of markets. 

About the Author Jeff Swanson

Jeff is the founder of EasyLanguage Mastery - a website and mission to empowering the EasyLanguage trader with the proper knowledge and tools to become a profitable trader. Join our EasyLanguage FaceBook group to interact with other EasyLanguage traders! Click the FaceBook icon to join.

follow me on:
  • Loser says:

    Jeff,

    Thanks for the update. However, with all the modifications, the annual rate of return is still less than 3%. Hardly worth our time to get rate of inflation returns.

    • Jeff Swanson says:

      Thanks for writing Loser but remember, returns on a trading system are determined by your position sizing model (risk), your starting equity and how you reinvest profits. The percentage given in the article is not what you would get trading this system. You could easily generate far more returns.

      • Zilch Bupkis says:

        The article’s figures based upon 2% risk per trade. Many textbooks on trading argue that it’s about right amount of risk. Suppose you decide to throw caution out of the window and risk 5 times that. What do you get in return? 2.56% * 5 = 12.8% CAGR. Call me greedy, but it’s not my idea of a “Massively Profitable System”!

        • Jeff Swanson says:

          Remember, this strategy code is backtested on a instrument you can’t even trade. This is not a trading system you should trade as-is. I know I wouldn’t. Consider this article a market study demonstrating a potential market edge which could be developed into a trading system that one could trade with real money. The first step would be to pick your market. Maybe the ETF (SPY) or futures (ES). Then you might wish to test other filters or techniques including testing stops. Then you can apply a position sizing scheme. In other words, a 2% return on this potential market edge could very well lead to something far more profitable.

          • Zilch Bupkis says:

            Yeah, that’s your typical excuse for lame performance on this blog. Would you please finally live up to your words and show that magical portfolio? After all, a system without intended market or instruments is just a concept – and you can’t eat concepts.

            C’mon, get out of the bush and show us some real money, not those puny 2% CAGRs you are so fond of! Shoot out the lights with your backtest and I’ll be the first one to applaud you!

          • Jeff Swanson says:

            I’ll be honest. I’ve created several trading systems based upon ideas on this blog. In fact, that’s how I started this blog. During the development of my trading systems I would perform market research and post what I learned. The intent for this blog is to provide ideas and concepts that you can use to build trading systems. Not to spoon feed you finalized trading systems. If you can’t find ideas that are useful for you, you’re free to look elsewhere. The 2-period RSI is the basis for one system I do trade on the futures market. That system was developed in 2008 and I still trade it today with very little modification from it’s original form. I have no magical portfolio. Never claimed to have one. Building systems is hard work and clearly, it’s an endeavor not for everyone.

          • Zilch Bupkis says:

            Shouldn’t a prototype system display at least some half-decent performance? That’s what you argued for as a first-blush acceptance criteria in your own brochure
            on system development.

            Still, you keep serving up half-dead creatures.

            Heck, this one is handily beaten by bond funds, and they make new highs almost every year, too. And remember, your initial promise was for “Massively Profitable
            System” – the title you removed?

            I’ve followed you far too long – my fault, of course…

          • Adrian says:

            You need t move on Zilch. You clearly don’t understand the information that is being shown to you, or how it can be applied as part of a larger portfolio mix of trading markets and systems. Stop attacking Jeff, who supplies you his VALUABLE insights for FREE!

  • matt haines says:

    Hi! Quick question: are you calculating the RSI at the close of one day, and buying at the close of the next? Or are you somehow calculating the 2-day RSI before the close actually happens (or rather, forecasting it)? Otherwise you can’t actually know the RSI value until it’s too late to trade.

    Thanks!

    P.S. your CAPTCHA system times out very quickly, which caused me to lose my original comment. FYI.

    • Jeff Swanson says:

      Sorry about the CAPTCHA issue. You make a good point. The code is available at the bottom of the article and as it is written, buys at the close of the day. This is an artifact of my personal trading style. That is, since I trade futures (ES) I can open a position after the close of the regular session. If one was to trade the ETF (SPY) you would want to modify the code to enter on the open of the next day. Another option requires clever programming and using two timeframes to calculate the RSI minutes before the close and placing the trade. For example, you would setup a 2-minute chart to take the trades and at bar 14:56 you would calculate the RSI as if that tick was the “close” for the day. If a trade is triggered it would place an order at the open of bar 14:58. This can be done but it’s a lot more work.

      • matt haines says:

        Thanks Jeff. I recall Howard Bandy had a way for calculating RSI with AmiBroker before the close. Or to come up with a target closing price that would be the minimum it could be to meet the RSI threshold. So it *is* possible…the results just become slightly fuzzier as a result. Thanks for your follow up.

      • Mark says:

        We e-mailed about the CAPTCHA issue a few months ago, Jeff. I’m still having that problem as well.

  • Loser says:

    Ok, let’s look at the numbers – some you have and some you haven’t.

    Same setup, $100,000 account.
    Going from Feb ’93 to today.
    Trading SPY Daily.
    Looking at risking $2,000(2%) and $10,000 ( 10%).

    This is what I got:

    $2,000 $10,000

    Tot Prft. $90,937 $157,156
    Prof Fact 2.16 4.39
    #Trades 180 157
    % Prof. 76% 86%
    Avg Trd NP $505 $1,000
    Return on Cap 90% 157%
    Annual ROR 2.89% 4.22%

    This what was not included:

    Buy & Hold 344.7% 343%
    Avg. Mnthly $ 622 $ 1,062
    Max DD $6,954 $10,750

    For risking $2,000, very similar to what you had in your article. With regard to risking 10%/trade, although the system gives a nice smooth upward sloping equity curve, it isn’t steep enough. To risk 10%/trade on a $100k account and only get $1,000/month and less than half of B&H is not very encouraging.

    So, how do we improve this pig? Other than Jeff, any suggestions?

    • matt haines says:

      Loser:

      I don’t understand your B&H numbers. Are you comparing an all-in $100k position size for B&H vs. the $2k/$10k position size of the system in question? You should compare equal position sizes instead.

      Also, built into B&H is compounding (both upward and downward), so the system’s results should also be compounded for an appropriate comparison.

      And finally, I don’t see anything about sharpe ratios or CAR/MaxDD ratios. But I can tell by the graph of this system that the ride would be a lot less painful than B&H. More profit means nothing if you start at the the top of the market and then panic when it drops 60%. Shorter, more frequent trades – when compounded – can easily beat B&H.

      • Loser says:

        Matt,

        With respect to the Sharpe ratio, I am not certain that it was meant to be used on this type of trading system. With that said, here are the Sharpe ratios:

        $2,000……0.27

        $10,000…..0.38

        Not really worth mentioning.

      • Loser says:

        The B&H is what is reported in the TS Performance report. Doesn’t make a difference how large the investment is, it buys on first bar and sells on last bar.

    • Zilch Bupkis says:

      So it doesn’t even come close to 12% CAGR I estimated! Well, at least Jeff made one improvement – changed article’s title to something more modest:-)

      On a serious note, try to use the system on a basket of stocks thus increasing your exposure. Also, stocks are more volatile than ETFs and mean-reversion thrives on that.

      • Jeff Swanson says:

        Zilch you’ll be happy to note I did not change the name of the article. The name change was actually chosen by an algorithm. I just installed the software this week and it will pick the “best” headline based upon reader engagement. I created about 6 different headlines ranging from boring to sensational. I then allowed the algorithm to do its thing. So, here we have an article which deals with a simple trading algorithm and the title of the article is being picked by an algorithm.

        • Zilch Bupkis says:

          Wow, I didn’t realize that. What a clever way to boost productivity! Now you may have a new entry in you blog every day (15 minutes, even)…

    • Loser says:

      Just to be clear, I am a BIG fan of Jeff’s blog. He has been most generous with his postings and is much appreciated by this reader. Thanks Jeff!

      • Zilch Bupkis says:

        Really? Then tell me in all honesty if you have found anything here worth trading. What system or idea, for I couldn’t find any…

        • Mark says:

          Based on your comments, Zilch, you don’t get it. Do more study on what it takes to convert a strategy to a system. Do a LOT more study on position sizing. Even if you are going to only risk 2% of your account per trade then these are good system statistics to pursue.

      • Jeff Swanson says:

        You’re welcome Loser. Glad to hear you’re getting some value from it.

        • Zilch Bupkis says:

          Apparently, Loser has problem finding what kind of value he’s getting. Maybe, it’s what not to try?

          • Loser says:

            Zilch,

            Been busy with some family issues.

            The whole idea of this blog is to put out a kernel for us to use to refine and develop our own trading system and to get the rest of us to perhaps contribute.

            One suggestion for improving said system, switch to a leveraged instrument such as the ES. May have to make some adjustments to the position sizing routine.

            Bottomline Zilch, don’t look a gift horse in the mouth.

  • Loser says:

    Reformat of data from previous post:

    Risk/Trade $2,000

    Tot Prft. $90,937
    Prof Fact 2.16
    #Trades 180
    % Prof. 76%
    Avg Trd Net Profit $505
    Return on Cap 90%
    Annual ROR 2.89%

    Buy & Hold 344.7%
    Avg. Mnthly $ 622
    Max DD $6,954

    Risk/Trade $10,000

    Tot Prft. $157,156
    Prof Fact 4.39
    #Trades 157
    % Prof. 86%
    Avg Trd NP $1,000
    Return on Cap 157%
    Annual ROR 4.22%

    Buy & Hold 343%
    Avg. Mnthly $ 1,062
    Max DD $10,750

  • Marco says:

    I think is one of the most reliable systems out there… To boost returns just use CFD’s or Emini. The odds are great…

    https://nightlypatterns.wordpress.com

  • Boole says:

    What is the justification for using SPX in backtests? Isn’t SPY better since it’s tradable?

  • Boole says:

    Another question: is the annual rate of return the CAGR?

  • Boole says:

    Sorry for one more question: what is in the code:

    vShares = _CE_Normalize_Units_vs_Volatility( AccountSize$, RiskPerTrade$, false, Close, 10, 2, false );
    If ( vShares < 1 ) Then vShares = 1;

    Can you explain the formula used? Why doing this anyway?

  • Boole says:

    Oops! Another question came up. In EL code you are using normal RSI but Connors used cumulative. Is there any difference?

  • Boole says:

    From your position size formula It seems that the number of shares is equal to

    account size/ (2 x ATR(10))

    Is this correct?

    But you say:

    “The idea is to risk the same dollar amount per trade”

    But this is not what is done. The risk is 1% with varying stop-loss of 2 x ATR(10). Think about it.

  • Mark says:

    I wouldn’t call this a robust system based on your study of the six markets shown above. Those are not uncorrelated markets.

  • Joe says:

    In most of the testing I’ve done with the RSI(2) system I get better results when using RSI level 70 or 90 as exit instead of using exit at MA(5) like L. Connors.
    And also I get better results not using MA(200) as a filter. Yes, drawdows will be bigger, but trading a plain RSI(2) system is better in my opinion, most of the time.

    I use Amibroker for testing systems.

    • Jeff Swanson says:

      Thanks for the ideas. With a MA(200) filter you might want to try changing the parameters. That is, require the pullback to be deeper since within a bear market. I’ve had some success with that.

  • TrendFirst says:

    Hi Jeff

    Thanks for the article, I found it helpful. I have run thru many optimizations and a few little tweaks to the code. I find the results to be quite interesting and plan to continue to pursue more ideas to continue to improve the results.

    Here’s my issue. I’m new to this. This system works on a daily chart, and trades maybe a dozen times a year. After trying multiple tweaks and what feels like a zillion optimizations, I get excited about a particular variation of this system.

    OK, let’s go, time to put it in place! Get Ready, Set….WAIT. I gotta admit, I’m impatient. I need faster feedback. I figure I would have to paper trade this a couple of years to get enough real-time trades to start feeling comfortable.

    Anyone have any thoughts on this? I have tried this on smaller time frames and even tick charts. But as I’ve seen mentioned here before, the smaller time frames seem to require more expertise and complexity.

    Thanks

  • Alex T says:

    Hi Jeff from France,

    Thanks for your great work. I have a questions regarding the two timeframes RSI (2) system you sometimes refer to and which is also the principle of aurora strategy.

    It says signals are generated on the daily timeframe whereas trades are executed on the 5 minutes time frame.

    1. Does it mean the daily timeframe is used as a filter and the very same strategy (RSI (2)) is applied to the lower timeframe (5 min)

    2. Have you ever tried with 1 hour timeframe for signals and 5 minutes TF for executions?

    Again thanks for your articles!
    Alex

    • Jeff Swanson says:

      You’re welcome Alex. In regards to your questions…

      1) In general that’s a good way to think of it. For Aurora the higher time-frame actually functions as what I call a “Trade Setup” which means the market conditions favorable for a trade to take place. The lower time-frame is used to pin-point an entry and manage the trade. This is often called a “Trigger”. The lower time-frame does not use the RSI(2) but other methods to enter a trade.

      2) I’ve not looked into this. But I’m sure it’s worth testing.

  • larry von says:

    Loser reformated data as below, so Loser what did you do different, as in reformat to get these results:

    Loser says

    Reformat of data from previous post:

    Risk/Trade $2,000

    Tot Prft. $90,937
    Prof Fact 2.16
    #Trades 180
    % Prof. 76%
    Avg Trd Net Profit $505
    Return on Cap 90%
    Annual ROR 2.89%

    Buy & Hold 344.7%
    Avg. Mnthly $ 622
    Max DD $6,954

    Risk/Trade $10,000

    Tot Prft. $157,156
    Prof Fact 4.39
    #Trades 157
    % Prof. 86%
    Avg Trd NP $1,000
    Return on Cap 157%
    Annual ROR 4.22%

    Buy & Hold 343%
    Avg. Mnthly $ 1,062
    Max DD $10,750

  • Javier says:

    I have written to the email during the last weeks, but I did not receive an answer. I do not know if you have a problem with the mail or maybe you have it. Tell me if you answered me here.

  • Andy says:

    Please delete me previous comment, it was not clear, so I’ll reword:

    Jeff, another great article. I use the reclaim of sma10 (actually ema10) as an entry signal. Therefore I wonder what your “Modified Rules” equity curve would look like if, instead of exiting on a reclaim of sma10, you continued to hold and exited on the first close below sma10.

  • >