
Chiến lược này là một hệ thống giao dịch định lượng dựa trên nhiều điểm giao nhau của đường trung bình động hàm mũ (EMA). Nó xây dựng một khuôn khổ giao dịch theo dõi xu hướng hoàn chỉnh thông qua việc phối hợp ba đường trung bình động: EMA 9 ngày, EMA 21 ngày và EMA 200 ngày. Chiến lược này xác định xu hướng thị trường và giao dịch bằng cách xác định điểm giao nhau giữa đường trung bình động nhanh và đường trung bình động chậm cũng như mối quan hệ vị trí của chúng với đường trung bình động dài hạn.
Logic cốt lõi của chiến lược này là nắm bắt xu hướng thị trường thông qua sự giao thoa của ba đường trung bình động. Cụ thể:
Đây là một chiến lược đi theo xu hướng được thiết kế tốt và có logic rõ ràng. Thông qua sự hợp tác phối hợp của nhiều đường trung bình động, có thể nắm bắt hiệu quả xu hướng thị trường trong khi vẫn có khả năng kiểm soát rủi ro tốt. Chiến lược còn nhiều tiềm năng để tối ưu hóa và tính ổn định cũng như lợi nhuận của chiến lược có thể được nâng cao hơn nữa thông qua cải tiến liên tục.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("EMA Cross with both MinhTuan", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Tham số EMA
fastLength = input.int(9, title="Fast EMA Length", minval=1)
slowLength = input.int(21, title="Slow EMA Length", minval=1)
filterLength = input.int(200, title="EMA Filter Length", minval=1)
// Tùy chọn chế độ giao dịch
tradeMode = input.string("Both", options=["Long", "Short", "Both"], title="Trade Mode")
// Tính toán EMA
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
filterEMA = ta.ema(close, filterLength)
// Điều kiện vào lệnh Long: EMA nhanh cắt lên EMA chậm và cả hai nằm trên EMA 200
longCondition = ta.crossover(fastEMA, slowEMA) and fastEMA > filterEMA and slowEMA > filterEMA
// Điều kiện vào lệnh Short: EMA nhanh cắt xuống EMA chậm và cả hai nằm dưới EMA 200
shortCondition = ta.crossunder(fastEMA, slowEMA) and fastEMA < filterEMA and slowEMA < filterEMA
// Điều kiện thoát lệnh: EMA nhanh cắt ngược lại EMA chậm
closeLongCondition = ta.crossunder(fastEMA, slowEMA) // Thoát lệnh Long
closeShortCondition = ta.crossover(fastEMA, slowEMA) // Thoát lệnh Short
// Thực hiện lệnh Long
if (longCondition and (tradeMode == "Long" or tradeMode == "Both"))
strategy.entry("EMA_Cross_Long", strategy.long)
label.new(x=bar_index, y=low, text="Long", color=color.green, textcolor=color.white, size=size.small)
// Thực hiện lệnh Short
if (shortCondition and (tradeMode == "Short" or tradeMode == "Both"))
strategy.entry("EMA_Cross_Short", strategy.short)
label.new(x=bar_index, y=high, text="Short", color=color.red, textcolor=color.white, size=size.small)
// Thoát lệnh Long
if (closeLongCondition)
strategy.close("EMA_Cross_Long")
label.new(x=bar_index, y=high, text="Close Long", color=color.orange, textcolor=color.white, size=size.small)
// Thoát lệnh Short
if (closeShortCondition)
strategy.close("EMA_Cross_Short")
label.new(x=bar_index, y=low, text="Close Short", color=color.blue, textcolor=color.white, size=size.small)
// Vẽ đường EMA nhanh, EMA chậm, và EMA 200
plot(fastEMA, title="Fast EMA", color=color.blue, linewidth=2)
plot(slowEMA, title="Slow EMA", color=color.orange, linewidth=2)
plot(filterEMA, title="Filter EMA (200)", color=color.red, linewidth=2)
// Hiển thị nền khi đang giữ lệnh
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : strategy.position_size < 0 ? color.new(color.red, 90) : na)