
Chiến lược này là một hệ thống theo dõi xu hướng dựa trên các đường chéo của đường trung bình di chuyển hai chỉ số ((EMA), kết hợp với cơ chế thoát bước để tối ưu hóa lợi nhuận giao dịch. Chiến lược sử dụng các đường EMA 9 chu kỳ và 21 chu kỳ làm đường nhanh và đường chậm, để xác định sự thay đổi của xu hướng thị trường thông qua các đường chéo của chúng, đồng thời sử dụng chương trình thoát vị trí hai giai đoạn để cân bằng rủi ro và lợi nhuận.
Lý luận cốt lõi của chiến lược dựa trên tín hiệu chéo của EMA nhanh ((9 chu kỳ) và EMA chậm ((21 chu kỳ)). Khi chạy trên đường nhanh, hệ thống mở vị trí nhiều đầu bằng 0.02; khi chạy dưới đường nhanh, hệ thống mở vị trí đầu trống bằng 0.02. Trong thời gian giữ vị trí, chiến lược sử dụng cơ chế thoát ra hai giai đoạn: giai đoạn đầu tiên là làm bằng một nửa vị trí khi lợi nhuận đạt 200 điểm ((0.01)); giai đoạn thứ hai là làm bằng các vị trí còn lại khi có tín hiệu chéo ngược.
Đây là một hệ thống giao dịch hoàn chỉnh kết hợp các chiến lược giao dịch ngang hàng cổ điển với quản lý vị trí hiện đại. Chiến lược này nâng cao lợi nhuận của các chiến lược giao dịch ngang hàng truyền thống thông qua cơ chế rút lui từng bước, nhưng vẫn yêu cầu các nhà giao dịch điều chỉnh phù hợp với môi trường thị trường cụ thể và khả năng chịu rủi ro của riêng họ.
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("EMA Crossover with Partial Exit", overlay=true, default_qty_type=strategy.cash, default_qty_value=50)
// Define lot sizes
lotSize = 0.02 // Initial trade size
partialLot = 0.01 // Half quantity to close at 20 pips profit
profitTarget = 200 // 20 pips = 200 points (for Forex, adjust accordingly)
// Define EMA lengths
fastLength = 9
slowLength = 21
// Compute EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Define crossover conditions
longEntry = ta.crossover(fastEMA, slowEMA) // Buy when 9 EMA crosses above 21 EMA
shortEntry = ta.crossunder(fastEMA, slowEMA) // Sell when 9 EMA crosses below 21 EMA
// Track trade state
var float entryPrice = na
var bool inTrade = false
var bool isLong = false
// Entry Logic (Enter with 0.02 lot size)
if (longEntry and not inTrade)
strategy.entry("Long", strategy.long, qty=lotSize)
entryPrice := close
inTrade := true
isLong := true
if (shortEntry and not inTrade)
strategy.entry("Short", strategy.short, qty=lotSize)
entryPrice := close
inTrade := true
isLong := false
// Partial Exit Logic (Close 0.01 lot after 20 pips profit)
if (isLong and inTrade and close >= entryPrice + profitTarget * syminfo.mintick)
strategy.close("Long", qty=partialLot)
if (not isLong and inTrade and close <= entryPrice - profitTarget * syminfo.mintick)
strategy.close("Short", qty=partialLot)
// Full Exit (Close remaining 0.01 lot at the next major crossover)
if (isLong and shortEntry)
strategy.close("Long") // Close remaining position
inTrade := false
if (not isLong and longEntry)
strategy.close("Short") // Close remaining position
inTrade := false
// Plot EMAs
plot(fastEMA, color=color.blue, title="9 EMA")
plot(slowEMA, color=color.red, title="21 EMA")
// Mark Buy/Sell Signals
plotshape(series=longEntry, location=location.belowbar, color=color.green, style=shape.labelup, title="BUY Signal")
plotshape(series=shortEntry, location=location.abovebar, color=color.red, style=shape.labeldown, title="SELL Signal")