Penjejakan arah aliran dinamik dan strategi penapisan turun naik: Sistem pindah silang purata bergerak berdasarkan pengesahan berganda ADX dan CI

ADX CI SMA DM TR ATR DI
Tarikh penciptaan: 2025-02-21 09:33:38 Akhirnya diubah suai: 2025-02-21 09:33:38
Salin: 0 Bilangan klik: 406
2
fokus pada
319
Pengikut

Penjejakan arah aliran dinamik dan strategi penapisan turun naik: Sistem pindah silang purata bergerak berdasarkan pengesahan berganda ADX dan CI Penjejakan arah aliran dinamik dan strategi penapisan turun naik: Sistem pindah silang purata bergerak berdasarkan pengesahan berganda ADX dan CI

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan yang menggabungkan isyarat persilangan garis rata dengan penapisan keadaan pasaran. Ia menangkap trend pasaran melalui persilangan purata bergerak sederhana 9 kitaran dengan 21 kitaran (SMA) sambil menggunakan indeks arah purata (ADX) dan indeks kekacauan (Choppiness Index, CI) untuk menapis persekitaran pasaran, memastikan perdagangan hanya dilakukan di pasaran yang jelas trendnya dan mempunyai ciri-ciri pergerakan yang baik.

Prinsip Strategi

