Sistem pelacakan stop loss rantai investasi tetap cerdas persilangan rata-rata pergerakan eksponensial

EMA DCA ATR SO SL
Tanggal Pembuatan: 2025-04-16 15:30:15 Akhirnya memodifikasi: 2025-07-17 08:57:10
menyalin: 7 Jumlah klik: 387
2
fokus pada
319
Pengikut

Sistem pelacakan stop loss rantai investasi tetap cerdas persilangan rata-rata pergerakan eksponensial Sistem pelacakan stop loss rantai investasi tetap cerdas persilangan rata-rata pergerakan eksponensial

Ringkasan

Strategi ini menggunakan indikator moving average (EMA) untuk mengidentifikasi potensi tren naik, digabungkan dengan dollar cost averages (DCA) untuk melakukan penambahan taruhan yang cerdas, dan melindungi keuntungan melalui mekanisme penutupan taruhan ganda. Inti dari strategi ini adalah menggunakan persilangan EMA cepat dan EMA lambat untuk menentukan kapan masuk, secara otomatis mengerahkan hingga dua perintah keamanan (Safety Orders) ketika harga turun, meningkatkan posisi taruhan melalui rata-rata real range (ATR) atau perhitungan persentase tetap, dan menggunakan standar penutupan taruhan ganda (standar penutupan taruhan dan penutupan taruhan untuk penutupan taruhan) untuk melindungi dana.

Prinsip Strategi

