
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")