SPY RSI Stochastics Crossover Reversal Trend Strategy

Author: ChaoZhang, Date: 2024-02-23 14:38:49



The SPY RSI Stochastics Crossover Reversal Trend Strategy is a quantitative trading strategy that uses RSI indicator crossovers between fast and slow lines to determine price reversals. The strategy combines slow, fast and MA lines and generates buy and sell signals when certain conditions are met, in order to capture significant price reversal opportunities.

Strategy Logic

The core logic of this strategy is based on RSI fast and slow line crossovers. RSI usually reverses at overbought and oversold zones, so by determining the golden cross and death cross situations between the fast and slow RSI lines, we can identify possible price reversal points in advance. Specifically, the strategy mainly relies on the following indicators and conditions:

  1. Slow RSI Line: 64-period RSI line
  2. Fast RSI Line: 9-period RSI line
  3. RSI MA Line: 3-period simple moving average of fast RSI line
  4. RSI Overbought Threshold: parameter set to 83
  5. RSI Oversold Threshold: parameter set to 25
  6. RSI Neutral Zone: between 39 and 61
  7. Trading Hours: Monday to Friday 9:00am to next day 9:00am

When fast RSI crosses over slow RSI (golden cross) and fast line crosses over MA line, a buy signal is generated. When fast RSI crosses below slow RSI (death cross) and fast line crosses below MA line, a sell signal is generated.

In addition, the following logic is configured to filter out some noise trades:

  1. No trading signals generated within neutral RSI zone
  2. Only trade between Monday to Friday 9:00am to next day 9:00am

There are two exit conditions after entering:

  1. Close position when fast RSI enters the opposite region (overbought or oversold)
  2. Close position when reverse RSI crossover signal occurs

Advantage Analysis

The biggest advantage of SPY RSI Stochastics Crossover Reversal Trend Strategy is that it can capture the trend early before significant price reversals occur. Through fast and slow RSI line crossovers, it can issue trading signals ahead of time and create opportunities to enter the market. In addition, the strategy has the following advantages:

  1. Clear signal generation rules, easy to understand and track
  2. Dual filters designed to reduce noise signals
  3. Flexible overbought/oversold zone settings suit different market environments
  4. Combines both trend following and reversal capturing capabilities

In summary, by combining trend following and value reversal analysis, the strategy can capture price reversal timing to some extent, and has strong practicality.

Risk Analysis

Although SPY RSI Stochastics Crossover Reversal Trend Strategy has certain advantages, it also has the following main risks:

  1. Unable to completely avoid risks from noise trades despite dual filter design
  2. RSI crossovers not perfect at predicting actual reversal points, some difficulty exists
  3. Needs reasonable parameter settings, otherwise over-frequent or sparse trades may occur
  4. Black swan events leading to false breakouts cannot be fully avoided

To address the above risks, the strategy can be optimized and improved in the following aspects:

  1. Use machine learning algorithms to train optimal parameters and reduce noise signals
  2. Incorporate other technical indicators to improve reliability of crossover signals
  3. Add stop loss mechanisms to control per trade risk exposure
  4. Optimize adaptive updating of parameters to improve adaptability

Optimization Directions

The SPY RSI Stochastics Crossover Reversal Trend Strategy can mainly be optimized in the following areas:

  1. Parameter Optimization: Find optimal parameter combinations systematically via methods like genetic algorithms, grid search etc.
  2. Feature Engineering: Incorporate more price influencing features like volume changes, volatility etc. to aid decisions
  3. Machine Learning: Train crossover criteria with machine learning algorithms to improve accuracy
  4. Stop Loss Optimization: Introduce trailing stops, time stops etc. to control risks
  5. Adaptive Updating: Enable key parameters to adjust adaptively based on real-time market conditions

Such optimizations can make the strategy parameters more intelligent, signals more reliable, and also adjust rules according to market changes, thereby greatly improving the strategy’s profit stability.


The SPY RSI Stochastics Crossover Reversal Trend Strategy designed a relatively simple and clear quantitative trading strategy system based on judging RSI fast and slow line crossovers. Combining both trend following and reversal trading features, it can capture price reversal timing to some degree. But the strategy also has some inherent flaws, requiring parameter, feature and model optimization to control risks and improve signal quality. With continuous optimizations, it can become a stable profitable quantitative system.

start: 2024-01-23 00:00:00
end: 2024-02-22 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]

strategy("SPY Auto RSI Stochastics", pyramiding = 3)

// Input parameters
slowRSILength = input(64, title="SLOW RSI Length")
fastRSILength = input(9, title="FAST RSI Length")
smaRSILength = input(3, title="RSI SMA Length")
RSIUpperThreshold = input(83, title="RSI Upper")
RSILowerThreshold = input(25, title="RSI Lower")
RSIUpperDeadzone = input(61, title='RSI Upper Deadzone')
RSILowerDeadzone = input(39, title='RSI Lower Deadzone')
blockedDays = (dayofweek(time) == 1 or dayofweek(time) == 7)
sessionMarket = input("0900-0900", title="Session Start")
allowedTimes() => time(timeframe = timeframe.period, session = sessionMarket, timezone = "GMT+1")
isvalidTradeTime =true

// RSI and ATR
slowRSI = ta.rsi(close, slowRSILength)
fastRSI = ta.rsi(close, fastRSILength)
smaRSI = ta.sma(fastRSI, smaRSILength)
rsi = fastRSI

// Entry condition
RSIUptrend() =>  ta.crossover(fastRSI, slowRSI) and ta.crossover(fastRSI, smaRSI)
RSIDowntrend() =>  ta.crossunder(fastRSI, slowRSI) and ta.crossunder(fastRSI, smaRSI)

isRSIDeadzone() =>
    rsi < RSIUpperDeadzone and rsi > RSILowerDeadzone

isBullishEngulfing() =>
    close > high[1]

isBearishEngulfing() =>
    close < low[1] 

// Declare variables
var float initialSLLong = na
var float initialTPLong = na
var float initialSLShort = na
var float initialTPShort = na
//var bool inATrade = false

entryConditionLong = RSIUptrend() and not isRSIDeadzone() and isvalidTradeTime
entryConditionShort = RSIDowntrend() and not isRSIDeadzone() and isvalidTradeTime

exitConditionLong = entryConditionShort or fastRSI > RSIUpperThreshold
exitConditionShort = entryConditionLong or fastRSI < RSILowerThreshold

if (entryConditionLong)
    strategy.entry(id = "Long", direction = strategy.long, alert_message = 'LONG! beep boop, all aboard the long train')

if (entryConditionShort)
    strategy.entry(id = "Short", direction = strategy.short, alert_message = 'Short! beep boop, all aboard the short train')

if (exitConditionLong)
    strategy.exit("Long", from_entry="Long", limit=close, alert_message = 'Stop Long, halt halt, take the profits and runnn')

if (exitConditionShort)
    strategy.exit("Short", from_entry="Short", limit=close, alert_message = 'Stop Short, halt halt, take the profits and runnn')

//plot(smaRSI, "RSI MA", color=color.red)
plot(slowRSI, "Slow RSI", color=color.green)
//plot(fastRSI, "Fast RSI", color=color.white)
plot(smaRSI, "SMA RSI", color=color.white)