Logik utama strategi ini terdiri daripada tiga komponen utama:

  1. Penjanaan isyarat trend: menggunakan persilangan 9 kitaran dan 21 kitaran SMA untuk menentukan arah trend dan membentuk isyarat perdagangan asas.
  2. Pengesahan Kekuatan Trend: Untuk mengesahkan kekuatan trend melalui penunjuk ADX ((tetinggi ditetapkan pada 20), memastikan perdagangan hanya dalam keadaan pasaran yang jelas trend.
  3. Penapisan turun naik pasaran: pengenalan indeks huru-hara (dengan nilai set ke 50) untuk mengenal pasti ciri-ciri turun naik pasaran dan mengelakkan perdagangan dalam pasaran yang bergolak.

Strategi ini menggunakan kaedah pengiraan penunjuk teknikal yang dioptimumkan, termasuk fungsi penjumlahan tersuai, pengiraan nilai tertinggi dan terendah, dan pengiraan gelombang sebenar yang standard (TR), memastikan ketepatan isyarat dan kecekapan pengiraan.

Kelebihan Strategik

  1. Mekanisme pengesahan berganda: meningkatkan kebolehpercayaan isyarat perdagangan dengan menggabungkan penyeberangan linear, ADX dan penapisan tiga kali CI.
  2. Adaptif: Parameter strategi boleh disesuaikan dengan keadaan pasaran yang berbeza dan mempunyai kebolehsuaian yang baik.
  3. Kawalan risiko yang sempurna: Menapis indeks CI semasa turun naik yang tinggi, secara berkesan mengurangkan risiko penembusan palsu.
  4. Kecekapan pengiraan yang tinggi: menggunakan kaedah pengiraan yang dioptimumkan, terutamanya dalam memproses data sejarah.

Risiko Strategik

  1. Sensitiviti parameter: Kesan strategi sangat bergantung kepada tetapan had ADX dan CI, dan keadaan pasaran yang berbeza mungkin memerlukan konfigurasi parameter yang berbeza.
  2. Laggasi: Mungkin terdapat masalah dengan laggansi isyarat kerana menggunakan pelbagai indikator purata bergerak.
  3. Dalam pasaran yang bergolak, anda mungkin terlepas peluang untuk berdagang dalam garis pendek.
  4. Kompleksiti pengiraan: Pengiraan pelbagai petunjuk meningkatkan kerumitan strategi, yang boleh menjejaskan kecekapan pelaksanaan perdagangan dalam masa nyata.

Arah pengoptimuman strategi

  1. Penyesuaian parameter dinamik: Memperkenalkan mekanisme penyesuaian parameter adaptif, menyesuaikan nilai terhad ADX dan CI mengikut keadaan pasaran yang dinamik.
  2. Pengoptimuman Hentikan Kerugian: Menambah mekanisme Hentikan Kerugian Dinamik, yang membolehkan anda merancang strategi Hentikan Kerugian yang lebih fleksibel berdasarkan ATR atau Band Volatiliti.
  3. Peningkatan pengesahan isyarat: Peningkatan kebolehpercayaan isyarat dengan penambahan mekanisme pengesahan jumlah pesanan.
  4. Peningkatan kecekapan pengiraan: mengoptimumkan kaedah pengiraan indikator, terutamanya prestasi semasa memproses data jangka panjang.

ringkaskan

Strategi ini membina satu sistem perdagangan yang lengkap dengan menggabungkan strategi silang linear klasik dengan petunjuk teknologi moden. Ia memberi tumpuan bukan sahaja untuk menangkap trend, tetapi juga memberi perhatian khusus kepada kesesuaian dengan persekitaran pasaran, meningkatkan kestabilan perdagangan melalui mekanisme penapisan berganda. Walaupun terdapat masalah sensitiviti parameter dan ketinggalan, strategi ini masih mempunyai ruang untuk penambahbaikan yang besar melalui arah pengoptimuman yang dikemukakan.

Kod sumber strategi
/*backtest
start: 2024-02-22 00:00:00
end: 2024-12-06 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("MA9/MA21 Cross with ADX & CHOP Filter", overlay=true, initial_capital=10000, currency=currency.USD)

// ─── CUSTOM FUNCTIONS ──────────────────────────────────────────────────────
// Custom function to compute the sum over the last 'len' bars.
f_sum(src, len) =>
    s = 0.0
    for i = 0 to len - 1
        s += src[i]
    s

// Custom function to compute the highest value over the last 'len' bars.
f_highest(src, len) =>
    h = src[0]
    for i = 1 to len - 1
        h := math.max(h, src[i])
    h

// Custom function to compute the lowest value over the last 'len' bars.
f_lowest(src, len) =>
    l = src[0]
    for i = 1 to len - 1
        l := math.min(l, src[i])
    l

// ─── INPUTS ──────────────────────────────────────────────────────────────
ma9Period   = input.int(9, title="MA 9 Period", minval=1)
ma21Period  = input.int(21, title="MA 21 Period", minval=1)
adxLength   = input.int(7, title="ADX Smoothing / DI Length", minval=1)
adxThresh   = input.float(20.0, title="ADX Threshold", step=0.1)
chopLen     = input.int(7, title="CHOP Length", minval=1)
chopOff     = input.int(0, title="CHOP Offset", minval=0)  // Not applied in calculation
chopThresh  = input.float(50.0, title="CHOP Maximum (do not trade if above)", step=0.1)

// ─── CALCULATE INDICATORS ────────────────────────────────────────────────────
// Moving Averages
ma9  = ta.sma(close, ma9Period)
ma21 = ta.sma(close, ma21Period)

// --- True Range Calculation ---
// Manual implementation of true range (tr)
tr = math.max(math.max(high - low, math.abs(high - nz(close[1]))), math.abs(low - nz(close[1])))

// --- ADX Calculation (Manual Implementation) ---
// Calculate directional movements
upMove   = high - nz(high[1])
downMove = nz(low[1]) - low
plusDM   = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM  = (downMove > upMove and downMove > 0) ? downMove : 0.0

// Smooth the values using the built-in rma function
atr      = ta.rma(tr, adxLength)
plusDI   = 100 * ta.rma(plusDM, adxLength) / atr
minusDI  = 100 * ta.rma(minusDM, adxLength) / atr
dx       = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adxValue = ta.rma(dx, adxLength)

// --- Choppiness Index Calculation ---
// Compute the sum of true range over chopLen periods
atrSum      = f_sum(tr, chopLen)
// Compute highest high and lowest low over chopLen periods using custom functions
highestHigh = f_highest(high, chopLen)
lowestLow   = f_lowest(low, chopLen)
priceRange  = highestHigh - lowestLow
chop        = priceRange != 0 ? 100 * math.log(atrSum / priceRange) / math.log(chopLen) : 0

// ─── STRATEGY CONDITIONS ─────────────────────────────────────────────────────
// MA Crossover Signals
longCond  = ta.crossover(ma9, ma21)
shortCond = ta.crossunder(ma9, ma21)

// Filter: Only trade if ADX > threshold and CHOP ≤ threshold.
filterCond = (adxValue > adxThresh) and (chop <= chopThresh)

// Entries and Exits
if longCond and filterCond
    strategy.entry("Long", strategy.long)
if shortCond and filterCond
    strategy.entry("Short", strategy.short)
if shortCond
    strategy.close("Long")
if longCond
    strategy.close("Short")

// ─── PLOTTING ──────────────────────────────────────────────────────────────
plot(ma9, color=color.red, title="MA 9")
plot(ma21, color=color.blue, title="MA 21")
plot(adxValue, title="ADX", color=color.purple)
hline(adxThresh, title="ADX Threshold", color=color.purple, linestyle=hline.style_dotted)
plot(chop, title="CHOP", color=color.orange)
hline(chopThresh, title="CHOP Threshold", color=color.orange, linestyle=hline.style_dotted)