
Chiến lược này sử dụng hai chỉ số trung bình di chuyển ((EMA) để nắm bắt sự thay đổi trong xu hướng giá. Khi EMA ngắn hạn đi qua EMA dài hạn từ phía dưới, nó tạo ra tín hiệu mua; Khi EMA ngắn hạn đi qua EMA dài hạn từ phía trên, nó tạo ra tín hiệu bán.
Chiến lược giao dịch EMA là một chiến lược giao dịch đơn giản, dễ hiểu và phù hợp với thị trường xu hướng. Bằng cách giao dịch nhanh và chậm, bạn có thể nắm bắt tốt hơn sự thay đổi trong xu hướng giá. Đồng thời, thiết lập dừng lỗ và dừng hàng ngày có thể kiểm soát rủi ro hiệu quả. Tuy nhiên, chiến lược này có thể hoạt động kém khi thị trường bị dao động hoặc xu hướng đảo ngược và cần được tối ưu hóa và cải thiện kết hợp với các chỉ số kỹ thuật và phương pháp phân tích khác.
/*backtest
start: 2023-06-01 00:00:00
end: 2024-06-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DD173838
//@version=5
strategy("Moving Average Strategy with Daily Limits", overlay=true)
// Moving Average settings
shortMaLength = input.int(9, title="Short MA Length")
longMaLength = input.int(21, title="Long MA Length")
// Calculate MAs
shortMa = ta.ema(close, shortMaLength)
longMa = ta.ema(close, longMaLength)
// Plot MAs
plot(shortMa, title="9 EMA", color=color.blue)
plot(longMa, title="21 EMA", color=color.red)
// Strategy conditions
crossUp = ta.crossover(shortMa, longMa)
crossDown = ta.crossunder(shortMa, longMa)
// Debug plots to check cross conditions
plotshape(series=crossUp, title="Cross Up", location=location.belowbar, color=color.green, style=shape.labelup, text="UP")
plotshape(series=crossDown, title="Cross Down", location=location.abovebar, color=color.red, style=shape.labeldown, text="DOWN")
// Entry at cross signals
if (crossUp)
strategy.entry("Long", strategy.long)
if (crossDown)
strategy.entry("Short", strategy.short)
// Daily drawdown and profit limits
var float startOfDayEquity = na
if (na(startOfDayEquity) or ta.change(time('D')) != 0)
startOfDayEquity := strategy.equity
maxDailyLoss = 50000 * 0.0025
maxDailyProfit = 50000 * 0.02
currentDailyPL = strategy.equity - startOfDayEquity
if (currentDailyPL <= -maxDailyLoss)
strategy.close_all(comment="Max Daily Loss Reached")
if (currentDailyPL >= maxDailyProfit)
strategy.close_all(comment="Max Daily Profit Reached")