
Strategi ini adalah sistem pengesanan trend berdasarkan crossover rata-rata bergerak dua indeks ((EMA) yang digabungkan dengan mekanisme keluar secara beransur-ansur untuk mengoptimumkan keuntungan perdagangan. Strategi ini menggunakan EMA 9 kitaran dan 21 kitaran sebagai garis cepat dan lambat, untuk mengenal pasti perubahan trend pasaran melalui perpotongan mereka, sambil menggunakan skema keluar kedudukan dua peringkat untuk mengimbangi risiko dan keuntungan.
Logik teras strategi ini adalah berdasarkan isyarat silang EMA cepat ((9 kitaran) dan EMA perlahan ((21 kitaran)). Apabila melalui garis cepat, sistem membuka kedudukan bermulut dengan 0.02 tangan; apabila melalui garis lambat di bawah garis cepat, sistem membuka kedudukan kosong dengan 0.02 tangan. Semasa memegang kedudukan, strategi ini menggunakan mekanisme keluar dua peringkat: peringkat pertama adalah meratakan separuh kedudukan apabila keuntungan mencapai titik 200 ((0.01 tangan); peringkat kedua adalah meratakan kedudukan yang tersisa apabila isyarat silang terbalik berlaku.
Ini adalah sistem perdagangan lengkap yang menggabungkan strategi persilangan garisan garisan klasik dengan pengurusan kedudukan moden. Strategi ini meningkatkan keuntungan strategi persilangan garisan garisan tradisional melalui mekanisme keluar secara berperingkat, tetapi masih memerlukan penyesuaian yang sesuai oleh peniaga mengikut keadaan pasaran tertentu dan toleransi risiko mereka sendiri. Arah pengoptimuman masa depan terutamanya tertumpu pada dua aspek penapisan isyarat dan pengurusan risiko dinamik.
/*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")