
Strategi EMA crossover confirmation partial stop loss adalah strategi perdagangan kuantitatif lanjutan yang menggabungkan isyarat crossover EMA, pengesahan dinamik dan analisis struktur pasaran. Strategi ini memberi tumpuan khusus kepada keselamatan perdagangan dan melindungi modal pelaburan melalui mekanisme stop loss yang inovatif. Konsep reka bentuk utamanya adalah menunggu EMA crossover membentuk arah trend awal, dan kemudian mencari isyarat dinamika untuk “lanjutan trend” pertama sebagai tempat masuk, sambil menggunakan kerosakan struktur pasaran sebagai pemicu stop loss, yang dapat mengawal risiko dengan berkesan sambil mengekalkan potensi kenaikan.
Strategi ini berdasarkan mekanisme pengesahan berlapis:
Pengenalan TrendMenggunakan persilangan EMA cepat ((8 kitaran) dan EMA perlahan ((21 kitaran) untuk menentukan arah trend keseluruhan. Apabila EMA 8 di atas menembusi 21 EMA, ia diiktiraf sebagai trend naik; apabila EMA 8 di bawah menembusi 21 EMA, ia diiktiraf sebagai trend menurun.
Isyarat masukStrategi ini tidak akan masuk ke dalam pasaran dengan segera apabila EMA awal bersilang, tetapi akan menunggu isyarat “tren pertama dilanjutkan”.
Pengurusan RisikoStrategi ini memperkenalkan mekanisme penangguhan sebahagian berdasarkan analisis struktur pasaran:
Strategi untuk keluarTanda keluar sepenuhnya adalah EMA bersilang dengan 8 EMA dan 21 EMA, di mana semua baki memegang kosong.
Strategi dalam proses operasi menggunakan pembolehubah pengurusan status untuk mengesan status perdagangan, jenis isyarat yang telah dicetuskan dan titik peralihan struktur pasaran, memastikan keserasian dan ketepatan pelaksanaan logik.
Dengan mengkaji kod strategi ini secara mendalam, kelebihan yang ketara dapat diringkaskan:
Mekanisme pengesahan bergandaDengan menggabungkan EMA bersilang, penurunan momentum dan isyarat berterusan trend, risiko penembusan palsu dan isyarat salah dikurangkan dengan ketara. Reka bentuk penapisan berlapis ini meningkatkan kualiti dan kebolehpercayaan perdagangan dengan ketara.
Pengurusan Wang PintarMekanisme Hentian Sebahagian (Hentian Sebahagian 50%) adalah ciri strategi ini, ia membolehkan peniaga melindungi sebahagian daripada keuntungan mereka apabila struktur pasaran merosot, sambil mengekalkan kedudukan yang tersisa untuk menangkap kemungkinan pemulihan trend, mencapai keseimbangan risiko dan pulangan.
Kesesuaian struktur pasaranDengan mengesan secara dinamik pembentukan titik tinggi dan rendah, strategi dapat mengenal pasti perubahan struktur pasaran, menjadikannya stabil dalam pelbagai keadaan pasaran.
Reka bentuk parameter yang fleksibelStrategi ini menawarkan pelbagai parameter yang boleh disesuaikan, termasuk panjang EMA, kelipatan sensitiviti, dan tetapan pengunduran pivot, yang membolehkan peniaga mengoptimumkan mengikut keadaan pasaran yang berbeza dan pilihan risiko peribadi.
Prinsip menghormati trendStrategi ini direka mengikut prinsip “berjalan mengikut trend”, hanya melakukan lebih banyak dalam trend menaik yang disahkan, mengelakkan risiko tinggi yang dibawa oleh perdagangan berlawanan arah.
Walaupun strategi ini direka dengan baik, terdapat beberapa risiko dan batasan yang berpotensi:
Risiko kelewatan kemasukanOleh kerana perlu menunggu isyarat “perlanjutan trend pertama”, strategi mungkin terlepas bahagian awal kenaikan trend, yang mungkin menyebabkan harga masuk yang lebih tinggi dalam keadaan penembusan cepat.
Kesilapan dalam menilai struktur pasaranDalam persekitaran yang sangat tidak menentu, pembentukan titik tinggi dan rendah mungkin tidak cukup jelas, yang menyebabkan penilaian struktur pasaran yang salah dan kerugian separa yang tidak perlu.
Kepekaan ParameterPrestasi strategi sangat bergantung kepada parameter seperti panjang EMA, kelipatan sensitiviti ATR, dan parameter yang tidak sesuai boleh menyebabkan perdagangan berlebihan atau kehilangan isyarat yang berkesan.
Kehilangan selepas menangApabila penangguhan separa dicetuskan, strategi tidak menentukan mekanisme kemasukan semula yang jelas, dan mungkin kehilangan peluang kenaikan selepas pemulihan trend.
Berdasarkan analisis kod, strategi ini boleh dioptimumkan dalam beberapa arah:
Pengaturan parameter dinamik: Panjang EMA semasa dan kelipatan kepekaan tetap, anda boleh mempertimbangkan untuk menyesuaikan parameter ini secara automatik mengikut turun naik pasaran. Sebagai contoh, menggunakan kelipatan kepekaan yang lebih kecil dalam persekitaran turun naik rendah dan menggunakan nilai yang lebih besar dalam persekitaran turun naik tinggi. Ini dapat menjadikan strategi lebih sesuai dengan keadaan pasaran yang berbeza.
Meningkatkan penilaian struktur pasaran kuantitatifAnalisis struktur pasaran yang sedia ada agak mudah, tetapi sistem penilaian struktur pasaran yang lebih kompleks boleh dibangunkan dengan mengambil kira kedudukan relatif, kelajuan dan amplitud pembentukan beberapa titik tinggi dan rendah, untuk menilai kekuatan trend dan potensi pembalikan dengan lebih tepat.
Pengesahan jumlah transaksi yang disatukanStrategi semasa hanya berdasarkan pergerakan harga, analisis jumlah dagangan boleh ditambah sebagai faktor pengesahan tambahan. Sebagai contoh, permintaan untuk meningkatkan jumlah dagangan apabila mencetuskan isyarat beli, atau peningkatan jumlah dagangan sebagai isyarat amaran yang lebih kuat apabila struktur pasaran terganggu.
Strategi pengurusan optimum selepas penutupan sebahagian“Selain itu, kita juga perlu mempertimbangkan bagaimana kita boleh menggunakan wang yang kita ada untuk membiayai perniagaan kita”, katanya.
Menambah analisis jangka masa berbilangDengan mengintegrasikan analisis trend untuk jangka masa yang lebih lama, anda dapat meningkatkan kestabilan strategi. Sebagai contoh, anda hanya boleh melakukan lebih banyak pada jangka masa yang lebih kecil apabila trend naik di garisan matahari, dan dengan itu anda mengurangkan risiko perdagangan dalam trend besar.
EMA cross-dynamic confirmation partial stop loss strategy adalah sistem perdagangan kuantitatif yang canggih yang menggabungkan analisis teknikal dan pengurusan risiko. Kelebihan utamanya adalah mekanisme pengesahan bertingkat dan reka bentuk partial stop loss yang inovatif, yang dapat mengawal risiko dengan berkesan sambil menangkap trend. Dengan menunggu isyarat “perlanjutan trend pertama” untuk masuk, strategi ini mengurangkan kemungkinan perdagangan palsu, sementara partial stop loss berdasarkan struktur pasaran menyediakan mekanisme perlindungan wang yang fleksibel.
Strategi ini sangat sesuai untuk persekitaran pasaran yang tidak menentu, trend yang jelas, dan mempunyai nilai rujukan yang tinggi untuk pedagang kuantitatif yang ingin memperkenalkan kawalan risiko yang lebih halus dalam perdagangan trend. Dengan mengoptimumkan lagi kaedah analisis struktur pasaran, penyesuaian parameter dinamik dan integrasi pelbagai rangka masa, strategi ini mempunyai banyak ruang untuk pembangunan dan penambahbaikan.
Akhirnya, penerapan strategi yang berjaya memerlukan pedagang yang mempunyai pemahaman yang mendalam tentang pasaran dan dapat menyesuaikan parameter yang sesuai dengan keadaan pasaran yang berbeza, meningkatkan fleksibiliti dan kestabilan strategi sambil mengekalkan logik teras strategi.
/*backtest
start: 2024-06-30 00:00:00
end: 2025-06-28 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":50000000}]
*/
//@version=5
// This strategy buys on the 'First Continuation' signal and adds a
// partial stop-loss that triggers on a lower-low and lower-high market structure break.
// This version corrects the 'strategy.close' argument error.
strategy("First Continuation Strategy w/ Partial SL (Corrected)",
overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
commission_type=strategy.commission.percent,
commission_value=0.1)
// --- INPUTS ---
emaLength = input.int(21, "Slow EMA Length")
shortEmaLength = input.int(8, "Fast EMA Length")
sensitivityMultiplier = input.float(1.5, title="Sensitivity Multiplier")
pivotLeft = input.int(5, title="Pivot Lookback Left")
pivotRight = input.int(5, title="Pivot Lookback Right")
// --- CALCULATIONS ---
ema21 = ta.ema(close, emaLength)
ema8 = ta.ema(close, shortEmaLength)
atr = ta.atr(14)
distance = close - ema21
threshold = atr * sensitivityMultiplier
// --- STATE MANAGEMENT ---
var bool inEmaUptrend = false, var bool inEmaDowntrend = false
var bool firstBuySignalFired = false, var bool firstSellSignalFired = false
var bool firstContinuationBuyFired = false, var bool firstContinuationSellFired = false
// State management for the new stop-loss logic
var float lastHigh = na, var float secondLastHigh = na
var float lastLow = na, var float secondLastLow = na
var bool partialStopTriggered = false
bool bullishCross = ta.crossover(ema8, ema21)
bool bearishCross = ta.crossunder(ema8, ema21)
// Reset state on trend changes
if (bullishCross)
inEmaUptrend := true, inEmaDowntrend := false
firstBuySignalFired := false, firstContinuationBuyFired := false
if (bearishCross)
inEmaUptrend := false, inEmaDowntrend := true
firstSellSignalFired := false, firstContinuationSellFired := false
// --- PIVOT & TRIGGER LOGIC ---
// Detect new swing points
float newPivotHigh = ta.pivothigh(high, pivotLeft, pivotRight)
float newPivotLow = ta.pivotlow(low, pivotLeft, pivotRight)
// If in a trade, track the last two swing points
if (strategy.position_size > 0)
if not na(newPivotHigh)
secondLastHigh := lastHigh
lastHigh := newPivotHigh
if not na(newPivotLow)
secondLastLow := lastLow
lastLow := newPivotLow
// Stop-Loss Condition: A confirmed lower high AND lower low have formed
bool marketStructureBreak = not na(lastHigh) and not na(secondLastHigh) and not na(lastLow) and not na(secondLastLow) and lastHigh < secondLastHigh and lastLow < secondLastLow
// Reset pivot history and stop-loss flag when position is closed
if (strategy.position_size == 0 and strategy.position_size[1] != 0)
lastHigh := na, secondLastHigh := na
lastLow := na, secondLastLow := na
partialStopTriggered := false
// Standard V8 Trigger Logic
bool isMomentumBar = math.abs(distance) >= (threshold / 1.5)
bool isPositiveMomentumBar = isMomentumBar and distance > 0
bool buySignal = inEmaUptrend and isPositiveMomentumBar
bool buyTrigger = buySignal and not buySignal[1]
bool initialBuyTrigger = buyTrigger and not firstBuySignalFired
bool firstContinuationBuy = buyTrigger and firstBuySignalFired and not firstContinuationBuyFired
if (initialBuyTrigger)
firstBuySignalFired := true
if (firstContinuationBuy)
firstContinuationBuyFired := true
// --- STRATEGY EXECUTION ---
// ENTRY: Buy only on the first continuation 'b' signal and when flat.
if (firstContinuationBuy and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
// PARTIAL EXIT (NEW): Close 50% of the position if market structure breaks down.
if (strategy.position_size > 0 and marketStructureBreak and not partialStopTriggered)
qtyToClose = strategy.position_size * 0.5
strategy.close(id="Long", qty=qtyToClose, comment="SL 50% on Structure Break") // CORRECTED ARGUMENT
partialStopTriggered := true // Ensure this only triggers once per trade
// FULL EXIT: Close any remaining position on a bearish cross.
if (strategy.position_size > 0 and bearishCross)
strategy.close("Long", comment="Exit on Bearish Cross")
// --- PLOTTING ---
plot(ema8, "Fast EMA", color=color.new(color.blue, 0), linewidth=2)
plot(ema21, "Slow EMA", color=color.new(color.orange, 0), linewidth=2)
// Plot pivots to visualize the market structure
plot(newPivotHigh, "Pivot High", color=color.new(color.red, 50), style=plot.style_circles, offset=-pivotRight)
plot(newPivotLow, "Pivot Low", color=color.new(color.green, 50), style=plot.style_circles, offset=-pivotRight)