Multi-Indicator Trend Following Dynamic Risk Management Strategy

Author: ChaoZhang, Date: 2024-04-03 17:34:42



This strategy employs multiple technical indicators, including the Relative Strength Index (RSI), Moving Average Convergence Divergence (MACD), Exponential Moving Averages (EMA), and Average True Range (ATR), combined with dynamic position sizing and stop-loss/take-profit mechanisms to create a comprehensive trend-following quantitative trading strategy. By analyzing price speed, direction, strength, and volatility, the strategy adapts to various market conditions to capture market trends and control risk.

Strategy Principles

  1. RSI measures the speed and magnitude of price movements, identifying overbought and oversold conditions, providing signals for trading.
  2. MACD analyzes the difference between fast and slow moving averages to determine changes in price momentum, direction, and strength, indicating trend turning points.
  3. Dual EMA crossovers confirm trend direction, with a bullish signal when the fast line crosses above the slow line and a bearish signal when the fast line crosses below the slow line.
  4. ATR measures market volatility and is used to dynamically adjust stop-loss and take-profit levels to adapt to different market states.
  5. Combining multiple conditions from RSI, MACD, and EMA, the strategy enters long positions when a bullish trend forms and short positions when a bearish trend forms.
  6. ATR serves as a reference for stop-loss, with dynamic profit targets set to maintain a constant risk-reward ratio for each trade.
  7. Position sizing for each trade is dynamically adjusted based on the strategy’s risk exposure and the asset’s volatility to maintain a constant risk exposure.

Strategy Advantages

  1. Trend Following: The strategy effectively captures medium to long-term market trends by confirming trends based on multiple technical indicators.
  2. Dynamic Risk Management: Stop-loss and take-profit levels are dynamically adjusted based on ATR, adapting to different volatility market states and controlling risk per trade.
  3. Position Sizing: Automatically optimizes position size for each trade considering account size and asset volatility, maintaining stable overall risk exposure.
  4. Adaptability: Strategy parameters can be flexibly adjusted to suit different markets, instruments, and investment styles.
  5. Strict Discipline: Trades are executed based on quantitative rules, eliminating the influence of subjective emotions and ensuring the strategy’s objectivity and consistency.

Strategy Risks

  1. Market Risk: The inherent uncertainty of financial markets, including the impact of economic, political, and unforeseen events, may cause the strategy’s performance to deviate from expectations.
  2. Parameter Risk: Inappropriate parameter settings may lead to overfitting the strategy to historical data, resulting in suboptimal performance in real-world applications.
  3. Slippage and Trading Costs: Slippage and transaction fees in real trading may affect the strategy’s net returns.
  4. Extreme Market Conditions: The strategy may face significant drawdowns in extreme market conditions (e.g., rapidly changing volatility environments, liquidity droughts).

Strategy Optimization Directions

  1. Parameter Optimization: Seek the optimal parameter combination by backtesting historical data to improve the strategy’s robustness and adaptability.
  2. Dynamic Long/Short Position Allocation: Dynamically adjust the proportion of long and short positions based on the strength and direction of market trends to better capture trending markets.
  3. Market Regime Detection: Incorporate volatility, correlation, and other indicators to identify market regimes and adopt corresponding strategy adjustments in different regimes.
  4. Integration with Fundamental Analysis: Consider macroeconomic and industry trends to guide the use and interpretation of technical indicators.
  5. Risk Control Optimization: In addition to dynamic stop-loss and take-profit, introduce advanced risk management techniques such as portfolio optimization and hedging tools.


By organically combining technical indicators such as RSI, MACD, and EMA, this strategy constructs a comprehensive trend-following trading system. The strategy employs dynamic position sizing and risk management to capture trend opportunities while controlling drawdown risk. The strategy is widely applicable and can be optimized and adjusted according to market characteristics and investment needs. However, in practical application, attention should be paid to market risks, parameter settings, trading costs, and other factors, with regular assessment and optimization of the strategy. Through prudent risk management and continuous optimization and improvement, this strategy has the potential to become a robust and efficient quantitative trading tool.

strategy("Enhanced Professional Strategy V6", shorttitle="EPS V6", overlay=true)

