
Chiến lược này là một hệ thống giao dịch dựa trên đường trung bình động theo hàm mũ (EMA) kết hợp với đường biên độ trung bình thực (ATR) để đạt được mục tiêu quản lý rủi ro năng động. Chiến lược này sử dụng các đường EMA ngắn hạn và dài hạn để nắm bắt những thay đổi về động lượng trong xu hướng giá và sử dụng ATR để thiết lập các vị thế chốt lời và dừng lỗ một cách linh hoạt, giúp kiểm soát chính xác rủi ro giao dịch.
Logic cốt lõi của chiến lược này dựa trên các tín hiệu giao nhau của hai đường trung bình động hàm mũ có chu kỳ khác nhau (9 và 21). Khi đường EMA ngắn hạn cắt đường EMA dài hạn theo hướng đi lên, tín hiệu dài hạn sẽ được tạo ra; khi đường EMA ngắn hạn cắt đường EMA dài hạn theo hướng đi xuống, tín hiệu ngắn hạn sẽ được tạo ra. Để quản lý rủi ro tốt hơn, chiến lược này giới thiệu cơ chế dừng lỗ và dừng lãi động dựa trên ATR 14 kỳ. Mức chốt lời được đặt thành 2 lần ATR và mức dừng lỗ được đặt thành 1 lần ATR. Thiết lập này đảm bảo đủ không gian lợi nhuận và có thể kiểm soát rủi ro kịp thời.
Chiến lược này hiện thực hóa một hệ thống giao dịch tương đối hoàn chỉnh bằng cách kết hợp hệ thống giao cắt EMA cổ điển và quản lý rủi ro ATR năng động. Ưu điểm chính của chiến lược này là khả năng quản lý rủi ro năng động và đặc điểm theo dõi xu hướng tốt. Thông qua các hướng tối ưu hóa được đề xuất, chiến lược vẫn còn có thể được cải thiện thêm. Khi áp dụng theo thời gian thực, nên tiến hành kiểm tra ngược và tối ưu hóa tham số đầy đủ, đồng thời thực hiện các điều chỉnh phù hợp dựa trên các đặc điểm cụ thể của thị trường.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved EMA Crossover Strategy", overlay=true)
// User-defined inputs for EMAs
shortTermLength = input(9, title="Short-Term EMA Length")
longTermLength = input(21, title="Long-Term EMA Length")
// Dynamic Take Profit and Stop Loss
atrLength = input(14, title="ATR Length")
atrMultiplierTP = input(2.0, title="ATR Multiplier for Take Profit")
atrMultiplierSL = input(1.0, title="ATR Multiplier for Stop Loss")
// Calculate EMAs and ATR
shortTermEMA = ta.ema(close, shortTermLength)
longTermEMA = ta.ema(close, longTermLength)
atr = ta.atr(atrLength)
// Plot the EMAs
plot(shortTermEMA, color=color.blue, title="Short-Term EMA")
plot(longTermEMA, color=color.red, title="Long-Term EMA")
// Generate Entry Conditions
longCondition = ta.crossover(shortTermEMA, longTermEMA)
shortCondition = ta.crossunder(shortTermEMA, longTermEMA)
// Optional Debugging: Print conditions (you can remove this later)
var label longLabel = na
var label shortLabel = na
if longCondition
longLabel := label.new(bar_index, high, "Buy Signal", color=color.green, style=label.style_label_down, textcolor=color.white)
if shortCondition
shortLabel := label.new(bar_index, low, "Sell Signal", color=color.red, style=label.style_label_up, textcolor=color.white)
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", "Long", limit=close + atr * atrMultiplierTP, stop=close - atr * atrMultiplierSL)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", "Short", limit=close - atr * atrMultiplierTP, stop=close + atr * atrMultiplierSL)