
Chiến lược này là một phương pháp giao dịch định lượng kết hợp theo dõi xu hướng và học máy, nhằm mục đích nắm bắt xu hướng thị trường và giảm rủi ro thông qua các tín hiệu xác nhận xu hướng và xác nhận xu hướng. Chiến lược sử dụng đường trung bình di chuyển đơn giản ngắn hạn và dài hạn (SMA) để xác định hướng xu hướng tiềm ẩn và sử dụng chỉ số tương đối mạnh (RSI) làm đại diện cho sự không tin tưởng học máy để xác nhận tín hiệu giao dịch.
Chiến lược theo dõi xu hướng động và quản lý rủi ro tăng cường học máy là một phương pháp giao dịch định lượng tổng hợp, cung cấp một công cụ mạnh mẽ cho các nhà giao dịch bằng cách kết hợp theo dõi xu hướng, xác nhận tín hiệu và quản lý rủi ro động. Mặc dù có một số rủi ro tiềm ẩn đối với chiến lược, nhưng có thể nâng cao hơn nữa hiệu suất và khả năng thích ứng của nó bằng cách tối ưu hóa và cải tiến liên tục.
/*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")