Strategi DCA pelacakan volatilitas cerdas dan sistem stop loss jalur ganda

EMA ATR DCA USD SO
Tanggal Pembuatan: 2025-04-14 18:18:25 Akhirnya memodifikasi: 2025-04-14 18:18:25
menyalin: 0 Jumlah klik: 521
2
fokus pada
319
Pengikut

Strategi DCA pelacakan volatilitas cerdas dan sistem stop loss jalur ganda Strategi DCA pelacakan volatilitas cerdas dan sistem stop loss jalur ganda

Ringkasan

Strategi ini adalah strategi Smart Dollar Cost Average (DCA) yang didasarkan pada indikator moving average (EMA) cross-signal, yang menggabungkan perintah aman (SO) yang beradaptasi dengan volatilitas dan mekanisme stop loss dua jalur yang inovatif. Strategi ini memasuki pasar ketika tren naik dikonfirmasi, dan kemudian secara otomatis mengerahkan perintah aman tambahan sesuai dengan volatilitas pasar, sambil menggunakan standar untuk melacak stop loss dan melakukan pelacakan penguncian keuntungan untuk melindungi keuntungan. Strategi ini cocok untuk beroperasi di lingkungan pasar yang sangat berfluktuasi, terutama dioptimalkan untuk jangka waktu 1 jam, dengan total modal $ 4000 untuk perdagangan.

Prinsip Strategi

