
Sistem pengesanan stop loss rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai r
Strategi ini adalah berasaskan beberapa komponen utama:
Mekanisme pengenalan trendMenggunakan persilangan EMA pantas (siklus 9 lalai) dan EMA perlahan (siklus 21 lalai) untuk mengenal pasti trend menaik yang berpotensi. Apabila EMA pantas melintasi EMA perlahan ke atas, sistem akan menghasilkan isyarat beli.
Perintah asas dan perintah keselamatanStrategi menggunakan kaedah pengurusan dana bertingkat, bermula dengan pesanan asas (default \( 1,000) dan menambah dua pesanan keselamatan tambahan apabila harga turun (default \) 1,250 SO1, default $ 1,750 SO2).
Pengiraan jarak dinamik: Harga pencetus untuk pesanan keselamatan boleh dikira dengan dua cara:
Dual Tracking Stop Loss System:
Syarat keluarStrategi untuk melonggarkan posisi dalam keadaan berikut:
Penapis tempoh dan tarikh: Strategi mengandungi tempoh penyejukan selepas pesanan asas (default 4 jam) dan penapis tarikh pilihan untuk mengehadkan pengukuran semula atau melaksanakan tempoh masa tertentu.
Dengan mengkaji kod strategi ini secara mendalam, kita dapat menyimpulkan kelebihan utama berikut:
Pengurusan dana yang bersesuaianStrategi menggunakan purata kos dolar yang digabungkan dengan pesanan keselamatan dinamik untuk menyesuaikan kedudukan secara automatik mengikut keadaan pasaran. Kaedah ini sangat berkesan dalam pasaran yang bergolak, dapat menurunkan harga masuk purata dan meningkatkan potensi keuntungan.
Penyesuaian kedudukan berdasarkan turun naikDengan menggunakan ATR untuk mengira kedudukan pesanan keselamatan, strategi ini dapat menyesuaikan jarak kenaikan secara automatik mengikut turun naik pasaran semasa, lebih fleksibel daripada kaedah peratusan tetap.
Pelindungan keuntungan bergandaSistem Tracking Stop ganda menyediakan pengurusan risiko yang inovatif, dengan tracking stop standard melindungi sebahagian besar dana, dan mekanisme penguncian keuntungan diaktifkan setelah mencapai sasaran keuntungan tertentu, melindungi keuntungan yang diperoleh dengan peratusan yang lebih ketat.
Sesuai sepenuhnya: Semua parameter utama (panjang EMA, saiz pesanan, peratusan stop loss, jarak pesanan selamat) boleh disesuaikan dengan keutamaan risiko peniaga dan keadaan pasaran.
Sistem amaran awal bersepaduStrategi ini mengandungi syarat amaran berformat dan boleh diintegrasikan dengan platform automasi pihak ketiga (seperti 3Commas) untuk perdagangan automatik sepenuhnya.
Maklumat Pemulauan yang Terbuka: Mempunyai jadual pengawalan terperinci yang memaparkan indikator dan status perdagangan utama untuk pemantauan dan pengoptimuman strategi dalam masa nyata.
Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko yang berpotensi:
Penyelesaian: Sesuaikan peratusan tracking stop loss dan selang pesanan selamat mengikut jenis dan jangka masa perdagangan tertentu; pertimbangkan untuk menambah stop loss global sebagai lapisan perlindungan tambahan.
Penyelesaian: Ulasan dan pengoptimuman yang terperinci untuk jenis perdagangan dan keadaan pasaran tertentu; pelaksanaan mekanisme penyesuaian parameter penyesuaian.
*Penyelesaian*Pertimbangkan untuk melaksanakan mekanisme pemicu pesanan keselamatan yang lebih fleksibel, seperti penguatkuasaan berdasarkan masa atau penyesuaian selang dalam keadaan pasaran tertentu.
*Penyelesaian*Penambahan penapis dagangan, seperti penurunan turun naik atau pengesahan kekuatan trend; memanjangkan tempoh penyejukan untuk mengurangkan kekerapan dagangan.
*Penyelesaian*Pertimbangkan untuk mengintegrasikan penapis asas atau penunjuk sentimen risiko; Tambah pemeriksaan relevansi merentas pasaran sebagai isyarat pengesahan.
Berdasarkan analisis yang mendalam mengenai kod strategi, berikut adalah beberapa kemungkinan arah pengoptimuman:
Penyesuaian parameter: Mekanisme untuk menyesuaikan panjang EMA dan kelipatan ATR secara automatik berdasarkan turun naik pasaran atau jumlah transaksi. Sebagai contoh, menggunakan EMA yang lebih panjang dan kelipatan ATR yang lebih besar dalam persekitaran turun naik yang tinggi, menggunakan EMA yang lebih pendek dan kelipatan ATR yang lebih kecil dalam persekitaran turun naik yang rendah. Ini akan meningkatkan kebolehpasaran strategi dalam keadaan pasaran yang berbeza.
Isyarat pengesahan berganda: Tambahkan penunjuk pengesahan tambahan, seperti indeks kekuatan relatif ((RSI), kuantiti pertukaran atau pita Brin, untuk mengurangkan isyarat palsu. Filter boleh dilaksanakan, yang memerlukan beberapa penunjuk teknikal untuk mengesahkan isyarat masuk pada masa yang sama, untuk meningkatkan kualiti isyarat.
Peruntukan dana yang dinamik: Menyesuaikan saiz pesanan mengikut keadaan pasaran dan turun naik sejarah. Sebagai contoh, meningkatkan saiz pesanan asas pada tahap pasaran yang kurang turun naik atau lebih mungkin meningkat dalam sejarah, dan mengurangkannya dalam persekitaran berisiko tinggi.
Strategi Keluar Pintar: Mempunyai mekanisme keuntungan separa yang membolehkan pengeluaran beransur-ansur pada tahap keuntungan yang berbeza, dan bukan kedudukan kosong sekali. Ini boleh dicapai dengan menetapkan beberapa sasaran keuntungan dan peratusan pengeluaran yang sesuai, mengoptimumkan nisbah pulangan risiko.
Penunjuk emosi bersepaduMenambah analisis sentimen pasaran, seperti indeks ketakutan dan keserakahan atau analisis jumlah dagangan, sebagai penapis tambahan untuk masuk dan keluar. Ini akan membantu strategi untuk mengelakkan dagangan yang tidak perlu pada masa sentimen pasaran yang melampau.
Pengurusan pendedahan risiko: Mempunyai keupayaan untuk mengira pendedahan risiko maksimum secara dinamik (jumlah semua pesanan keselamatan yang mungkin) dan menetapkan had risiko maksimum yang boleh diterima. Ini akan memastikan strategi tidak mendedahkan dana secara berlebihan pada satu perdagangan pada bila-bila masa.
Sistem pengesanan stop loss berantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai
Dengan pengoptimuman parameter yang sesuai dan penambahan cadangan, strategi ini dapat meningkatkan lagi prestasinya dan kestabilan. Khususnya, penyesuaian parameter yang menyesuaikan diri dan isyarat pengesahan berganda mungkin meningkatkan kualiti kemasukan secara signifikan, manakala strategi peruntukan dana dinamik dan smart exit dapat mengoptimumkan ciri-ciri pulangan risiko.
Pada akhirnya, strategi ini mewakili pendekatan perdagangan kuantitatif yang seimbang, dengan fokus pada pemeliharaan dan keserasian dana, dan bukannya mengejar keuntungan maksimum setiap dagangan. Ia memberikan pedagang dengan rangka kerja yang kuat yang boleh disesuaikan dengan pilihan risiko dan keadaan pasaran individu, berpotensi untuk mencapai hasil dagangan yang mampan dalam jangka panjang.
/*backtest
start: 2025-04-15 00:00:00
end: 2025-07-13 19:30:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
*/
//@version=5
strategy(
title="DCA + Dual Trailing Strategy",
overlay=true
)
// --- Trend ---
fastMALen = input.int(9, title="Fast EMA Length")
slowMALen = input.int(21, title="Slow EMA Length")
// --- Trailing Stops ---
trailStopPerc = input.float(8.0, title="Standard Trailing Stop (%)", minval=0.1) / 100
lockInThreshold = input.float(2.5, title="Profit Lock-In Trigger (%)", minval=0.1) / 100
lockInTrailPct = input.float(1.5, title="Lock-In Trail (%) after Trigger", minval=0.1) / 100
// --- Safety Orders (SO) ---
useATRSpacing = input.bool(true, title="Use ATR-Based Spacing?")
atrLength = input.int(14, title="ATR Length", minval=1)
atrSo1Multiplier = input.float(1.2, title="ATR SO1 Multiplier", minval=0.1)
atrSo2Multiplier = input.float(2.5, title="ATR SO2 Multiplier", minval=0.1)
// --- Fallback SO Spacing (if not using ATR) ---
fallbackSo1Perc = input.float(4.0, title="Fallback SO1 Drop (%) ", minval=0.1) / 100
fallbackSo2Perc = input.float(8.0, title="Fallback SO2 Drop (%) ", minval=0.1) / 100
// --- Entry Cooldown ---
cooldownBars = input.int(4, "Cooldown Bars After Base Entry", minval=0)
// --- Order Sizes in USD ---
baseUsd = input.float(10000.0, title="Base Order Size (USD)", minval=1.0)
so1Usd = input.float(12500.0, title="Safety Order 1 Size (USD)", minval=1.0)
so2Usd = input.float(17500.0, title="Safety Order 2 Size (USD)", minval=1.0)
// 2) CALCULATIONS
// --- Trend & Reversal Detection ---
fastMA = ta.ema(close, fastMALen)
slowMA = ta.ema(close, slowMALen)
trendUp = ta.crossover(fastMA, slowMA)
trendDown = ta.crossunder(fastMA, slowMA)
// --- ATR Value ---
atrValue = ta.atr(atrLength)
// 3) BASE ENTRY LOGIC
// Base Buy Signal: EMA crossover
baseBuySignal = trendUp
var int lastBuyBar = na // Tracks the bar index of the last base entry
inCooldown = not na(lastBuyBar) and (bar_index - lastBuyBar < cooldownBars)
var float baseEntryPrice = na // Stores the price of the initial base entry for SO calculations
// --- Execute Base Entry ---
if baseBuySignal and strategy.position_size == 0 and not inCooldown
baseQty = baseUsd / close // Calculate quantity based on USD
strategy.order("Base Order", strategy.long, qty=baseQty, comment="Base Entry")
baseEntryPrice := close
lastBuyBar := bar_index
// 4) SAFETY ORDERS LOGIC
// --- Calculate SO Trigger Prices ---
float so1TriggerPrice = na
float so2TriggerPrice = na
if strategy.position_size > 0 // Only calculate if a base order has been placed
so1TriggerPrice := useATRSpacing ?
(baseEntryPrice - atrValue * atrSo1Multiplier) :
(baseEntryPrice * (1 - fallbackSo1Perc))
so2TriggerPrice := useATRSpacing ?
(baseEntryPrice - atrValue * atrSo2Multiplier) :
(baseEntryPrice * (1 - fallbackSo2Perc))
// --- Conditions for SO Execution ---
// Added 'inDateRange' check
// Ensure base order exists, price trigger hit, and the specific SO hasn't filled yet
bool so1Condition = strategy.position_size > 0 and close <= so1TriggerPrice and strategy.opentrades == 1
bool so2Condition = strategy.position_size > 0 and close <= so2TriggerPrice and strategy.opentrades == 2
// --- Execute SO1 ---
if so1Condition
so1Qty = so1Usd / close // Calculate quantity based on USD
strategy.order("Safety Order 1", strategy.long, qty=so1Qty, comment="SO1")
// --- Execute SO2 ---
if so2Condition
so2Qty = so2Usd / close // Calculate quantity based on USD
strategy.order("Safety Order 2", strategy.long, qty=so2Qty, comment="SO2")
// 5) AVERAGE ENTRY PRICE
// Use the built-in variable for the average price of the open position
avgEntryPrice = strategy.position_avg_price
// 6) DUAL TRAILING STOP LOGIC
// Variables to track trailing stop levels and states
var float highestSinceEntry = na
var float trailStopPrice = na
var bool stopHitNormal = false
var bool lockInTriggered = false
var float lockInPeak = na
var float lockInStopPrice = na
var bool stopHitLockIn = false
// --- Update Trailing Logic when in a Position ---
if strategy.position_size > 0
// --- Standard Trail ---
highestSinceEntry := na(highestSinceEntry) ? close : math.max(highestSinceEntry, close)
trailStopPrice := highestSinceEntry * (1 - trailStopPerc)
stopHitNormal := close < trailStopPrice
// --- Lock-In Trail ---
if not lockInTriggered and close >= avgEntryPrice * (1 + lockInThreshold)
lockInTriggered := true
lockInPeak := close
if lockInTriggered
lockInPeak := math.max(lockInPeak, close)
lockInStopPrice := lockInPeak * (1 - lockInTrailPct)
stopHitLockIn := close < lockInStopPrice
else
stopHitLockIn := false
lockInStopPrice := na
// --- Reset Variables when Flat ---
else
highestSinceEntry := na
trailStopPrice := na
stopHitNormal := false
lockInTriggered := false
lockInPeak := na
lockInStopPrice := na
stopHitLockIn := false
// lastBuyBar is intentionally NOT reset here, cooldown depends on it
// 7) EXIT CONDITIONS
// Added 'inDateRange' check
// Exit if either trailing stop is hit OR if the trend reverses downward
exitCondition = (stopHitNormal or stopHitLockIn or trendDown) and strategy.position_size > 0
if exitCondition
strategy.close_all(comment="Exit: SL / LockIn / TrendDown")
// 9) PLOTS & DEBUG TABLE
// --- Plot MAs ---
plot(fastMA, color=color.new(color.green, 0), title="Fast EMA", linewidth=2)
plot(slowMA, color=color.new(color.red, 0), title="Slow EMA", linewidth=2)
// --- Plot Trailing Stops ---
plot(strategy.position_size > 0 ? trailStopPrice : na, color=color.new(color.orange, 0), title="Standard Trailing Stop", style=plot.style_linebr, linewidth=2)
plot(lockInTriggered ? lockInStopPrice : na, color=color.new(color.fuchsia, 0), title="Lock-In Trailing Stop", style=plot.style_linebr, linewidth=2)