
Đây là một chiến lược giao dịch định lượng kết hợp các chỉ số trung bình di chuyển ((EMA) chéo và các bộ lọc trung bình thực tế của sóng ((ATR)). Chiến lược này có hiệu quả trong việc tăng tỷ lệ Sharpe và hiệu suất tổng thể của chiến lược bằng cách xác định xu hướng mạnh và giao dịch trong môi trường thị trường có tỷ lệ biến động cao. Chiến lược sử dụng 50 chu kỳ và 200 chu kỳ EMA để nắm bắt xu hướng trung và dài hạn, đồng thời sử dụng chỉ số ATR để đánh giá sự biến động của thị trường và chỉ giao dịch khi tỷ lệ biến động vượt quá một ngưỡng nhất định.
Về mặt định hướng, chiến lược sử dụng 50 chu kỳ EMA làm đường nhanh, 200 chu kỳ EMA làm đường chậm, tạo ra tín hiệu nhiều khi đi qua đường chậm trên đường nhanh và tạo ra tín hiệu trống khi đi xuống. Về mặt lọc biến động, chiến lược tính ATR 14 chu kỳ và chuyển đổi nó thành phần trăm của giá, chỉ cho phép mở vị trí khi ATR phần trăm vượt quá ngưỡng dự kiến (nhìn 2%) được thiết kế để đảm bảo chiến lược chỉ giao dịch trong môi trường thị trường có đủ biến động, giảm hiệu quả tín hiệu giả trong thị trường xung đột.
Đây là một chiến lược kết hợp các chỉ số kỹ thuật cổ điển với tư tưởng quản lý rủi ro hiện đại. Chiến lược này có tính đơn giản nhưng cũng 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 này 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 hợp lý.
/*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)