Logika inti dari strategi ini berkisar pada beberapa komponen utama:

  1. Sistem pengenalan tren: Menggunakan persilangan EMA cepat (default 9 cycle) dan EMA lambat (default 21 cycle) untuk mengidentifikasi potensi tren naik. Ketika EMA cepat naik melewati EMA lambat, sistem mengkonfirmasi tren naik dan memicu entry order dasar.

  2. Sistem akses DCA berlapis-lapisStrategi ini menggunakan mekanisme masuk dengan tiga tingkat:

    • Pesanan dasar (USD 1000): Pesan saat EMA mengkonfirmasi sinyal silang
    • Order aman 1 ((US$1250): dipicu ketika harga turun dari harga order dasar
    • Order aman 2 (US$1750): dipicu jika harga terus turun ke level yang lebih rendah
  3. Adaptasi Volatil: Harga pemicu order aman dapat dihitung secara dinamis berdasarkan ATR (rata-rata real range) indikator, sehingga strategi dapat secara otomatis menyesuaikan posisi masuk sesuai dengan fluktuasi pasar saat ini. Pengguna dapat memilih untuk menggunakan kelipatan ATR (default SO1 = 1,2 kali ATR, SO2 = 2,5 kali ATR) atau penurunan persentase tetap (default SO1 = 4%, SO2 = 8%) untuk menghitung titik pemicu order aman.

  4. Sistem Perlindungan Kerusakan Dua Rel:

    • Standar Tracking Stop: melacak harga tertinggi setelah entry, diatur pada posisi persentase tetap dari puncak (default 8%)
    • Tracking profit lock-off: diaktifkan ketika posisi mencapai margin profit tertentu (default 2.5%), menggunakan persentase tracking yang lebih ketat (default 1.5%) untuk mengunci keuntungan yang telah dicapai secara lebih aktif
  5. Mekanisme periode pendinginan: Implementasi periode pendinginan setelah eksekusi order dasar ((default 4 K line) untuk mencegah overtrading dalam waktu singkat.

Keunggulan Strategis

Setelah dianalisis, strategi ini menunjukkan keuntungan yang signifikan sebagai berikut:

  1. AdaptifDengan menggunakan ATR untuk menghitung harga pemicu order aman, strategi dapat secara cerdas beradaptasi dengan berbagai lingkungan pasar yang berfluktuasi, dengan cara memperluas interval order aman pada periode fluktuasi tinggi dan memperketat interval pada periode fluktuasi rendah.

  2. Pengelolaan dana yang optimal: Menggunakan alokasi modal yang meningkat ((US\(1000→US\)1250→US$1750), sesuai dengan prinsip manajemen posisi “piramida”, sehingga strategi dapat memperoleh harga masuk rata-rata yang lebih baik dengan skala modal yang lebih besar ketika harga turun.

  3. Mekanisme perlindungan gandaSistem Stop Loss Dual Track yang inovatif memberikan perlindungan terhadap risiko penurunan yang mendasar, dan dapat secara otomatis beralih ke mode Stop Loss yang lebih konservatif pada saat keuntungan, secara efektif menyeimbangkan maksimalisasi keuntungan dengan kontrol risiko.

  4. Fleksibilitas kustomisasiSemua parameter penting dapat disesuaikan, termasuk siklus EMA, panjang ATR, interval aman, stop loss ratio, dan ukuran pesanan, yang memungkinkan pedagang untuk mengoptimalkan sesuai dengan preferensi risiko pribadi dan kondisi pasar.

  5. IntegrasiStrategi ini memiliki kondisi peringatan yang diformat sebagai pesan JSON untuk memudahkan integrasi dengan platform perdagangan otomatis pihak ketiga (seperti 3Commas) untuk eksekusi perdagangan yang sepenuhnya otomatis.

Risiko Strategis

Meskipun strategi ini dirancang secara menyeluruh, risiko dan tantangan potensial yang dihadapi adalah:

  1. Risiko pembalikan trenStrategi bergantung pada sinyal EMA yang berselang, yang dapat menghasilkan sinyal yang salah dalam pasar yang berubah cepat atau pasar yang bergoyang, yang menyebabkan masuk yang tidak perlu. Solusinya adalah dengan menyesuaikan panjang siklus EMA atau menambahkan indikator konfirmasi tambahan.

  2. Risiko pengurangan danaDalam pasar yang terus turun, harga masuk rata-rata masih bisa jauh lebih tinggi dari harga pasar, bahkan dengan semua pesanan aman yang ditempatkan, yang menyebabkan kerugian jangka panjang. Disarankan untuk menetapkan batas kerugian maksimum atau batas ukuran posisi keseluruhan.

  3. Risiko Terlalu Banyak BerdagangDalam pasar yang bergejolak, EMA dapat sering berselisih dan memicu terlalu banyak transaksi. Meskipun ada mekanisme periode pendinginan yang dibangun, mungkin perlu lebih banyak pengoptimalan atau tambahan batasan frekuensi transaksi.

  4. Kerusakan dua jalur saling menggangguDalam beberapa situasi pasar, kedua mekanisme stop loss dapat saling mengganggu, menyebabkan keluar prematur atau sinyal berulang. Keseimbangan antara kedua parameter stop loss ini harus diperiksa dan disesuaikan secara teratur.

  5. Kesulitan mengoptimalkan parameter: Berbagai parameter dari strategi perlu saling berkoordinasi untuk mencapai efek optimal, meningkatkan kompleksitas optimasi parameter. Analisis parameter yang komprehensif dianjurkan untuk menggunakan alat optimasi feedback.

Arah optimasi strategi

Berdasarkan analisis mendalam dari kode, berikut adalah arah optimasi potensial dari strategi ini:

  1. Memperkenalkan mekanisme pengakuan tren gandaStrategi saat ini hanya mengandalkan satu sinyal EMA yang bersilang, dan pertimbangkan untuk menambahkan indikator konfirmasi tren tambahan, seperti RSI, MACD, atau penilaian tren periode yang lebih lama, untuk mengurangi sinyal yang salah. Melakukan hal ini secara signifikan mengurangi risiko terjadinya false breakout.

  2. Sistem pendanaan yang dinamisStrategi saat ini menggunakan jumlah dolar tetap sebagai ukuran pesanan, yang dapat dioptimalkan untuk sistem penyesuaian dinamis berdasarkan volatilitas pasar atau kepentingan akun, untuk memastikan bahwa tingkat eksposur risiko yang tepat dipertahankan dalam berbagai kondisi pasar.

  3. Strategi Keluar dari Stop Loss Optimis: Logika stop loss yang lebih kompleks dapat dikembangkan, seperti stop loss tracking yang beradaptasi berdasarkan volatilitas pasar, atau pengintegrasian volume gerak dan volume transaksi untuk mengoptimalkan keputusan keluar, menghindari keluar terlalu dini dalam fluktuasi jangka pendek.

  4. Penarikan kontrol: Tambahkan fitur pembatasan total penarikan yang secara otomatis menghentikan pesanan baru atau menutup posisi yang ada ketika strategi mencapai persentase penarikan maksimum yang telah ditentukan, untuk mencegah kerugian yang dahsyat dalam kondisi pasar yang ekstrem.

  5. Sistem optimasi siklus: Mengembangkan fitur optimasi siklus otomatis yang memungkinkan strategi untuk secara otomatis menyesuaikan panjang EMA, siklus ATR, dan parameter terkait waktu lainnya berdasarkan kondisi pasar baru-baru ini untuk menyesuaikan dengan perubahan kondisi pasar.

Meringkaskan

“Strategi DCA Tracking dan Dual Track Stop” adalah skema perdagangan kuantitatif yang dirancang dengan baik, yang sangat cocok untuk menangkap tren naik dan mengelola risiko di pasar yang berfluktuasi. Ini dengan cerdik menggabungkan pelacakan tren, rata-rata biaya dolar dan mekanisme adaptasi fluktuasi, dan melindungi keuntungan dengan sistem stop loss dua jalur yang inovatif.

Keunggulan inti dari strategi ini adalah keseimbangan antara fleksibilitas dan manajemen risiko, yang memungkinkan untuk secara otomatis menyesuaikan keputusan masuk dan keluar dalam berbagai lingkungan pasar. Dengan menggunakan ATR untuk secara dinamis menghitung trigger order aman, strategi dapat bereaksi secara cerdas berdasarkan kondisi pasar real-time, bukan bergantung pada parameter statis yang telah ditetapkan.

Meskipun ada potensi risiko dalam identifikasi tren dan pengelolaan dana, ini dapat diatasi secara efektif dengan arah optimasi yang diusulkan. Khususnya, pengenalan multiple identifikasi tren dan sistem alokasi dana dinamis akan secara signifikan meningkatkan ketahanan strategi dan kinerja jangka panjang.

Strategi ini menyediakan kerangka kerja yang komprehensif dan dapat diperluas bagi pedagang kuantitatif yang mencari metode perdagangan yang sistematis di pasar yang bergejolak, yang dapat menangkap peluang tren naik dan memberikan perlindungan risiko yang memadai dalam kondisi pasar yang tidak menguntungkan.

Kode Sumber Strategi
/*backtest
start: 2025-03-14 00:00:00
end: 2025-04-02 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy(
     title="BONK/USD (1H) - $4k DCA + Dual Trailing + Date Filter", // Updated Title
     overlay=true,
     initial_capital=4000,
     currency=currency.USD,
     default_qty_type=strategy.fixed,
     default_qty_value=0, // Quantity calculated dynamically based on USD value
     commission_type=strategy.commission.percent, // Example: Add commission settings
     commission_value=0.1 // Example: 0.1% commission
     )

// 1) USER INPUTS (Defaults adjusted for 1H timeframe - REQUIRES BACKTESTING/TUNING)


// --- Trend ---
fastMALen = input.int(9, title="Fast EMA Length (Default for 1H)")
slowMALen = input.int(21, title="Slow EMA Length (Default for 1H)")

// --- Trailing Stops ---
trailStopPerc   = input.float(8.0, title="Standard Trailing Stop (%) (Default for 1H)", minval=0.1) / 100
lockInThreshold = input.float(2.5,  title="Profit Lock-In Trigger (%) (Default for 1H)", minval=0.1) / 100
lockInTrailPct  = input.float(1.5,  title="Lock-In Trail (%) after Trigger (Default for 1H)", 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 (Default for 1H)", minval=0.1)
atrSo2Multiplier  = input.float(2.5, title="ATR SO2 Multiplier (Default for 1H)", minval=0.1)

// --- Fallback SO Spacing (if not using ATR) ---
fallbackSo1Perc = input.float(4.0,  title="Fallback SO1 Drop (%) (Default for 1H)", minval=0.1) / 100
fallbackSo2Perc = input.float(8.0, title="Fallback SO2 Drop (%) (Default for 1H)", minval=0.1) / 100

// --- Entry Cooldown ---
cooldownBars = input.int(4, "Cooldown Bars After Base Entry (Default for 1H)", minval=0)

// --- Order Sizes in USD ---
baseUsd = input.float(1000.0, title="Base Order Size (USD)", minval=1.0)
so1Usd  = input.float(1250.0, title="Safety Order 1 Size (USD)", minval=1.0)
so2Usd  = input.float(1750.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 ---
// Added 'inDateRange' to the condition
if baseBuySignal and strategy.position_size == 0 and not inCooldown
    baseQty = baseUsd / close // Calculate quantity based on USD
    strategy.entry("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 not na(baseEntryPrice) // 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 = not na(baseEntryPrice) and strategy.position_size > 0 and close <= so1TriggerPrice and strategy.opentrades == 1
bool so2Condition = not na(baseEntryPrice) and strategy.position_size > 0 and close <= so2TriggerPrice and strategy.opentrades == 2

// --- Execute SO1 ---
if so1Condition
    so1Qty = so1Usd / close // Calculate quantity based on USD
    strategy.entry("Safety Order 1", strategy.long, qty=so1Qty, comment="SO1")

// --- Execute SO2 ---
if so2Condition
    so2Qty = so2Usd / close // Calculate quantity based on USD
    strategy.entry("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

    baseEntryPrice    := na
    // 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, within the active date range
exitCondition = (stopHitNormal or stopHitLockIn or trendDown) and strategy.position_size > 0

if exitCondition
    strategy.close_all(comment="Exit: SL / LockIn / TrendDown")

// 8) ALERT CONDITIONS (Potential 3Commas Integration)
// WARNING: Verify and adapt these JSON message strings for your specific 3Commas bot configuration!
//          The required format ('action', parameters, etc.) can vary.

// Added 'inDateRange[1]' check for Base Alert
alertcondition(inDateRange[1] and baseBuySignal and strategy.position_size[1] == 0 and not inCooldown[1],
     title="Base Buy Alert",
     message='{"action":"start_deal","order":"base"} // Verify/Adapt JSON for your 3Commas bot!')

// Added 'inDateRange' check for SO1 Alert
alertcondition(so1Condition, title="SO1 Alert",
     message='{"action":"add_funds","order":"so1"} // Verify/Adapt JSON for your 3Commas bot!')

// Added 'inDateRange' check for SO2 Alert
alertcondition(so2Condition, title="SO2 Alert",
     message='{"action":"add_funds","order":"so2"} // Verify/Adapt JSON for your 3Commas bot!')

// Added 'inDateRange' check for Exit Alert
alertcondition(exitCondition, title="Exit Alert",
     message='{"action":"close_at_market_price"} // Verify/Adapt JSON for your 3Commas bot!')


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

// --- Debug Info Table ---
var table tradeInfo = table.new(position=position.bottom_right, columns=2, rows=10, border_width=1)