Strategi terobosan support dan resistance serta sistem perdagangan kuantitatif filter tren-ADX

ADX SMA 支撑阻力位 趋势滤波器 突破策略 枢轴点 动向指标 风险管理
Tanggal Pembuatan: 2025-05-30 11:58:27 Akhirnya memodifikasi: 2025-05-30 11:58:27
menyalin: 0 Jumlah klik: 367
2
fokus pada
319
Pengikut

Strategi terobosan support dan resistance serta sistem perdagangan kuantitatif filter tren-ADX Strategi terobosan support dan resistance serta sistem perdagangan kuantitatif filter tren-ADX

Ringkasan

Strategi Support Resistance Breakout dengan Trend - Sistem perdagangan kuantitatif filter ADX adalah strategi perdagangan komprehensif yang menggabungkan identifikasi titik resistensi dukungan, konfirmasi tren, dan validasi kekuatan pasar dalam analisis teknis. Strategi ini didasarkan pada tindakan penembusan harga pasar terhadap tingkat harga kunci, dan meningkatkan keandalan sinyal perdagangan dengan menggunakan moving average dan indeks arah rata-rata ((ADX) sebagai filter. Sistem ini menggunakan kerangka waktu 1 jam untuk membangun area resistensi penembusan dukungan dinamis dengan mengidentifikasi titik tinggi dan rendah pada sumbu, dan mengatur mekanisme stop loss dengan persentase tetap untuk mengendalikan risiko ketika sinyal perdagangan keluar dari area ini.

Prinsip Strategi

Prinsip-prinsip inti dari strategi ini didasarkan pada tindakan harga yang menerobos di titik-titik penyangga resistensi, yang menggabungkan arah tren dan penyaringan kekuatan pasar untuk membentuk sistem perdagangan yang lengkap. Prinsip-prinsip implementasi spesifik meliputi:

  1. Identifikasi titik resistansiSistem ini menggunakan metode Pivot Points untuk mengidentifikasi tingkat harga yang penting.ta.pivothighDanta.pivotlowFungsi yang menghitung titik sumbu tinggi dan rendah dengan parameter default 5 periode, dan menempatkan titik-titik ini sebagai titik resistensi dan dukungan potensial.

  2. Pengelolaan Daerah DinamisSistem menggunakan struktur array:supportLevelsDanresistanceLevelsMempertahankan bit resistansi yang tersimpan, dan melalui fungsi kustomf_add_levelFungsi ini memastikan bahwa tingkat yang baru ditambahkan memiliki jarak yang cukup dari tingkat yang ada (default 2%) untuk mencegah area yang terlalu padat, sementara membatasi hingga 5 tingkat terbaru.

  3. Filter pengkonfirmasi trenStrategi menggunakan 50 siklus SMA sebagai indikator arah tren. Hanya pertimbangkan over jika harga berada di atas garis rata-rata, pertimbangkan short jika berada di bawah garis rata-rata, sehingga mengikuti tren pasar secara keseluruhan.

  4. Verifikasi Kekuatan Pasar: Mengukur kekuatan pasar dengan fungsi ADX yang disesuaikan. Nilai ADX harus lebih tinggi dari batas yang ditetapkan (default 25), memastikan hanya masuk ke perdagangan jika pasar cukup kuat, dan menghindari terobosan palsu dalam lingkungan pasar yang lemah.

  5. Sinyal masuk dihasilkan:

    • Sinyal multihead: Diterbitkan ketika harga melewati level support dari bawah (di bawah level support, tetapi di atas level support) dan saat harga berada di atas rata-rata 50 siklus dan ADX lebih tinggi dari level support.
    • Sinyal Blank: Ditimbulkan ketika harga menerobos resistensi dari atas (puncak di atas resistensi tetapi harga penutupan di bawah resistensi), sementara harga berada di bawah garis rata-rata 50 siklus dan nilai ADX lebih tinggi dari nilai terendah.
  6. Mekanisme manajemen risikoStrategi ini menggunakan setelan stop loss dan stop loss dengan persentase tetap, multihead dengan default 15% stop loss dan 10% stop loss, dan head kosong dengan default 10% stop loss dan 10% stop loss. Setelah harga mencapai level ini, sistem secara otomatis melangsungkan posisi dan mengatur kembali status perdagangan.

Keunggulan Strategis

Berdasarkan analisis mendalam terhadap kode, strategi ini memiliki keuntungan yang signifikan sebagai berikut:

  1. Mekanisme multiple confirmation: Mengurangi risiko false breakout dengan mengkombinasikan support resistance breakout, trend direction dan ADX strength triple confirmation.

  2. Daerah Resistensi Dukungan DinamisSistem ini secara dinamis mengidentifikasi dan mengelola resistance level yang mendukung dan dapat beradaptasi dengan kondisi pasar yang berbeda. Dengan mempertahankan hingga 5 resistance level yang mendukung dan memastikan bahwa strategi fokus pada tingkat harga yang paling relevan.

  3. Kelompok wilayah cerdas: Menggunakan parameter persentase lebar zona maksimum ((maxZoneWidthPct) untuk menghindari penghitungan ulang resistance support bit yang terlalu dekat, mengurangi redundansi sinyal.

  4. Perhitungan ADX khususStrategi: Menggunakan fungsi ADX khusus untuk memastikan keakuratan dan fleksibilitas dalam menghitung indikator dengan menghitung langsung amplitudo, arah, dan perputaran riil.

  5. Konfigurasi parameter yang fleksibelStrategi ini menyediakan beberapa parameter yang dapat disesuaikan, termasuk panjang sumbu pivot, periode mundur, lebar zona maksimum, persentase stop loss dan ADX threshold, yang dapat dioptimalkan oleh pengguna sesuai dengan kondisi pasar yang berbeda dan preferensi perdagangan.

  6. Kendali resiko jelas: Menyediakan kerangka pengelolaan risiko yang jelas untuk setiap transaksi dengan persentase stop loss yang di-defaultkan, mencegah kerugian yang berlebihan pada setiap transaksi, sambil mengunci keuntungan yang wajar.

  7. Visualisasi IntuitifStrategi: Menandai resistensi dan sinyal perdagangan pada grafik, memberikan umpan balik visual yang intuitif melalui pengkodean warna (resistensi hijau, resistensi merah) dan label (LONG, SHORT, EXIT) untuk analisis dan pemantauan real-time.

Risiko Strategis

Meskipun strategi ini dirancang dengan baik, ada risiko dan keterbatasan potensial seperti berikut:

  1. Terobosan palsu di pasar yang bergejolakDalam situasi pasar yang sangat bergejolak, harga mungkin sering menembus resistensi dukungan dan kemudian kembali ke kisaran awal, menyebabkan peningkatan sinyal penembusan palsu. Solusi: Anda dapat mempertimbangkan untuk meningkatkan siklus konfirmasi, meminta harga untuk bertahan untuk waktu tertentu setelah penembusan atau membentuk bentuk tertentu sebelum sinyal konfirmasi.

  2. Terlalu bergantung pada level resistensi dukungan sejarahStrategi ini didasarkan pada pembentukan level dukungan dan resistensi historis, yang mungkin tidak berlaku ketika struktur pasar berubah secara mendasar (seperti peristiwa berita besar). Solusi: Anda dapat mempertimbangkan untuk menambahkan mekanisme penyesuaian dinamis, yang secara otomatis menyesuaikan level dukungan dan resistensi sesuai dengan fluktuasi pasar.

  3. Batas dari Stop Loss Persentase TetapStop loss persentase tetap mungkin tidak cocok untuk semua kondisi pasar, mungkin terlalu besar di pasar dengan volatilitas rendah, mungkin terlalu kecil di pasar dengan volatilitas tinggi. Solusi: Anda dapat mempertimbangkan untuk menyesuaikan level stop loss secara dinamis berdasarkan ATR (real amplitude).

  4. Risiko pembalikan tren: Menggunakan 50 siklus SMA sebagai indikator tren mungkin terlambat dalam reaksi awal dari pembalikan tren, yang menyebabkan masih masuk ke dalam tren saat tren akan berakhir. Solusi: Anda dapat mempertimbangkan untuk menambahkan indikator tren jangka pendek yang lebih sensitif atau indikator momentum sebagai penilaian tambahan.

  5. Strategi intensif komputasiSolusi: Mengoptimalkan efisiensi algoritma, mengurangi perhitungan yang tidak perlu, atau mempertimbangkan untuk mengurangi frekuensi pembaruan.

  6. Parameter SensitivitasPerforma strategi sangat sensitif terhadap pengaturan parameter (seperti panjang pivot, nilai ADX), pilihan parameter yang tidak tepat dapat menyebabkan overtrading atau kehilangan peluang. Solusi: Membangun kerangka pengoptimalan parameter dengan mengevaluasi kinerja parameter dalam kondisi pasar yang berbeda.

Arah optimasi strategi

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

  1. Mekanisme parameter adaptasi: Memperkenalkan mekanisme untuk menyesuaikan parameter-parameter kunci secara otomatis sesuai dengan tingkat fluktuasi pasar. Misalnya, meningkatkan ADX threshold atau lebar area resistensi dukungan selama fluktuasi tinggi, dan mengurangi parameter ini selama fluktuasi rendah, sehingga strategi lebih cocok untuk lingkungan pasar yang berbeda.

  2. Analisis multi-frame waktuDengan memeriksa apakah level resistance support pada grafik garis harian atau garis lingkar konsisten dengan level pada grafik 1 jam saat ini, dapat diidentifikasi area harga kunci yang lebih kuat yang diakui oleh beberapa frame waktu, meningkatkan kualitas sinyal.

  3. Konfirmasi volume transaksiEfektivitas terobosan yang diverifikasi, dikombinasikan dengan analisis volume transaksi. Terobosan yang benar-benar efektif biasanya disertai dengan peningkatan volume transaksi yang signifikan. Dengan menambahkan kondisi penyaringan volume transaksi, risiko terobosan palsu yang disebabkan oleh volume transaksi yang rendah dapat dikurangi.

  4. Stop loss dinamisHal ini membuat manajemen risiko lebih fleksibel dan dapat secara otomatis menyesuaikan tingkat perlindungan sesuai dengan kondisi pasar saat ini, mengatur stop loss yang lebih longgar di pasar yang berfluktuasi tinggi, dan mengatur stop loss yang lebih ketat di pasar yang berfluktuasi rendah.

  5. Mekanisme penguncian laba parsial: Memperkenalkan mekanisme keuntungan bertahap, yang memungkinkan untuk memindahkan stop loss ke harga biaya atau mengunci sebagian keuntungan setelah mencapai tingkat keuntungan tertentu. Metode ini dapat mengurangi risiko penarikan balik sambil mempertahankan potensi keuntungan yang tinggi.

  6. Mengintegrasikan indikator emosiPertimbangkan untuk mengintegrasikan indikator sentimen pasar (seperti VIX atau indikator relative strength) sebagai filter tambahan. Sentimen pasar sering mempengaruhi keberlanjutan terobosan. Dengan menambahkan dimensi analisis sentimen, strategi dapat meningkatkan pemahaman tentang keadaan pasar.

  7. Kelas kekuatan resistansi dukungan: Memperkenalkan mekanisme penilaian kekuatan titik resistensi pendukung, berdasarkan faktor-faktor seperti jumlah tes sejarah, panjang waktu pembentukan dan lain-lain untuk menilai kekuatan setiap tingkat. Dengan demikian, prioritas dapat diberikan pada tingkat harga yang lebih kuat dan lebih mungkin untuk menghasilkan respons yang efektif.

  8. Optimalisasi Pembelajaran MesinPertimbangkan untuk menggunakan metode pembelajaran mesin untuk mengoptimalkan pilihan parameter dan generasi sinyal. Dengan menganalisis pola perdagangan yang berhasil dan gagal dalam data historis, algoritma pembelajaran mesin dapat membantu mengidentifikasi kombinasi parameter dan kondisi pasar yang paling efektif.

Meringkaskan

Strategi Mendukung Resistance Breakout dengan Trend - Sistem perdagangan kuantitatif filter ADX adalah sistem perdagangan komprehensif yang dirancang dengan baik yang menggabungkan beberapa elemen kunci dalam analisis teknis. Strategi ini secara dinamis mengidentifikasi dan memantau titik resistensi dukungan, menggabungkan penyaringan arah tren dan kekuatan pasar, untuk menciptakan mekanisme sinyal perdagangan yang relatif andal.

Keunggulan inti dari strategi ini adalah mekanisme multiple confirmation dan kerangka manajemen risiko yang baik, yang secara efektif mengurangi risiko false breakout dan membatasi potensi kerugian dari satu transaksi. Strategi ini juga menawarkan banyak opsi konfigurasi parameter, yang memungkinkan pedagang untuk menyesuaikan secara fleksibel sesuai dengan preferensi risiko pribadi dan lingkungan pasar.

Namun, strategi ini juga menghadapi beberapa tantangan, seperti risiko false breakout di pasar yang sangat berfluktuasi, keterbatasan stop loss tetap, dan sensitivitas parameter. Kinerja strategi diharapkan dapat ditingkatkan lebih lanjut dengan memperkenalkan langkah-langkah optimasi seperti mekanisme parameter adaptif, analisis multi-frame time frame, konfirmasi volume perdagangan, dan manajemen risiko dinamis.

Secara keseluruhan, ini adalah strategi perdagangan kuantitatif yang logis dan jelas, dirancang dengan baik, dan cocok untuk digunakan oleh pedagang dengan pemahaman tentang analisis teknis dan struktur pasar. Dengan terus-menerus mengoptimalkan dan beradaptasi dengan perubahan pasar, strategi ini berpotensi untuk mempertahankan kinerja yang stabil di berbagai lingkungan pasar.

Kode Sumber Strategi
/*backtest
start: 2024-05-30 00:00:00
end: 2025-05-29 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("S/R Breakout Strategy (1H) with Trend and ADX Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ─────────────────────────────────────────────────────────────
// INPUTS
// ─────────────────────────────────────────────────────────────
pivotLen        = input.int(5, title="Pivot Length")
lookbackBars    = input.int(300, title="Lookback Bars")
maxZoneWidthPct = input.float(2.0, title="Max Zone Width %")
tpLong          = input.float(0.15, title="Take Profit % (Long)")
slLong          = input.float(0.10, title="Stop Loss % (Long)")
tpShort         = input.float(0.10, title="Take Profit % (Short)")
slShort         = input.float(0.10, title="Stop Loss % (Short)")
allowLong       = input.bool(true, title="Allow Long Trades")
allowShort      = input.bool(true, title="Allow Short Trades")

// ADX settings
adxThreshold    = input.float(25.0, title="ADX Threshold")
adxLen          = input.int(14, title="ADX Length")

// Trend filter: 50-period moving average
ma50 = ta.sma(close, 50)

// ─────────────────────────────────────────────────────────────
// CUSTOM ADX FUNCTION
// ─────────────────────────────────────────────────────────────
// This function calculates ADX using the common method based on true range,
// directional movement and smoothing it with the RMA.
f_adx(len) =>
    // true range for the current bar
    tr = ta.tr
    // Calculate upward and downward moves
    upMove   = high - high[1]
    downMove = low[1] - low
    // Determine directional movements
    plusDM  = (upMove > downMove and upMove > 0) ? upMove : 0.0
    minusDM = (downMove > upMove and downMove > 0) ? downMove : 0.0
    // Smooth the values using RMA (running moving average)
    smPlusDM  = ta.rma(plusDM, len)
    smMinusDM = ta.rma(minusDM, len)
    smTR      = ta.rma(tr, len)
    // Calculate the directional indicators, avoid division by zero
    plusDI  = (smTR != 0) ? 100 * smPlusDM / smTR : 0.0
    minusDI = (smTR != 0) ? 100 * smMinusDM / smTR : 0.0
    diSum   = plusDI + minusDI
    dx      = (diSum != 0) ? 100 * math.abs(plusDI - minusDI) / diSum : 0.0
    // Smooth the DX to get ADX
    ta.rma(dx, len)

// Compute ADX value using the custom function
adxValue = f_adx(adxLen)

// ─────────────────────────────────────────────────────────────
// PIVOT DETECTION & SUPPORT/RESISTANCE LEVELS
// ─────────────────────────────────────────────────────────────
pivotHigh = ta.pivothigh(high, pivotLen, pivotLen)
pivotLow  = ta.pivotlow(low, pivotLen, pivotLen)

// Declare arrays for support and resistance levels
var float[] supportLevels    = array.new_float()
var float[] resistanceLevels = array.new_float()

// Function to add a level into the provided array if it meets the criteria.
// Always returns a float (0.0) for consistency.
f_add_level(arr, newLevel) =>
    if array.size(arr) == 0
        array.push(arr, newLevel)
    else
        shouldAdd = true
        for i = 0 to (array.size(arr) - 1)
            existing = array.get(arr, i)
            if math.abs(existing - newLevel) / newLevel * 100 <= maxZoneWidthPct
                shouldAdd := false
        if shouldAdd
            array.push(arr, newLevel)
            if array.size(arr) > 5
                array.shift(arr)
    0.0

// Update support and resistance arrays once sufficient bars have formed
if bar_index > pivotLen * 2
    if not na(pivotLow)
        f_add_level(supportLevels, pivotLow)
    if not na(pivotHigh)
        f_add_level(resistanceLevels, pivotHigh)

// ─────────────────────────────────────────────────────────────
// TRADE MANAGEMENT VARIABLES
// ─────────────────────────────────────────────────────────────
var bool   inTrade    = false
var bool   isLong     = false
var float  entryPrice = na

// Signal flags
longSignal  = false
shortSignal = false

// Detect long signal: price crosses above support level
if array.size(supportLevels) > 0
    for i = 0 to (array.size(supportLevels) - 1)
        lvl = array.get(supportLevels, i)
        if low < lvl and close > lvl
            longSignal := true

// Detect short signal: price crosses below resistance level
if array.size(resistanceLevels) > 0
    for i = 0 to (array.size(resistanceLevels) - 1)
        lvl = array.get(resistanceLevels, i)
        if high > lvl and close < lvl
            shortSignal := true

// ─────────────────────────────────────────────────────────────
// ENTRY CONDITIONS & EXECUTION
// ─────────────────────────────────────────────────────────────
if not inTrade
    // Long entry: require long signal, price above 50MA, and ADX above threshold
    if allowLong and longSignal and close > ma50 and adxValue > adxThreshold
        strategy.entry("Long", strategy.long)
        label.new(x=bar_index, y=low, text="LONG", xloc=xloc.bar_index, style=label.style_label_up, color=color.green, textcolor=color.white)
        entryPrice := close
        isLong     := true
        inTrade    := true
    // Short entry: require short signal, price below 50MA, and ADX above threshold
    else if allowShort and shortSignal and close < ma50 and adxValue > adxThreshold
        strategy.entry("Short", strategy.short)
        label.new(x=bar_index, y=high, text="SHORT", xloc=xloc.bar_index, style=label.style_label_down, color=color.red, textcolor=color.white)
        entryPrice := close
        isLong     := false
        inTrade    := true

// ─────────────────────────────────────────────────────────────
// EXIT CONDITIONS
// ─────────────────────────────────────────────────────────────
if inTrade
    ret = isLong ? (close - entryPrice) / entryPrice : (entryPrice - close) / entryPrice
    tp  = isLong ? tpLong : tpShort
    sl  = isLong ? slLong : slShort
    if ret >= tp or ret <= -sl
        strategy.close_all()
        label.new(x=bar_index, y=close, text="EXIT", xloc=xloc.bar_index, style=label.style_label_left, color=color.orange, textcolor=color.black)
        inTrade    := false
        entryPrice := na

// ─────────────────────────────────────────────────────────────
// ALERT CONDITIONS
// ─────────────────────────────────────────────────────────────
alertcondition(longSignal and allowLong, title="Long Breakout", message="🚀 Long breakout on {{ticker}} at {{close}}")
alertcondition(shortSignal and allowShort, title="Short Breakout", message="🔻 Short breakout on {{ticker}} at {{close}}")