Strategi kuantitatif divergensi dinamis RSI

RSI ATR SL/TP risk management DIVERGENCE Pivot
Tanggal Pembuatan: 2025-04-25 14:57:31 Akhirnya memodifikasi: 2025-04-25 14:57:31
menyalin: 0 Jumlah klik: 455
2
fokus pada
319
Pengikut

Strategi kuantitatif divergensi dinamis RSI Strategi kuantitatif divergensi dinamis RSI

Ringkasan

Strategi RSI Double Axis Deviation Quantification adalah strategi perdagangan tingkat lanjut yang mengidentifikasi peluang terbalik yang potensial dengan mendeteksi pergerakan harga yang konsisten antara bullish dan bearish deviasi antara indeks relatif kuat dan lemah (RSI). Strategi ini menggunakan algoritma deteksi pivot otomatisasi yang menggabungkan dua metode manajemen stop loss / stop loss yang berbeda untuk secara otomatis membangun posisi saat sinyal deviasi dikonfirmasi. Inti dari strategi ini adalah untuk memverifikasi fenomena deviasi antara harga dan indikator RSI melalui perhitungan matematis yang tepat dan menggunakan mekanisme manajemen risiko dinamis untuk memastikan bahwa setiap perdagangan mengikuti rasio risiko-pengembalian yang diantisipasi.

