The resource loading... loading...

Multi-MA Crossover with RSI Dynamic Trailing Stop Loss Quantitative Trading Strategy

Author: ChaoZhang, Date: 2024-11-29 16:10:35
Tags: MARSISMASLTS

img

Overview

This strategy is a quantitative trading system that combines Moving Average crossover with the Relative Strength Index (RSI), integrated with a trailing stop loss function. The strategy utilizes two moving averages - 9-period and 21-period - as primary trend indicators, coupled with RSI for trade signal confirmation, and implements dynamic trailing stops for profit protection and risk control. The strategy design comprehensively considers market trends, momentum, and risk management dimensions to form a complete trading system.

Strategy Principles

The core logic of the strategy is based on the following key elements:

  1. Trend Identification: Recognizes market trend changes through crossovers of fast (9-period) and slow (21-period) moving averages. Long signals are generated when the fast MA crosses above the slow MA with RSI above 55, while short signals occur when the fast MA crosses below with RSI below 45.
  2. Signal Confirmation: Uses RSI as a signal filter, enhancing trade signal reliability through RSI threshold settings.
  3. Risk Control: Employs a 1% trailing stop loss, dynamically adjusting stop positions to protect profits. Also includes RSI-based profit-taking conditions, closing long positions when RSI exceeds 80 and short positions when RSI falls below 22.
  4. Stop Loss Mechanism: Combines fixed and trailing stops, automatically closing positions when price breaches preset percentage levels from entry points or hits trailing stop levels.

Strategy Advantages

  1. Multi-dimensional Signal Verification: Improves trading signal accuracy through dual confirmation of MA crossover and RSI.
  2. Comprehensive Risk Management: Implements dynamic trailing stops for both profit protection and risk control.
  3. Flexible Entry Mechanism: Effectively captures market turning points by combining trend and momentum indicators.
  4. High Automation Level: Clear strategy logic facilitates automated trading implementation.
  5. Strong Adaptability: Can be adapted to different market environments through parameter adjustment.

Strategy Risks

  1. Sideways Market Risk: May generate frequent false breakout signals in range-bound markets.
  2. Slippage Risk: Potential slippage losses during trailing stop execution.
  3. Parameter Sensitivity: Strategy performance significantly affected by MA period and RSI threshold settings.
  4. Systemic Risk: Stop losses may not execute timely in extreme market conditions.

Strategy Optimization Directions

  1. Signal Enhancement: Consider incorporating volume indicators as additional confirmation conditions.
  2. Stop Loss Refinement: Implement volatility-based dynamic stop loss adjustment mechanisms.
  3. Position Management: Add dynamic position sizing system based on risk assessment.
  4. Market Adaptability: Include market environment recognition mechanism for different parameter settings in various market states.
  5. Signal Filtering: Add time filters to avoid trading during volatile market opening and closing periods.

Summary

This strategy constructs a trading system combining trend-following and momentum characteristics through classic technical analysis indicators. Its core strengths lie in multi-dimensional signal confirmation mechanisms and comprehensive risk management systems. Through continuous optimization and improvement, the strategy shows promise for maintaining stable performance across different market environments. Traders are advised to conduct thorough backtesting before live implementation and adjust parameters according to specific trading instrument characteristics.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("ojha's Intraday MA Crossover + RSI Strategy with Trailing Stop", overlay=true)

// Define Moving Averages
fastLength = 9
slowLength = 21
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)

// Define RSI
rsiPeriod = 14
rsiValue = ta.rsi(close, rsiPeriod)

// Define Conditions for Long and Short
longCondition = ta.crossover(fastMA, slowMA) and rsiValue > 55
shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue < 45

// Define the trailing stop distance (e.g., 1% trailing stop)
trailingStopPercent = 1.0

// Variables to store the entry candle high and low
var float longEntryLow = na
var float shortEntryHigh = na

// Variables for trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na

// Exit conditions
exitLongCondition = rsiValue > 80
exitShortCondition = rsiValue < 22

// Stop-loss conditions (price drops below long entry candle low * 1% or exceeds short entry candle high * 1%)
longStopLoss = longEntryLow > 0 and close < longEntryLow * 0.99
shortStopLoss = shortEntryHigh > 0 and close > shortEntryHigh * 1.01

// Execute Buy Order and store the entry candle low for long stop-loss
if (longCondition)
    strategy.entry("Long", strategy.long)
    longEntryLow := low  // Store the low of the candle where long entry happened
    longTrailingStop := close * (1 - trailingStopPercent / 100)  // Initialize trailing stop at entry

// Execute Sell Order and store the entry candle high for short stop-loss
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortEntryHigh := high  // Store the high of the candle where short entry happened
    shortTrailingStop := close * (1 + trailingStopPercent / 100)  // Initialize trailing stop at entry

// Update trailing stop for long position
if (strategy.opentrades > 0 and strategy.position_size > 0)
    longTrailingStop := math.max(longTrailingStop, close * (1 - trailingStopPercent / 100))  // Update trailing stop as price moves up

// Update trailing stop for short position
if (strategy.opentrades > 0 and strategy.position_size < 0)
    shortTrailingStop := math.min(shortTrailingStop, close * (1 + trailingStopPercent / 100))  // Update trailing stop as price moves down

// Exit Buy Position when RSI is above 80, Stop-Loss triggers, or trailing stop is hit
if (exitLongCondition or longStopLoss or close < longTrailingStop)
    strategy.close("Long")
    longEntryLow := na  // Reset the entry low after the long position is closed
    longTrailingStop := na  // Reset the trailing stop

// Exit Sell Position when RSI is below 22, Stop-Loss triggers, or trailing stop is hit
if (exitShortCondition or shortStopLoss or close > shortTrailingStop)
    strategy.close("Short")
    shortEntryHigh := na  // Reset the entry high after the short position is closed
    shortTrailingStop := na  // Reset the trailing stop

// Plot Moving Averages on the Chart
plot(fastMA, color=color.green, title="9-period MA")
plot(slowMA, color=color.red, title="21-period MA")

// Plot RSI on a separate panel
rsiPlot = plot(rsiValue, color=color.blue, title="RSI")
hline(50, "RSI 50", color=color.gray)
hline(80, "RSI 80", color=color.red)
hline(22, "RSI 22", color=color.green)

// Plot Trailing Stop for Visualization
plot(longTrailingStop, title="Long Trailing Stop", color=color.red, linewidth=1, style=plot.style_line)
plot(shortTrailingStop, title="Short Trailing Stop", color=color.green, linewidth=1, style=plot.style_line)


Related

More