
Chiến lược này là một hệ thống giao dịch dựa trên đường nét đôi, giao dịch bằng cách theo dõi sự giao thoa của 9 chu kỳ và 21 chu kỳ chỉ số chuyển động trung bình ((EMA)). Chiến lược hoạt động trong khung thời gian 10 phút, sử dụng mô hình giao dịch một lần, tức là không mở lại vị trí khi giữ vị trí. Hệ thống sử dụng vốn ban đầu 100.000, mỗi lần giao dịch sử dụng 10% lợi nhuận tài khoản.
Nguyên tắc cốt lõi của chiến lược là sử dụng EMA ngắn hạn có tính nhạy cảm cao hơn so với EMA dài hạn đối với sự thay đổi giá thị trường. Khi EMA ngắn hạn (thời kỳ 9) đi lên qua EMA dài hạn (thời kỳ 21), cho thấy tăng cường động lực tăng giá ngắn hạn, hệ thống phát ra nhiều tín hiệu; Khi EMA ngắn hạn đi xuống qua EMA dài hạn, cho thấy tăng cường động lực giảm giá ngắn hạn, hệ thống phát ra tín hiệu cân bằng.
Đây là một chiến lược giao thoa đồng tuyến được thiết kế hợp lý, logic rõ ràng. Bằng cách giao thoa EMA để nắm bắt xu hướng thị trường, kết hợp với mô hình giao dịch một lần và quản lý vị trí tỷ lệ phần trăm, sự cân bằng giữa rủi ro và lợi nhuận được thực hiện. Mặc dù có một số hạn chế vốn có, nhưng sự ổn định và thích ứng của chiến lược có thể được nâng cao hơn nữa bằng cách tối ưu hóa hướng của đề xuất. Trong ứng dụng thực tế, các nhà giao dịch được khuyến nghị điều chỉnh phù hợp theo đặc điểm thị trường cụ thể và sở thích rủi ro cá nhân.
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("EMA Crossover Labels (One Trade at a Time)", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// ==== User Inputs ====
// Set the testing timeframe (ensure the chart is on a 10-min timeframe)
testTimeFrame = input.timeframe("10", "Strategy Timeframe")
// EMA period inputs
emaPeriod9 = input.int(9, "EMA 9 Period", minval=1)
emaPeriod21 = input.int(21, "EMA 2q Period", minval=1)
// ==== Retrieve Price Data ====
// For simplicity, we use the chart's timeframe (should be 10-min)
price = close
// ==== Calculate EMAs ====
ema9 = ta.ema(price, emaPeriod9)
ema21 = ta.ema(price, emaPeriod21)
// ==== Define Crossover Conditions ====
// Buy signal: when EMA9 crosses above EMA21 AND no current position is open
buySignal = ta.crossover(ema9, ema21) and strategy.position_size == 0
// Sell signal: when EMA9 crosses below EMA21 AND a long position is active
sellSignal = ta.crossunder(ema9, ema21) and strategy.position_size > 0
// ==== Strategy Orders ====
// Enter a long position when a valid buy signal occurs
if buySignal
strategy.entry("Long", strategy.long)
alert("Long Signal: " + syminfo.tickerid + " - EMA9 crossed above EMA21", alert.freq_once_per_bar_close)
// Exit the long position when a valid sell signal occurs
if sellSignal
strategy.close("Long")
alert("Sell Long Signal: " + syminfo.tickerid + " - EMA9 crossed below EMA21", alert.freq_once_per_bar_close)
// ==== Plot Buy/Sell Labels ====
// Only plot a "Buy" label if there's no open position
plotshape(buySignal, title="Buy Label", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", textcolor=color.white)
// Only plot a "Sell" label if a position is active
plotshape(sellSignal, title="Sell Label", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", textcolor=color.white)
// ==== Plot EMAs for Visualization ====
plot(ema9, color=color.blue, title="EMA 21")
plot(ema21, color=color.orange, title="EMA 21")