Sistem penjejakan henti kerugian rantaian pelaburan tetap pintar bersilang eksponen bergerak silang

EMA DCA ATR SO SL
Tarikh penciptaan: 2025-04-16 15:30:15 Akhirnya diubah suai: 2025-07-17 08:57:10
Salin: 7 Bilangan klik: 387
2
fokus pada
319
Pengikut

Sistem penjejakan henti kerugian rantaian pelaburan tetap pintar bersilang eksponen bergerak silang Sistem penjejakan henti kerugian rantaian pelaburan tetap pintar bersilang eksponen bergerak silang

Gambaran keseluruhan

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

Prinsip Strategi

Strategi ini adalah berasaskan beberapa komponen utama:

  1. 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.

  2. 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).

  3. Pengiraan jarak dinamik: Harga pencetus untuk pesanan keselamatan boleh dikira dengan dua cara:

    • Jarak ATR: Gunakan ATR kali ganda dengan kelipatan tertentu ((SO1 default 1.2 kali ganda, SO2 default 2.5 kali ganda) untuk menyesuaikan diri dengan pergerakan pasaran
    • Jarak peratusan tetap: Peratusan penurunan harga menggunakan tetapan ((SO1 default 4%, SO2 default 8%)
  4. Dual Tracking Stop Loss System:

    • Standard Tracking Stop Loss: ditetapkan sebagai peratusan tertentu dari harga maksimum (default 8%)
    • Tracking profit lock stop loss: diaktifkan apabila keuntungan mencapai tahap tertentu (default 2.5%), menggunakan peratusan pengesanan yang lebih ketat (default 1.5%)
  5. Syarat keluarStrategi untuk melonggarkan posisi dalam keadaan berikut:

    • Mana-mana Tracking Stop Loss yang dicetuskan
    • EMA pantas ke bawah merentasi EMA perlahan ((kebalikan trend)
  6. 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.

Kelebihan Strategik

Dengan mengkaji kod strategi ini secara mendalam, kita dapat menyimpulkan kelebihan utama berikut:

  1. 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.

  2. 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.

  3. 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.

  4. Sesuai sepenuhnya: Semua parameter utama (panjang EMA, saiz pesanan, peratusan stop loss, jarak pesanan selamat) boleh disesuaikan dengan keutamaan risiko peniaga dan keadaan pasaran.

  5. Sistem amaran awal bersepaduStrategi ini mengandungi syarat amaran berformat dan boleh diintegrasikan dengan platform automasi pihak ketiga (seperti 3Commas) untuk perdagangan automatik sepenuhnya.

  6. Maklumat Pemulauan yang Terbuka: Mempunyai jadual pengawalan terperinci yang memaparkan indikator dan status perdagangan utama untuk pemantauan dan pengoptimuman strategi dalam masa nyata.

Risiko Strategik

Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko yang berpotensi:

  1. Risiko kehilangan wang: Dalam trend penurunan yang kuat, walaupun kenaikan pangkat boleh menyebabkan kerugian yang serius. Penarikan balik mungkin melebihi jangkaan, terutamanya jika turun naik pasaran tiba-tiba meningkat.

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.

  1. Kepekaan ParameterPrestasi strategi sangat bergantung kepada parameter EMA, ATR dan seting stop loss. Seting parameter yang tidak betul boleh menyebabkan keluar terlalu awal dari trend yang baik atau keluar terlalu lewat dari trend yang buruk.

Penyelesaian: Ulasan dan pengoptimuman yang terperinci untuk jenis perdagangan dan keadaan pasaran tertentu; pelaksanaan mekanisme penyesuaian parameter penyesuaian.

  1. Risiko perintah keselamatan yang tidak diaktifkanDalam kes yang cepat, pesanan keselamatan mungkin tidak akan diaktifkan, menyebabkan peluang untuk kehilangan kos purata.

*Penyelesaian*Pertimbangkan untuk melaksanakan mekanisme pemicu pesanan keselamatan yang lebih fleksibel, seperti penguatkuasaan berdasarkan masa atau penyesuaian selang dalam keadaan pasaran tertentu.

  1. Perniagaan berlebihanEMA crossovers boleh berlaku dengan kerap dalam pasaran setapak, menyebabkan kelebihan dagangan dan kos komisen meningkat.

*Penyelesaian*Penambahan penapis dagangan, seperti penurunan turun naik atau pengesahan kekuatan trend; memanjangkan tempoh penyejukan untuk mengurangkan kekerapan dagangan.

  1. Bergantung kepada petunjuk teknikalStrategi ini bergantung sepenuhnya pada EMA dan pergerakan harga, mengabaikan faktor asas dan keadaan pasaran makro.

*Penyelesaian*Pertimbangkan untuk mengintegrasikan penapis asas atau penunjuk sentimen risiko; Tambah pemeriksaan relevansi merentas pasaran sebagai isyarat pengesahan.

Arah pengoptimuman strategi

Berdasarkan analisis yang mendalam mengenai kod strategi, berikut adalah beberapa kemungkinan arah pengoptimuman:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

ringkaskan

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.

Kod sumber strategi
/*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)