
Chiến lược này là một hệ thống giao dịch tự động dựa trên lý thuyết phá vỡ hai đường ngang, kết hợp với chức năng quản lý rủi ro. Cốt lõi của chiến lược sử dụng chỉ số chuyển động trung bình 21 chu kỳ và 50 chu kỳ (EMA) làm chỉ số tín hiệu, đánh giá sự thay đổi xu hướng thị trường và tự động thực hiện giao dịch bằng cách giao ngang. Hệ thống tích hợp các chức năng dừng lỗ (Stop Loss) và dừng lợi nhuận (Take Profit), có thể kiểm soát hiệu quả rủi ro và lợi nhuận của mỗi giao dịch.
Lý luận cốt lõi của chiến lược được dựa trên lý thuyết chéo ngang cổ điển trong phân tích kỹ thuật. Khi EMA ngắn (21 ngày) đi lên vượt qua EMA dài (50 ngày), hệ thống nhận ra là tín hiệu đi lên và mở nhiều vị trí; khi EMA ngắn đi xuống vượt qua EMA dài, hệ thống nhận ra là tín hiệu đi xuống và mở vị trí trống. Mỗi tín hiệu giao dịch sẽ tự động thiết lập điểm dừng và điểm dừng, hệ thống sẽ mặc định thiết lập điểm dừng là 40 đơn vị biến động tối thiểu và điểm dừng là 80 đơn vị biến động tối thiểu.
Đây là một chiến lược giao dịch tự động được thiết kế hợp lý, logic rõ ràng. Bằng cách kết hợp các tín hiệu chéo đồng tuyến và quản lý rủi ro nghiêm ngặt, chiến lược cung cấp một khuôn khổ kỹ thuật đáng tin cậy để nắm bắt các cơ hội xu hướng thị trường trong khi đảm bảo an toàn giao dịch. Mặc dù có một số không gian tối ưu hóa, cơ sở hạ tầng của chiến lược vẫn còn nguyên vẹn, phù hợp để phát triển và hoàn thiện thêm các mô-đun cơ bản của hệ thống giao dịch định lượng.
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover Strategy with SL & TP", overlay=true, default_qty_type=strategy.percent_of_equity)
// Input settings for SL and TP (ticks)
slTicks = input.int(40, title="Stop Loss (ticks)", minval=1)
tpTicks = input.int(80, title="Take Profit (ticks)", minval=1)
// Define EMA periods
ema21 = ta.ema(close, 21)
ema50 = ta.ema(close, 50)
// Detect crossovers
bullishCross = ta.crossover(ema21, ema50)
bearishCross = ta.crossunder(ema21, ema50)
// Plot the EMAs
plot(ema21, color=color.green, linewidth=2, title="EMA 21")
plot(ema50, color=color.red, linewidth=2, title="EMA 50")
// Calculate tick size in points
var float tickSize = syminfo.mintick
// Calculate stop loss and take profit prices for long and short positions
longSL = close - slTicks * tickSize
longTP = close + tpTicks * tickSize
shortSL = close + slTicks * tickSize
shortTP = close - tpTicks * tickSize
// Execute trades on crossover signals
if (bullishCross)
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", stop=longSL, limit=longTP)
if (bearishCross)
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", stop=shortSL, limit=shortTP)
// Plot arrows on crossovers
plotshape(series=bullishCross, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.small)
plotshape(series=bearishCross, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.small)
// Optional: Background coloring
bgcolor(bullishCross ? color.new(color.green, 90) : na, title="Bullish Background")
bgcolor(bearishCross ? color.new(color.red, 90) : na, title="Bearish Background")