
Strategi ini adalah sistem pelacakan tren yang didasarkan pada crossover rata-rata bergerak dua indeks (EMA) yang digabungkan dengan mekanisme keluar bertahap untuk mengoptimalkan keuntungan perdagangan. Strategi ini menggunakan EMA 9 siklus dan 21 siklus sebagai garis cepat dan lambat, untuk mengidentifikasi perubahan tren pasar melalui persimpangan mereka, sambil menggunakan skema keluar posisi dua tahap untuk menyeimbangkan risiko dan keuntungan.
Logika inti dari strategi ini didasarkan pada sinyal silang dari EMA cepat ((9 siklus) dan EMA lambat ((21 siklus)). Ketika melewati jalur lambat di jalur cepat, sistem membuka posisi multihead dengan 0.02 tangan; ketika melewati jalur lambat di jalur cepat, sistem membuka posisi kosong dengan 0.02 tangan. Selama memegang posisi, strategi ini menggunakan mekanisme keluar dua tahap: tahap pertama adalah meratakan setengah posisi ketika keuntungan mencapai 200 poin ((0.01 tangan); tahap kedua adalah meratakan posisi yang tersisa ketika sinyal silang terbalik muncul.
Ini adalah sistem perdagangan yang lengkap yang menggabungkan strategi crossover linier klasik dengan manajemen posisi modern. Strategi ini meningkatkan profitabilitas strategi crossover linier tradisional melalui mekanisme keluar bertahap, tetapi masih memerlukan penyesuaian yang tepat oleh pedagang sesuai dengan lingkungan pasar tertentu dan kemampuan menanggung risiko mereka sendiri.
/*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")