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