Strategi ini didasarkan pada beberapa komponen utama:

  1. Mekanisme Identifikasi Tren: Menggunakan persilangan EMA cepat (default 9 cycle) dan EMA lambat (default 21 cycle) untuk mengidentifikasi tren naik potensial. Ketika EMA cepat naik melewati EMA lambat, sistem akan menghasilkan sinyal beli.

  2. Pesanan dasar dan amanStrategi ini menggunakan metode manajemen dana bertingkat, dimulai dengan pesanan dasar (default \( 1000) dan menambahkan dua pesanan keamanan tambahan ketika harga turun (default \) 1250 SO1, default $ 1750 SO2).

  3. Perhitungan jarak dinamisHarga yang dipicu dari perintah keamanan dapat dihitung dengan dua cara:

    • Jarak ATR: Menggunakan ATR dikalikan dengan kelipatan tertentu ((SO1 default 1,2 kali, SO2 default 2,5 kali) untuk menyesuaikan dengan fluktuasi pasar
    • Persentase penurunan harga menggunakan default ((SO1 default 4%, SO2 default 8%)
  4. Sistem Stop Loss Dual-Tracking:

    • Standar tracking stop loss: disetel menjadi persentase tertentu dari harga tertinggi (default 8%)
    • Tracking profit lock stop loss: diaktifkan ketika profit mencapai batas tertentu (default 2.5%), menggunakan persentase tracking yang lebih ketat (default 1.5%)
  5. Ketentuan KeluarStrategi ini berlaku untuk posisi terendah dalam situasi berikut:

    • Setiap tracking stop loss yang dipicu
    • EMA cepat ke bawah melewati EMA lambat (perubahan tren)
  6. Filter periode dan tanggal pendinginan: Strategi mencakup periode pendinginan setelah pesanan dasar (default 4 jam) dan filter tanggal yang dapat dipilih untuk membatasi pengukuran kembali atau melakukan periode waktu tertentu.

Keunggulan Strategis

Dari analisis kode strategi ini, kita dapat menyimpulkan beberapa keuntungan utama:

  1. Manajemen Dana AdaptifStrategi menggunakan rata-rata biaya dolar yang dikombinasikan dengan pesanan keamanan dinamis untuk secara otomatis menyesuaikan posisi sesuai dengan kondisi pasar. Metode ini sangat efektif di pasar yang bergejolak, dapat menurunkan harga masuk rata-rata dan meningkatkan potensi keuntungan.

  2. Penyesuaian posisi berdasarkan volatilitasDengan ATR, strategi dapat secara otomatis menyesuaikan interval penambahan posisi sesuai dengan fluktuasi pasar saat ini, lebih fleksibel daripada metode persentase tetap.

  3. Perlindungan laba gandaSistem Double Tracking Stop memberikan manajemen risiko yang inovatif, standar Tracking Stop melindungi sebagian besar dana, sedangkan mekanisme profit lock diaktifkan setelah mencapai target keuntungan tertentu, dengan persentase yang lebih ketat untuk melindungi keuntungan yang telah diperoleh.

  4. Seluruhnya dapat disesuaikanSemua parameter penting (panjang EMA, ukuran pesanan, persentase stop loss, interval pesanan aman) dapat disesuaikan dengan preferensi risiko pedagang dan kondisi pasar.

  5. Sistem peringatan dini terintegrasiStrategi ini berisi kondisi peringatan yang diformat dan dapat diintegrasikan dengan platform otomatisasi pihak ketiga (seperti 3Commas) untuk melakukan transaksi otomatis sepenuhnya.

  6. Transparansi informasi pelantikan: berisi tabel debug terperinci yang menampilkan indikator dan status perdagangan utama untuk pemantauan dan optimasi strategi secara real-time.

Risiko Strategis

Meskipun ada banyak keuntungan dari strategi ini, ada risiko potensial sebagai berikut:

  1. Risiko kehilangan danaDalam tren turun yang kuat, bahkan penarikan bertingkat dapat menyebabkan kerugian besar. Penarikan bisa lebih dari yang diharapkan, terutama jika volatilitas pasar meningkat secara tiba-tiba.

Solusi: Mengatur persentase tracking stop loss dan interval order aman sesuai dengan jenis transaksi dan kerangka waktu tertentu; Pertimbangkan untuk menambahkan stop loss global sebagai lapisan perlindungan tambahan.

  1. Parameter SensitivitasPerforma strategi sangat bergantung pada parameter EMA, ATR dan pengaturan tracking stop loss. Tidak tepatnya pengaturan parameter dapat menyebabkan keluar terlalu cepat dari tren yang baik atau terlalu terlambat keluar dari tren yang buruk.

Solusi: Melakukan pengembalian dan pengoptimalan yang menyeluruh untuk varietas transaksi dan kondisi pasar tertentu; menerapkan mekanisme penyesuaian parameter adaptif.

  1. Risiko dari perintah keamanan yang tidak diaktifkanDalam kasus bouncing cepat, perintah keamanan mungkin tidak akan pernah diaktifkan, menyebabkan kesempatan untuk melewatkan biaya rata-rata.

*Solusi*Pertimbangkan untuk menerapkan mekanisme pemicu pesanan keamanan yang lebih fleksibel, seperti eksekusi wajib berdasarkan waktu atau interval yang disesuaikan dengan kondisi pasar tertentu.

  1. Perdagangan berlebihanDalam pasar horizontal, EMA crossover dapat sering terjadi, yang menyebabkan overtrading dan peningkatan biaya komisi.

Solusi: Menambahkan filter perdagangan, seperti penurunan volatilitas atau konfirmasi kekuatan tren; memperpanjang periode pendinginan untuk mengurangi frekuensi perdagangan.

  1. Bergantung pada indikator teknisStrategi ini sepenuhnya bergantung pada EMA crossover dan tindakan harga, mengabaikan faktor-faktor mendasar dan kondisi pasar makro.

*Solusi*Pertimbangkan untuk mengintegrasikan filter dasar atau indikator sentimen risiko; tambahkan pemeriksaan relevansi lintas pasar sebagai sinyal konfirmasi.

Arah optimasi strategi

Berdasarkan analisis mendalam dari kode kebijakan, berikut adalah beberapa kemungkinan optimasi:

  1. Penyesuaian parameter adaptasi: Mekanisme untuk menyesuaikan panjang EMA dan ATR secara otomatis berdasarkan volatilitas pasar atau volume transaksi. Misalnya, menggunakan EMA yang lebih panjang dan ATR yang lebih besar dalam lingkungan yang sangat volatile, menggunakan EMA yang lebih pendek dan ATR yang lebih kecil dalam lingkungan yang kurang volatile. Ini akan meningkatkan kemampuan adaptasi strategi dalam berbagai kondisi pasar.

  2. Sinyal konfirmasi ganda: Tambahkan indikator konfirmasi tambahan, seperti RSI (Relative Strength Index), Transit Volume atau Brinks, untuk mengurangi sinyal palsu. Filter dapat diimplementasikan, yang memerlukan beberapa indikator teknis untuk mengkonfirmasi sinyal masuk secara bersamaan, sehingga meningkatkan kualitas sinyal.

  3. Pendistribusian Dana Dinamis: Menyesuaikan ukuran pesanan dengan kondisi pasar dan volatilitas historis. Misalnya, meningkatkan ukuran pesanan dasar pada fase pasar yang lebih rendah volatilitas atau lebih mungkin naik dalam sejarah, dan mengurangi dalam lingkungan berisiko tinggi.

  4. Strategi Keluar cerdasImplementasi mekanisme profit sharing yang memungkinkan pengunduran diri secara bertahap pada tingkat keuntungan yang berbeda, bukan posisi kosong satu kali. Hal ini dapat dicapai dengan menetapkan beberapa target keuntungan dan persentase pengunduran diri yang sesuai, mengoptimalkan rasio risiko-reward.

  5. Integrasi indikator emosiTambahkan analisis sentimen pasar, seperti indeks Fear and Greed atau analisis volume transaksi, sebagai filter tambahan untuk masuk dan keluar. Ini akan membantu strategi untuk menghindari transaksi yang tidak perlu selama periode sentimen pasar yang ekstrem.

  6. Manajemen eksposur risiko: Mempunyai fungsi untuk menghitung eksposur risiko maksimum secara dinamis (jumlah dari semua pesanan keamanan yang mungkin) dan menetapkan batas risiko maksimum yang dapat diterima. Ini akan memastikan bahwa strategi tidak terlalu banyak mengekspos dana pada satu transaksi kapan saja.

Meringkaskan

Sistem pelacakan stop loss berupa indeks mobile average crossover adalah strategi perdagangan kuantitatif yang dirancang dengan baik, yang menggabungkan deteksi tren, penanaman modal bertingkat, dan manajemen stop loss yang canggih. Keunggulan utamanya adalah kemampuan untuk beradaptasi dengan fluktuasi pasar, manajemen modal cerdas, dan sistem perlindungan keuntungan bertingkat dua. Strategi ini sangat cocok untuk lingkungan pasar yang cukup volatil, di mana tren memiliki konsistensi dan arah yang cukup.

Dengan optimasi parameter yang tepat dan penguatan rekomendasi, strategi ini dapat meningkatkan kinerja dan stabilitasnya lebih lanjut. Khususnya, penyesuaian parameter adaptif dan sinyal konfirmasi ganda dapat secara signifikan meningkatkan kualitas masuk, sementara alokasi dana dinamis dan strategi keluar cerdas dapat mengoptimalkan fitur pengembalian risiko.

Pada akhirnya, strategi ini mewakili pendekatan perdagangan kuantitatif yang seimbang, dengan fokus pada penghematan dana dan konsistensi, daripada mengejar keuntungan maksimal dari setiap perdagangan. Ini memberikan pedagang dengan kerangka kerja yang kuat yang dapat disesuaikan dengan preferensi risiko pribadi dan kondisi pasar, berpotensi untuk mencapai hasil perdagangan yang berkelanjutan dalam jangka panjang.

Kode 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)