Strategi DCA pengesanan volatiliti pintar dan sistem henti rugi dwi-landasan

EMA ATR DCA USD SO
Tarikh penciptaan: 2025-04-14 18:18:25 Akhirnya diubah suai: 2025-04-14 18:18:25
Salin: 0 Bilangan klik: 521
2
fokus pada
319
Pengikut

Strategi DCA pengesanan volatiliti pintar dan sistem henti rugi dwi-landasan Strategi DCA pengesanan volatiliti pintar dan sistem henti rugi dwi-landasan

Gambaran keseluruhan

Strategi ini adalah strategi Smart Dollar Cost Average (DCA) yang berasaskan indeks moving average (EMA) cross-signal, yang menggabungkan perintah keselamatan yang beradaptasi dengan turun naik (SO) dan mekanisme berhenti dua hala yang inovatif. Ia memasuki pasaran apabila trend naik disahkan, dan kemudian secara automatik mengerahkan pesanan keselamatan tambahan mengikut turun naik pasaran, sambil menggunakan standard tracking stop loss dan pelacakan pelacakan keuntungan untuk melindungi keuntungan.

Prinsip Strategi

Logik utama strategi ini berpusat pada beberapa komponen utama:

  1. Sistem Pengiktirafan Trend: Menggunakan persilangan EMA pantas ((kelas 9) dan EMA perlahan (kelas 21) untuk mengenal pasti potensi kenaikan. Apabila EMA pantas melintasi EMA perlahan ke atas, sistem mengesahkan kenaikan dan mencetuskan pesanan masuk asas.

  2. Sistem masuk DCA bertingkatStrategi ini menggunakan tiga tahap kemasukan:

    • Pesanan asas (USD 1,000): Pesanan pada pengesahan isyarat silang EMA
    • Pesanan keselamatan 1 ((US $ 1250): dipicu apabila harga turun dari harga pesanan asas
    • Pesanan Keselamatan 2 (($1750): Trigger apabila harga terus turun ke tahap yang lebih rendah
  3. Mekanisme penyesuaian yang tidak menentu: Harga pemicu pesanan keselamatan boleh dikira secara dinamik berdasarkan ATR ((rangkaian sebenar rata-rata), yang membolehkan strategi menyesuaikan kedudukan masuk secara automatik mengikut turun naik pasaran semasa. Pengguna boleh memilih untuk menggunakan kelipatan ATR ((SO1 default adalah 1.2 kali ATR, SO2 adalah 2.5 kali ATR) atau penurunan peratusan tetap ((SO1 default adalah 4%, SO2 adalah 8%) untuk mengira titik pemicu pesanan keselamatan.

  4. Sistem Perlindungan Kerosakan Dua Rel:

    • Standard Tracking Stop Loss: Menjejaki harga tertinggi selepas masuk ke dalam pasaran, diletakkan pada peratusan tetap dari puncak (default 8%)
    • Tracking profit lock stop loss: diaktifkan apabila kedudukan mencapai margin keuntungan tertentu (default 2.5%), menggunakan peratusan pengesanan yang lebih ketat (default 1.5%) untuk mengunci keuntungan yang dicapai dengan lebih aktif
  5. Mekanisme tempoh sejuk: Pelaksanaan tempoh penyejukan selepas pelaksanaan pesanan asas ((default 4 K line), untuk mengelakkan terlalu banyak perdagangan dalam masa yang singkat.

Kelebihan Strategik

Setelah dianalisis, strategi ini menunjukkan kelebihan yang ketara:

  1. Kebolehan menyesuaikan diriDengan menggunakan ATR untuk mengira harga yang mencetuskan pesanan keselamatan, strategi ini dapat menyesuaikan diri dengan bijak dengan keadaan pasaran yang berbeza, dengan cara yang sesuai untuk melebarkan jarak pesanan keselamatan pada masa turun naik tinggi dan menutup jarak pada masa turun naik rendah.

  2. Pengurusan wang yang lebih baikMenggunakan pembahagian modal yang meningkat ((US \( 1000 → US \) 1250 → US $ 1750), sesuai dengan prinsip pengurusan kedudukan “pyramidal”, membolehkan strategi mendapatkan harga kemasukan purata yang lebih baik dengan skala modal yang lebih besar apabila harga turun.

  3. Mekanisme perlindungan berlapis duaSistem penangguhan dua hala yang inovatif menyediakan perlindungan risiko rendah asas dan secara automatik beralih ke mod penangguhan yang lebih konservatif semasa keuntungan, dengan berkesan mengimbangi pengoptimuman keuntungan dan kawalan risiko.

  4. Kelayakan untuk menyesuaikan diriSemua parameter utama boleh disesuaikan, termasuk kitaran EMA, panjang ATR, jarak pesanan selamat, nisbah hentian dan saiz pesanan, yang membolehkan peniaga mengoptimumkan mengikut pilihan risiko peribadi dan keadaan pasaran.

  5. Integrasi: Strategi ini mempunyai syarat amaran yang diformat sebagai mesej JSON untuk memudahkan integrasi dengan platform perdagangan automatik pihak ketiga (seperti 3Commas) untuk melaksanakan transaksi automatik sepenuhnya.

Risiko Strategik

Walaupun strategi ini dirancang secara menyeluruh, terdapat risiko dan cabaran yang berpotensi:

  1. Risiko pembalikan arah aliranStrategi bergantung kepada isyarat silang EMA, yang boleh menghasilkan isyarat yang salah dalam pasaran yang berubah dengan cepat atau di pasaran yang bergolak, yang menyebabkan kemasukan yang tidak perlu. Penyelesaian adalah dengan menyesuaikan panjang kitaran EMA atau menambah penunjuk pengesahan tambahan.

  2. Risiko pengeluaran danaDalam pasaran yang terus menurun, walaupun semua pesanan keselamatan telah digunakan, harga masuk purata mungkin jauh lebih tinggi daripada harga pasaran, menyebabkan kerugian jangka panjang.

  3. Risiko perdagangan berlebihanDalam pasaran yang bergolak, EMA mungkin sering berselisih dan mencetuskan terlalu banyak dagangan. Walaupun terdapat mekanisme tempoh sejuk yang terbina dalam, mungkin perlu mengoptimumkan lebih lanjut atau menambah had frekuensi dagangan tambahan.

  4. Kerosakan dua jalur mengganggu satu sama lain: Dalam keadaan pasaran tertentu, kedua-dua mekanisme hentian boleh saling mengganggu, menyebabkan keluar awal atau berulang isyarat. Keseimbangan antara kedua-dua parameter hentian ini harus dinilai semula dan disesuaikan secara berkala.

  5. Kesukaran mengoptimumkan parameter: Pelbagai parameter strategi perlu berkoordinasi antara satu sama lain untuk mencapai kesan terbaik, meningkatkan kerumitan pengoptimuman parameter. Analisis parameter menyeluruh disyorkan menggunakan alat pengoptimuman feedback.

Arah pengoptimuman strategi

Berdasarkan analisis mendalam mengenai kod, berikut adalah arah yang berpotensi untuk pengoptimuman strategi:

  1. Memperkenalkan mekanisme pengesahan pelbagai trendStrategi semasa hanya bergantung pada satu isyarat EMA yang bersilang. Anda boleh mempertimbangkan untuk menambah indikator pengesahan trend tambahan seperti RSI, MACD atau penghakiman trend untuk tempoh yang lebih lama untuk mengurangkan isyarat yang salah. Dengan berbuat demikian, anda dapat mengurangkan risiko penembusan palsu.

  2. Sistem peruntukan dana yang dinamikStrategi semasa menggunakan jumlah dolar tetap sebagai saiz pesanan yang boleh dioptimumkan untuk sistem penyesuaian dinamik berdasarkan turun naik pasaran atau kepentingan hak akaun, memastikan tahap pendedahan risiko yang sesuai dikekalkan dalam keadaan pasaran yang berbeza.

  3. Strategi keluar rugi yang dioptimumkanLogik hentian yang lebih kompleks boleh dibangunkan, seperti hentian pengesanan yang disesuaikan berdasarkan turun naik pasaran, atau integrasi metrik kuantiti dan kuantiti transaksi untuk mengoptimumkan keputusan keluar untuk mengelakkan keluar terlalu awal dalam turun naik jangka pendek.

  4. Pengendalian penarikan balik: Tambah fungsi had penarikan balik keseluruhan yang secara automatik menangguhkan pesanan baru atau menutup kedudukan sedia ada apabila strategi mencapai peratusan penarikan balik maksimum yang ditetapkan, untuk mengelakkan kerugian yang dahsyat dalam keadaan pasaran yang melampau.

  5. Sistem pengoptimuman kitaranPembangunan ciri pengoptimuman kitaran automatik yang membolehkan strategi menyesuaikan secara automatik panjang EMA, kitaran ATR dan parameter lain yang berkaitan dengan masa berdasarkan keadaan pasaran terkini untuk menyesuaikan diri dengan perubahan keadaan pasaran.

ringkaskan

“Strategi DCA Tracking Smart dengan Sistem Stop Loss Dual Track” adalah rancangan perdagangan kuantitatif yang direka dengan baik, yang sangat sesuai untuk menangkap trend naik dan menguruskan risiko di pasaran yang tidak menentu. Ia menggabungkan dengan bijak trend tracking, rata-rata kos dolar dan mekanisme penyesuaian kadar turun naik, dan melindungi keuntungan dengan sistem stop loss dua jalur yang inovatif.

Kelebihan utama strategi ini adalah keseimbangan antara fleksibiliti dan pengurusan risiko, yang dapat menyesuaikan keputusan masuk dan keluar secara automatik dalam keadaan pasaran yang berbeza. Dengan menggunakan ATR untuk mengira titik pemicu pesanan keselamatan secara dinamik, strategi ini dapat bertindak balas secara pintar berdasarkan keadaan pasaran masa nyata, dan bukannya bergantung pada parameter statik yang telah ditetapkan.

Walaupun terdapat risiko yang berpotensi dalam pengiktirafan trend dan pengurusan dana, ini dapat dikurangkan dengan berkesan melalui arah pengoptimuman yang dicadangkan. Terutamanya, pengenalan pelbagai trend pengiktirafan dan sistem pengagihan dana dinamik akan meningkatkan kestabilan strategi dan prestasi jangka panjang.

Bagi peniaga kuantitatif yang mencari cara untuk berdagang secara sistematik dalam pasaran yang tidak menentu, strategi ini menyediakan rangka kerja yang komprehensif dan boleh diperluas untuk menangkap peluang trend menaik dan menyediakan perlindungan risiko yang mencukupi dalam keadaan pasaran yang tidak menguntungkan.

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