Prinsip Strategi

  1. Modul perhitungan RSI: Menggunakan metode Wilder Smoothing untuk menghitung 14 siklus (dapat disesuaikan) nilai RSI, menggunakan harga close out sebagai sumber input default (dapat dikonfigurasi).
  2. Pengamatan titik pivot:
    • Menggunakan jendela geser masing-masing 5 periode (diatur) untuk mendeteksi titik tinggi dan rendah lokal dari indikator RSI
    • Fungsi ta.barssince untuk memastikan jarak antara titik-titik sumbu antara 5-60 garis K (rentang yang dapat disesuaikan)
  3. Ini adalah salah satu alasan mengapa blog ini tidak bisa diterima oleh semua orang.
    • Pengamat Berbalik: Harga Berinovasi Rendah dan RSI Membentuk Lembah yang Lebih Tinggi
    • Harga Menciptakan Tinggi dan RSI Membentuk Tinggi yang Lebih Rendah
  4. Sistem eksekusi transaksi:
    • Menggunakan mekanisme stop loss dua mode: berdasarkan 20 siklus terakhir ((disesuaikan) titik ayunan atau ATR
    • Perhitungan stop loss dinamis: rasio risiko pengembalian yang dihitung berdasarkan jumlah risiko yang dikalikan dengan predeterminasi (default 2: 1)
  5. Sistem visualisasi: Menandai semua sinyal deviasi yang efektif pada grafik, dan secara real-time menampilkan garis horisontal stop loss (merah) dan stop loss (hijau) untuk posisi saat ini.

Analisis Keunggulan

  1. Multi-dimensional verifikasi mekanisme: meminta harga dan RSI harus memenuhi bentuk tertentu pada saat yang sama, dan interval waktu dalam batas default, secara signifikan mengurangi probabilitas sinyal palsu.
  2. Manajemen risiko adaptasi:
    • Model titik berayun cocok untuk pasar tren, dan dapat secara efektif menangkap tren band
    • ATR mode cocok untuk pasar yang bergolak, dengan stop loss yang disesuaikan secara otomatis dengan fluktuasi
  3. Tingkat parameter yang dapat dikonfigurasi: Semua parameter kunci (misalnya siklus RSI, rentang pengujian pivot, rasio pengembalian risiko, dll.) dapat disesuaikan dengan karakteristik pasar.
  4. Pengelolaan dana yang ilmiah: 10% dari rasio posisi yang digunakan secara default untuk mencegah terjadinya risiko yang berlebihan pada setiap transaksi.
  5. Umpan balik visual real-time: memberikan dukungan keputusan perdagangan yang intuitif melalui penandaan grafik dan stop loss / stop loss dinamis.

Analisis risiko

  1. Risiko keterlambatan: RSI sebagai indikator keterlambatan, dapat menghasilkan sinyal keterlambatan dalam situasi unilateral yang kuat. Solusi mitigasi: menggabungkan filter tren atau mempersingkat siklus RSI.
  2. Risiko pasar yang bergoyang: dapat menghasilkan sinyal palsu berturut-turut ketika tidak ada tren yang jelas. Solusi mitigasi: mengaktifkan mode ATR dan meningkatkan perkalian, atau penyaring tingkat fluktuasi tambahan.
  3. Risiko overmatching parameter: Kombinasi parameter tertentu mungkin berkinerja baik pada data historis tetapi gagal pada cakram nyata. Mitigasi: melakukan tes tekanan multi-siklus multi-varietas.
  4. Risiko pasar ekstrim: Leapfrogging dapat menyebabkan kegagalan stop loss. Mitigasi: Menghindari perdagangan sebelum dan sesudah peristiwa ekonomi besar, atau menggunakan opsi perlindungan.
  5. Ketergantungan pada kerangka waktu: Performa yang berbeda dalam berbagai periode waktu. Mitigasi: Optimalisasi yang cukup dalam kerangka waktu target.

Arah optimasi

  1. Verifikasi indikator komposit: menambahkan MACD atau indikator volume transaksi sebagai konfirmasi sekunder, meningkatkan kualitas sinyal.
  2. Pengaturan parameter dinamis: Mengatur siklus RSI dan ATR secara otomatis berdasarkan fluktuasi pasar.
  3. Optimasi Pembelajaran Mesin: Mengoptimalkan kombinasi parameter kunci menggunakan algoritma genetik.
  4. Analisis multi-frame: Menyaring arah tren pada frame waktu yang lebih tinggi.
  5. Manajemen posisi dinamis: menyesuaikan ukuran posisi sesuai dengan fluktuasi, untuk mencapai keseimbangan risiko.
  6. Event Filter: Mengintegrasikan data kalender ekonomi untuk menghindari transaksi sebelum dan sesudah publikasi data penting

Meringkaskan

RSI Dual Axis Offset Quantitative Strategy menyediakan metode trading inversion yang terstruktur melalui identifikasi sistematis dan manajemen risiko yang ketat. Nilai utamanya adalah mengubah konsep analisis teknis tradisional menjadi aturan perdagangan yang dapat diukur, dan beradaptasi dengan lingkungan pasar yang berbeda melalui mekanisme stop loss dua mode.

Kode Sumber Strategi
/*backtest
start: 2024-04-25 00:00:00
end: 2025-04-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=6
strategy("RSI Divergence Strategy - AliferCrypto", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === RSI Settings ===
rsiLength      = input.int(14, minval=1, title="RSI Length", group="RSI Settings", tooltip="Number of periods for RSI calculation")
rsiSource      = input.source(close, title="RSI Source", group="RSI Settings", tooltip="Price source used for RSI calculation")

// === Divergence Settings ===
lookLeft       = input.int(5, minval=1, title="Pivot Lookback Left", group="Divergence Settings", tooltip="Bars to the left for pivot detection")
lookRight      = input.int(5, minval=1, title="Pivot Lookback Right", group="Divergence Settings", tooltip="Bars to the right for pivot detection")
rangeLower     = input.int(5, minval=1, title="Min Bars Between Pivots", group="Divergence Settings", tooltip="Minimum bars between pivots to validate divergence")
rangeUpper     = input.int(60, minval=1, title="Max Bars Between Pivots", group="Divergence Settings", tooltip="Maximum bars between pivots to validate divergence")

// === SL/TP Method ===
method         = input.string("Swing", title="SL/TP Method", options=["Swing", "ATR"], group="SL/TP Settings", tooltip="Choose between swing-based or ATR-based stop and target")

// === Swing Settings ===
swingLook      = input.int(20, minval=1, title="Swing Lookback (bars)", group="Swing Settings", tooltip="Bars to look back for swing high/low")
swingMarginPct = input.float(1.0, minval=0.0, title="Swing Margin (%)", group="Swing Settings", tooltip="Margin around swing levels as percentage of price")
rrSwing        = input.float(2.0, title="R/R Ratio (Swing)", group="Swing Settings", tooltip="Risk/reward ratio when using swing-based method")

// === ATR Settings ===
atrLen         = input.int(14, minval=1, title="ATR Length", group="ATR Settings", tooltip="Number of periods for ATR calculation")
atrMult        = input.float(1.5, minval=0.1, title="ATR SL Multiplier", group="ATR Settings", tooltip="Multiplier for ATR-based stop loss calculation")
rrAtr          = input.float(2.0, title="R/R Ratio (ATR)", group="ATR Settings", tooltip="Risk/reward ratio when using ATR-based method")

// === RSI Calculation ===
_d    = ta.change(rsiSource)
up    = ta.rma(math.max(_d, 0), rsiLength)
down  = ta.rma(-math.min(_d, 0), rsiLength)
rsi   = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

// === Divergence Detection ===
defPl      = not na(ta.pivotlow(rsi, lookLeft, lookRight))
defPh      = not na(ta.pivothigh(rsi, lookLeft, lookRight))
rsiAtRR   = rsi[lookRight]
barsPl    = ta.barssince(defPl)
barsPl1   = barsPl[1]
inRangePL = barsPl1 >= rangeLower and barsPl1 <= rangeUpper
barsPh    = ta.barssince(defPh)
barsPh1   = barsPh[1]
inRangePH = barsPh1 >= rangeLower and barsPh1 <= rangeUpper
prevPlRsi   = ta.valuewhen(defPl, rsiAtRR, 1)
prevPhRsi   = ta.valuewhen(defPh, rsiAtRR, 1)
prevPlPrice = ta.valuewhen(defPl, low[lookRight], 1)
prevPhPrice = ta.valuewhen(defPh, high[lookRight], 1)
bullCond    = defPl and low[lookRight] < prevPlPrice and rsiAtRR > prevPlRsi and inRangePL
bearCond    = defPh and high[lookRight] > prevPhPrice and rsiAtRR < prevPhRsi and inRangePH

plotshape(bullCond, title="Bullish Divergence", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
plotshape(bearCond, title="Bearish Divergence", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny)

// === Entries ===
if bullCond
    strategy.entry("Long", strategy.long)
if bearCond
    strategy.entry("Short", strategy.short)

// === Pre-calculate SL/TP components ===
swingLow    = ta.lowest(low, swingLook)
swingHigh   = ta.highest(high, swingLook)
atrValue    = ta.atr(atrLen)

// === SL/TP Calculation & Exits ===
var float slPrice = na
var float tpPrice = na
var float rr      = na

// Long exits
if strategy.position_size > 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingLow * (1 - swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice - atrValue * atrMult
        rr      := rrAtr
    risk     = entryPrice - slPrice
    tpPrice  := entryPrice + risk * rr
    strategy.exit("Exit Long", from_entry="Long", stop=slPrice, limit=tpPrice)

// Short exits
if strategy.position_size < 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingHigh * (1 + swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice + atrValue * atrMult
        rr      := rrAtr
    risk     = slPrice - entryPrice
    tpPrice  := entryPrice - risk * rr
    strategy.exit("Exit Short", from_entry="Short", stop=slPrice, limit=tpPrice)

// === Plot SL/TP Levels ===
plot(strategy.position_size != 0 ? slPrice : na, title="Stop Loss", style=plot.style_linebr, color=color.red)
plot(strategy.position_size != 0 ? tpPrice : na, title="Take Profit", style=plot.style_linebr, color=color.green)

// === Alerts ===
alertcondition(bullCond, title="Bull RSI Divergence", message="Bullish RSI divergence detected")
alertcondition(bearCond, title="Bear RSI Divergence", message="Bearish RSI divergence detected")