Strategi pelacakan tren dinamis dan penyaringan volatilitas: Sistem persilangan rata-rata bergerak berdasarkan konfirmasi ganda ADX dan CI

ADX CI SMA DM TR ATR DI
Tanggal Pembuatan: 2025-02-21 09:33:38 Akhirnya memodifikasi: 2025-02-21 09:33:38
menyalin: 0 Jumlah klik: 406
2
fokus pada
319
Pengikut

Strategi pelacakan tren dinamis dan penyaringan volatilitas: Sistem persilangan rata-rata bergerak berdasarkan konfirmasi ganda ADX dan CI Strategi pelacakan tren dinamis dan penyaringan volatilitas: Sistem persilangan rata-rata bergerak berdasarkan konfirmasi ganda ADX dan CI

Ringkasan

Strategi ini adalah sistem perdagangan yang menggabungkan sinyal silang garis rata dengan pemfilteran keadaan pasar. Ini menangkap tren pasar melalui persilangan rata-rata bergerak sederhana 9 periode dengan rata-rata bergerak sederhana 21 periode (SMA), sambil menggunakan indeks arah rata-rata (ADX) dan indeks kekacauan (Choppiness Index, CI) untuk memfilter lingkungan pasar, memastikan perdagangan hanya dilakukan di pasar yang jelas tren dan memiliki karakteristik yang baik.

Prinsip Strategi

Logika inti dari strategi ini terdiri dari tiga komponen utama:

  1. Generasi sinyal tren: menggunakan persilangan 9 siklus dan 21 siklus SMA untuk menentukan arah tren, membentuk sinyal perdagangan dasar.
  2. Pengakuan kekuatan tren: Untuk memverifikasi kekuatan tren melalui indikator ADX (dengan batas set ke 20), pastikan untuk hanya berdagang di pasar yang jelas tren.
  3. Penyaringan pasar yang bergejolak: memperkenalkan indeks kekacauan (dengan nilai threshold 50) untuk mengidentifikasi karakteristik pasar yang bergejolak dan menghindari perdagangan di pasar yang bergejolak.

Strategi ini menggunakan metode penghitungan indikator teknis yang dioptimalkan, termasuk fungsi penjumlahan yang disesuaikan, penghitungan nilai tertinggi dan terendah, dan penghitungan amplitudo nyata yang distandardisasi (TR), untuk memastikan akurasi sinyal dan efisiensi penghitungan.

Keunggulan Strategis

  1. Multiple confirmation mechanism: dengan menggabungkan crossover linear, ADX dan CI triple filtering, meningkatkan reliabilitas sinyal perdagangan secara signifikan.
  2. Adaptif: Parameter strategi dapat disesuaikan sesuai dengan kondisi pasar yang berbeda dan memiliki kemampuan adaptasi yang baik.
  3. Pengendalian risiko yang sempurna: Filter indeks CI untuk mengurangi risiko terobosan palsu selama periode fluktuasi tinggi.
  4. Efisiensi perhitungan: Menggunakan metode perhitungan yang dioptimalkan, terutama dalam menangani data historis.

Risiko Strategis

  1. Sensitivitas parameter: Efek strategi sangat tergantung pada pengaturan ADX dan CI, dan mungkin memerlukan konfigurasi parameter yang berbeda untuk lingkungan pasar yang berbeda.
  2. Lag: Mungkin ada masalah dengan lag sinyal karena menggunakan beberapa indikator moving average.
  3. Performa pasar yang bergoyang: Di pasar yang bergoyang, Anda mungkin melewatkan beberapa peluang perdagangan singkat.
  4. Kompleksitas Perhitungan: Perhitungan beberapa indikator meningkatkan kompleksitas strategi, yang dapat mempengaruhi efektivitas pelaksanaan perdagangan real-time.

Arah optimasi strategi

  1. Penyesuaian parameter dinamis: Memperkenalkan mekanisme penyesuaian parameter adaptif, menyesuaikan nilai ambang ADX dan CI sesuai dengan kondisi pasar yang dinamis.
  2. Optimasi Stop Loss: Menambahkan mekanisme stop loss dinamis yang memungkinkan strategi stop loss yang lebih fleksibel berdasarkan ATR atau Band Volatilitas.
  3. Peningkatan konfirmasi sinyal: Mempertimbangkan untuk menambahkan mekanisme konfirmasi pengiriman untuk meningkatkan keandalan sinyal.
  4. Tingkatkan efisiensi komputasi: Optimalkan metode perhitungan indikator, terutama kinerja saat menangani data berdurasi panjang.

Meringkaskan

Strategi ini membangun sistem perdagangan yang lengkap dengan menggabungkan strategi silang linier klasik dengan indikator teknologi modern. Strategi ini tidak hanya berfokus pada menangkap tren, tetapi juga sangat memperhatikan kesesuaian dengan lingkungan pasar, meningkatkan stabilitas perdagangan melalui mekanisme pemfilteran ganda. Meskipun ada beberapa masalah sensitivitas parameter dan keterbelakangan, strategi ini masih memiliki ruang untuk perbaikan yang besar melalui arah optimasi yang diusulkan.

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