Chiến lược này là một hệ thống giao dịch dựa trên đường chéo trung bình chuyển động biểu thức (EMA), kết hợp với phạm vi trung bình thực sự (ATR) để quản lý rủi ro năng động. Chiến lược sử dụng các đường EMA ngắn hạn và dài hạn để nắm bắt sự thay đổi động lực trong xu hướng giá, trong khi sử dụng ATR để thiết lập năng động mức lợi nhuận và dừng lỗ, đạt được kiểm soát chính xác rủi ro giao dịch.
Lý thuyết cốt lõi của chiến lược dựa trên các tín hiệu chéo giữa hai EMA của các giai đoạn khác nhau (9 và 21). Một tín hiệu mua được tạo ra khi EMA ngắn hạn vượt qua EMA dài hạn, trong khi tín hiệu bán được tạo ra khi EMA ngắn hạn vượt qua dưới EMA dài hạn. Để quản lý rủi ro tốt hơn, chiến lược kết hợp một cơ chế lấy lợi nhuận và dừng lỗ năng động dựa trên ATR 14 giai đoạn, với mức lấy lợi nhuận được đặt ở 2x ATR và mức dừng lỗ ở 1x ATR, đảm bảo lợi nhuận tiềm năng đầy đủ trong khi duy trì kiểm soát rủi ro kịp thời.
Chiến lược này tạo ra một hệ thống giao dịch toàn diện bằng cách kết hợp hệ thống giao dịch chéo EMA cổ điển với quản lý rủi ro ATR năng động. Sức mạnh chính của nó nằm trong khả năng quản lý rủi ro năng động và các đặc điểm theo xu hướng hiệu quả. Thông qua các hướng tối ưu hóa được đề xuất, có chỗ để cải thiện hơn nữa. Để thực hiện giao dịch trực tiếp, nên tiến hành kiểm tra lại kỹ lưỡng và tối ưu hóa tham số, với các điều chỉnh thích hợp dựa trên các đặc điểm thị trường cụ thể.
/*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)