Join today
Strategies / Mean reversion / Cumulative RSI Long and Short

Cumulative RSI Long and Short

The system adds the last two RSI(2) readings and trades pullbacks inside the trend. It buys when that sum drops below 35 above the 100 period SMA, and sells short when it tops 175 below the 110 period SMA. Longs can add up to 4 contracts.

Mean reversionLong & shortSwingNasdaq 100Daily
1.64Profit factor
6,799Net profit EUR
58.79%Win rate
461Trades
-2,071Max drawdown
14.75Avg trade

Best run of 10. Nasdaq 100, Daily, spread 3, from run pf:2026-09-16-NAS100-D.tsv:1.

Entry rules, long

  1. Close is above the 100-period SMA
  2. Members only
  3. Fewer than 4 long contracts are open

Entry rules, short

  1. No short is open
  2. Members only
  3. The sum of the last two RSI(2) readings is above 175

Exit rules

  1. Members only
  2. Cover a short when cumulative RSI falls below 120
  3. Trailing stop 25 points (long) or 15 points (short) behind the best close
  4. Channel stop at the previous bar's 40-bar low (long) or 30-bar high (short)

Test conditions

PeriodUp to 2026-09-16
InstrumentNasdaq 100, Daily
Spread3 points
Contracts1
Starting capital1,000,000
CostsSpread only. Commissions and overnight financing are not included.
BarsUp to 200,000 bars, fewer where the instrument has less history
Last tested2026-09-16

Parameters

positionSize
Contracts per trade
1
rsiPeriod
RSI length and number of readings summed
2
longTrendPeriod
Longs only above this average
100
shortTrendPeriod
Shorts only below this average
110
maxLongPositions
Cap on open long contracts
4
longEntryLevel
Buy below this cumulative RSI
35
longExitLevel
Sell above this cumulative RSI
65
shortEntryLevel
Short above this cumulative RSI
175
shortExitLevel
Cover below this cumulative RSI
120
trailLongPoints
Trailing distance for longs
25
trailShortPoints
Trailing distance for shorts
15
longChannelPeriod
Channel stop length for longs
40
shortChannelPeriod
Channel stop length for shorts
30

Every run

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
Nasdaq 100Best runDaily1.64 46158.796,799 EUR-2,071
S&P 500Daily1.58 66454.372,288 EUR-439
Nikkei 225Daily1.54 48268.0522,595 USD-7,286
USD/JPYDaily1.43 49869.68852,470 JPY-171,500
US Crude OilDaily1.32 47463.507,134 EUR-2,923
EUR/USD4 hours1.22 1,80963.5253,383 USD-8,902
FTSE 100Daily1.22 48363.562,507 EUR-1,189
GBP/USDDaily1.20 55470.044,989 USD-3,411
EUR/USDDaily1.17 51463.8129,021 USD-16,990
USD/JPY1 hour1.09 5,38960.98324,510 JPY-87,520

Charts

Results by run

Profit factor by run

Above 1.0 made money, below 1.0 lost money.

0.00.51.01.52.01.0 = break-evenNasdaq 100 · Daily1.64S&P 500 · Daily1.58Nikkei 225 · Daily1.54USD/JPY · Daily1.43US Crude Oil · Daily1.32EUR/USD · 4 hours1.22FTSE 100 · Daily1.22GBP/USD · Daily1.20EUR/USD · Daily1.17USD/JPY · 1 hour1.09

Net profit against max drawdown

Net profitMax drawdown
0-200K-100K500K1.0MUSD/JPY · DailyUSD/JPY · 1 hourEUR/USD · 4 hoursEUR/USD · DailyNikkei 225 · DailyUS Crude Oil · DailyNasdaq 100 · DailyGBP/USD · DailyFTSE 100 · DailyS&P 500 · Daily

The code

ProBuilder, rewritten to house standard

Every file in the library uses the same header, the same section order and the same variable names. The numbers above were produced by the original version before the rewrite, and the rewrite has not yet been compiled in ProRealTime.

// ============================================================
// Cumulative RSI Long and Short
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Mean reversion
// Direction: Long & short
// Timeframe tested: Daily
// ============================================================

// --- Settings ---
DEFPARAM CumulateOrders = false
DEFPARAM PreloadBars = 1000

// --- Parameters ---
positionSize = 1            // contracts per trade
rsiPeriod = 2               // RSI length, also the number of readings summed
longTrendPeriod = 100       // longs only above this average
shortTrendPeriod = 110      // shorts only below this average
maxLongPositions = 4        // cap on open long contracts
longEntryLevel = 35         // buy when cumulative RSI is below this
longExitLevel = 65          // sell when cumulative RSI is above this
shortEntryLevel = 175       // short when cumulative RSI is above this
shortExitLevel = 120        // cover when cumulative RSI is below this
trailLongPoints = 25        // trailing distance for longs
trailShortPoints = 15       // trailing distance for shorts
longChannelPeriod = 40      // channel stop length for longs
shortChannelPeriod = 30     // channel stop length for shorts

// --- Indicators ---
cumulativeRsi = Summation[rsiPeriod](RSI[rsiPeriod](close))
longTrendMA = Average[longTrendPeriod](close)
shortTrendMA = Average[shortTrendPeriod](close)
belowLongCap = CountOfLongShares < maxLongPositions

71 more lines: the entry and exit rules.

Read this first

Known weaknesses

  • Longs pyramid up to 4 contracts, so the real exposure can be four times the base position size.
  • The trailing stop is set in fixed points (25 long, 15 short), which means very different things on Nasdaq 100 than on EUR/USD.
  • Edges are modest on several markets. USD/JPY 1 hour reached a profit factor of only 1.09 over 5389 trades, and EUR/USD Daily had 1.17 with a 16,990 USD drawdown.

Indicators used

RSISMADonchian Channel

How to load it

  1. Copy the code with the copy button above the code block.
  2. In ProRealTime, open a chart of the instrument and timeframe you want to test, then open ProOrder > New trading system and choose "Create with programming".
  3. Paste the code, give the system a name and save it.
  4. Click "Backtest", set your own spread and position size, and run it before you consider trading it live.

Questions

About this strategy

Is it ready for ProOrder?

Yes, it runs as an automated ProOrder system with signal exits, a trailing stop and a channel stop.

How did it do across markets?

All nine market tests had a profit factor above 1, from 1.09 on USD/JPY 1 hour up to 1.58 on S&P 500 Daily. The best run was Nasdaq 100 Daily at 1.64.

What is the risk per contract?

On Nasdaq 100 Daily the worst drawdown was 2,070.6 EUR with a base size of 1 contract. Because longs can stack to 4 contracts, allow extra room.

Why daily bars?

RSI(2) pullbacks inside a longer trend are a daily chart idea. Most of the tested rows are daily, and EUR/USD 4 hours was the only intraday test besides USD/JPY 1 hour.

Related

Strategies like this one

Bollinger Squeeze

Uses the same indicator.

14.30 PF · 86 trades

Negated Hammer

Best run on the same market, Nasdaq 100.

3.20 PF · 372 trades

Range Breakout Pending

A similar profit factor.

1.64 PF · 808 trades

See how RSI pullback systems are combined in a live portfolio. Join the ProRealAlgos waitlist.

Copy trading on US indices is available to ProRealAlgos members as spots open.

Past backtest results do not guarantee future results. This is not financial advice. Curated and maintained by ProRealAlgos. ProRealTime™ is a trademark of ProRealTime SAS. prorealalgos.comStatsDocs