Đây là một chiến lược giao dịch định lượng kết hợp các đường chéo trung bình chuyển động biểu thức (EMA) với bộ lọc phạm vi trung bình thực sự (ATR). Chiến lược nhằm mục đích xác định xu hướng mạnh và thực hiện giao dịch trong điều kiện thị trường biến động cao, cải thiện hiệu quả tỷ lệ Sharpe và hiệu suất tổng thể. Nó sử dụng EMA 50 giai đoạn và 200 giai đoạn để nắm bắt xu hướng trung và dài hạn, trong khi sử dụng chỉ số ATR để đánh giá biến động thị trường, chỉ giao dịch khi biến động vượt quá ngưỡng cụ thể.
Chiến lược này sử dụng EMA 50 giai đoạn làm đường nhanh và EMA 200 giai đoạn làm đường chậm, tạo ra tín hiệu dài khi đường nhanh vượt qua đường chậm và tín hiệu ngắn khi nó vượt qua đường chậm. Đối với lọc biến động, chiến lược tính toán giá trị ATR 14 giai đoạn và chuyển đổi thành một tỷ lệ phần trăm của giá, chỉ cho phép các vị trí khi tỷ lệ phần trăm ATR vượt quá ngưỡng đã đặt trước (bên mặc định 2%).
Chiến lược này kết hợp các chỉ số kỹ thuật cổ điển với các khái niệm quản lý rủi ro hiện đại. Bằng cách sử dụng EMA crossover để nắm bắt xu hướng trong khi sử dụng bộ lọc ATR để kiểm soát thời gian giao dịch, chiến lược duy trì sự đơn giản trong khi đạt được tính thực tế mạnh mẽ. Mặc dù có một số rủi ro vốn có, chiến lược vẫn có giá trị ứng dụng tốt thông qua các biện pháp tối ưu hóa và quản lý rủi ro thích hợp. Các nhà giao dịch được khuyên nên điều chỉnh các tham số theo đặc điểm thị trường cụ thể và sở thích rủi ro của riêng họ trong các ứng dụng thực tế.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover with ATR Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Inputs for Moving Averages fastLength = input.int(50, title="Fast EMA Length") slowLength = input.int(200, title="Slow EMA Length") // Inputs for ATR Filter atrLength = input.int(14, title="ATR Length") atrMultiplier = input.float(1.5, title="ATR Multiplier") atrThreshold = input.float(0.02, title="ATR Threshold (%)") // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Calculate ATR atr = ta.atr(atrLength) // Convert ATR to a percentage of price atrPct = atr / close // Define Long Condition (Cross and ATR filter) longCondition = ta.crossover(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Short Condition shortCondition = ta.crossunder(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Exit Conditions exitConditionLong = ta.crossunder(fastEMA, slowEMA) exitConditionShort = ta.crossover(fastEMA, slowEMA) // Long Entry if (longCondition) strategy.entry("Long", strategy.long) // Short Entry if (shortCondition) strategy.entry("Short", strategy.short) // Long Exit if (exitConditionLong) strategy.close("Long") // Short Exit if (exitConditionShort) strategy.close("Short") // Plot EMAs for visual reference plot(fastEMA, title="50 EMA", color=color.blue) plot(slowEMA, title="200 EMA", color=color.red) // Plot ATR for reference plot(atrPct, title="ATR Percentage", color=color.orange, style=plot.style_line) hline(atrThreshold / 100, "ATR Threshold", color=color.green)