// Input parameters with tooltips for enhanced user understanding.
rsiPeriod =, title="RSI Period", tooltip="Period length for the Relative Strength Index. Standard setting is 14. Adjust to increase or decrease sensitivity.")
macdFastLength =, title="MACD Fast Length", tooltip="Length for the fast EMA in the MACD. Typical setting is 12. Adjust for faster signal response.")
macdSlowLength =, title="MACD Slow Length", tooltip="Length for the slow EMA in the MACD. Standard setting is 26. Adjust for slower signal stabilization.")
macdSmoothing =, title="MACD Smoothing", tooltip="Smoothing length for the MACD signal line. Commonly set to 9. Modifies signal line smoothness.")
atrLength =, title="ATR Length", tooltip="Period length for the Average True Range. Used to measure market volatility.")
riskRewardRatio = input.float(2.0, title="Risk/Reward Ratio", tooltip="Your target risk vs. reward ratio. A setting of 2.0 aims for profits twice the size of the risk.")
emaFastLength =, title="EMA Fast Length", tooltip="Period length for the fast Exponential Moving Average. Influences trend sensitivity.")
emaSlowLength =, title="EMA Slow Length", tooltip="Period length for the slow Exponential Moving Average. Determines long-term trend direction.")
trailStopMultiplier = input.float(3.0, title="Trailing Stop Multiplier", tooltip="Multiplier for ATR to set trailing stop levels. Adjusts stop loss sensitivity to volatility.")
riskPerTrade = input.float(1.0, title="Risk Per Trade (%)", tooltip="Percentage of equity risked per trade. Helps maintain consistent risk management.")
targetProfitRatio = input.float(2.0, title="Target Profit Ratio", tooltip="Multiplier for setting a profit target above the risk/reward ratio. For capturing extended gains.")
displayLines = input.bool(true, title="Display Stop/Target Lines", tooltip="Enable to show stop loss and target profit lines on the chart for visual reference.")

// Technical Indicator Calculations
rsi = ta.rsi(close, rsiPeriod)
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSmoothing)
atr = ta.atr(atrLength)
emaFast = ta.ema(close, emaFastLength)
emaSlow = ta.ema(close, emaSlowLength)

// Define trailing stop based on ATR
atrTrailStop = atr * trailStopMultiplier

// Entry Conditions for Long and Short Trades
longCondition = ta.crossover(macdLine, signalLine) and rsi < 70 and close > emaFast and emaFast > emaSlow
shortCondition = ta.crossunder(macdLine, signalLine) and rsi > 30 and close < emaFast and emaFast < emaSlow

// Dynamic Position Sizing Based on Risk Management
slPoints = atr * 2
riskAmount = strategy.equity * riskPerTrade / 100
qty = riskAmount / slPoints

// Strategy Execution with Entry and Exit Conditions
if (longCondition)
    strategy.entry("Long", strategy.long, qty=qty)
    strategy.exit("Exit Long", "Long", stop=close - atrTrailStop, limit=close + (atrTrailStop * riskRewardRatio))
    strategy.exit("Target Profit Long", "Long", limit=close + (atrTrailStop * riskRewardRatio * targetProfitRatio))

if (shortCondition)
    strategy.entry("Short", strategy.short, qty=qty)
    strategy.exit("Exit Short", "Short", stop=close + atrTrailStop, limit=close - (atrTrailStop * riskRewardRatio))
    strategy.exit("Target Profit Short", "Short", limit=close - (atrTrailStop * riskRewardRatio * targetProfitRatio))

// Visualization: EMA lines and Entry/Exit Shapes
plot(emaFast, "EMA Fast",
plot(emaSlow, "EMA Slow",
plotshape(series=longCondition and displayLines, style=shape.triangleup, location=location.belowbar,, size=size.small, title="Long Entry")
plotshape(series=shortCondition and displayLines, style=shape.triangledown, location=location.abovebar,, size=size.small, title="Short Entry")

// Educational Instructions & Tips
// Note: Use comments for static educational content within the script.
// Adjust the 'RSI Period' and 'MACD Lengths' to match the market's volatility.
// The 'Risk Management Settings' align the strategy with your risk tolerance and capital management plan.
// 'Visualization and Control Settings' customize the strategy's appearance on your chart.
// Experiment with 'ATR Lengths' and 'Multipliers' to optimize the strategy for different market conditions.
// Regularly review trade history and adjust 'Risk Per Trade' to manage drawdowns effectively.