This strategy is a quantitative trading approach that combines trend following with machine learning, aiming to capture market trends while reducing risk through dynamic stop losses and trend confirmation signals. The strategy utilizes short-term and long-term Simple Moving Averages (SMA) to identify potential trend directions, and uses the Relative Strength Index (RSI) as a proxy for machine learning confidence to confirm trading signals. Additionally, the strategy employs dynamic stop losses and trailing stops based on the Average True Range (ATR) to optimize risk management.
The Dynamic Trend Following Strategy with Machine Learning Enhanced Risk Management is a comprehensive quantitative trading approach that provides traders with a powerful tool by combining trend following, signal confirmation, and dynamic risk management. While the strategy has some potential risks, its performance and adaptability can be further improved through continuous optimization and enhancement. Future development should focus on introducing more advanced machine learning techniques, multi-dimensional analysis, and adaptive mechanisms to cope with ever-changing market environments.
/*backtest start: 2024-09-18 00:00:00 end: 2024-09-25 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Enhanced Trend Following with ML", overlay=true) // User Inputs shortLength = input.int(20, minval=1, title="Short Moving Average Length") longLength = input.int(50, minval=1, title="Long Moving Average Length") atrPeriod = input.int(14, title="ATR Period") stopLossMultiplier = input.float(2.0, title="Stop Loss Multiplier") mlConfidenceThreshold = input.float(0.5, title="ML Confidence Threshold") // Calculate Moving Averages shortMA = ta.sma(close, shortLength) longMA = ta.sma(close, longLength) // Plot Moving Averages plot(shortMA, title="Short MA", color=color.red) plot(longMA, title="Long MA", color=color.blue) // Trend Strength Indicator (using RSI as a proxy for ML confidence) mlSignal = math.round(ta.rsi(close, 14) / 100) // Conditions for entering trades longCondition = ta.crossover(shortMA, longMA) and mlSignal > mlConfidenceThreshold shortCondition = ta.crossunder(shortMA, longMA) and mlSignal < (1 - mlConfidenceThreshold) // ATR for dynamic stop loss atrValue = ta.atr(atrPeriod) stopLoss = atrValue * stopLossMultiplier // Trade Entry if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("SLLong", "Long", stop=strategy.position_avg_price - stopLoss) if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("SLShort", "Short", stop=strategy.position_avg_price + stopLoss) // Trade Management longCrossover = ta.crossover(shortMA, longMA) shortCrossunder = ta.crossunder(shortMA, longMA) if (strategy.position_size > 0) if (longCrossover) strategy.close("Long") if (strategy.position_size < 0) if (shortCrossunder) strategy.close("Short") // Trailing Stop for existing positions var float trailStopLong = strategy.position_avg_price var float trailStopShort = strategy.position_avg_price if (strategy.position_size > 0) trailStopLong := math.min(trailStopLong, close) strategy.exit("TrailLong", "Long", stop=trailStopLong) if (strategy.position_size < 0) trailStopShort := math.max(trailStopShort, close) strategy.exit("TrailShort", "Short", stop=trailStopShort) // Additional alert for trend changes alertcondition(longCrossover, title="Bullish Trend Change", message="Bullish trend change detected") alertcondition(shortCrossunder, title="Bearish Trend Change", message="Bearish trend change detected")