Strategi kuantitatif perbezaan dinamik RSI

RSI ATR SL/TP risk management DIVERGENCE Pivot
Tarikh penciptaan: 2025-04-25 14:57:31 Akhirnya diubah suai: 2025-04-25 14:57:31
Salin: 0 Bilangan klik: 455
2
fokus pada
319
Pengikut

Strategi kuantitatif perbezaan dinamik RSI Strategi kuantitatif perbezaan dinamik RSI

Gambaran keseluruhan

Strategi kuantitatif pengalihan dua sumbu RSI adalah strategi perdagangan lanjutan yang mengesan peluang pembalikan yang berpotensi dengan mengesan pergerakan harga biasa dan pengalihan harga antara indeks yang agak kuat dan lemah (RSI). Strategi ini menggunakan algoritma pengesanan titik pusat automatik yang menggabungkan dua kaedah pengurusan berhenti / henti yang berbeza untuk membina kedudukan secara automatik apabila isyarat pengalihan disahkan.

Prinsip Strategi

  1. Modul pengiraan RSI: Menggunakan kaedah Wilder Smooth untuk mengira 14 kitaran ((boleh disesuaikan) nilai RSI, menggunakan harga penutupan sebagai sumber input lalai ((boleh dikonfigurasi))
  2. Pengesanan titik pusat:
    • Menggunakan tetingkap meluncur yang boleh disesuaikan dengan setiap 5 kitaran () untuk mengesan titik tinggi dan rendah RSI
    • Fungsi ta.barssince memastikan jarak antara titik-titik pusat adalah 5 hingga 60 garis K (rentang yang boleh disesuaikan)
  3. Tidak logik untuk mengesahkan:
    • Pengamat Berpaling: Harga Mencipta Rendah dan RSI Membentuk Rendah Lebih Tinggi
    • Penurunan harga: Harga mencipta tinggi dan RSI membentuk tinggi yang lebih rendah
  4. Sistem pelaksanaan transaksi:
    • Mekanisme penangguhan dua mod: berdasarkan 20 kitaran terkini ((boleh disesuaikan) titik ayunan atau amplitudo ATR
    • Hentian dinamik: nisbah risiko kepada pulangan yang ditetapkan berdasarkan jumlah risiko (default 2: 1)
  5. Sistem visualisasi: Tandakan semua isyarat penyingkiran yang berkesan pada carta, dan paparkan dalam masa nyata garis mendatar untuk menghentikan (merah) dan menghentikan (hijau) kedudukan semasa.

Analisis kelebihan

  1. Mekanisme pengesahan pelbagai dimensi: meminta harga dan RSI mesti memenuhi bentuk tertentu pada masa yang sama, dan selang masa dalam ruang yang ditetapkan, mengurangkan kemungkinan isyarat palsu.
  2. Pengurusan risiko adaptasi:
    • Model titik berayun sesuai untuk pasaran trend, dapat menangkap pergerakan gelombang dengan berkesan
    • Mod ATR sesuai untuk pasaran yang bergolak, menyesuaikan stop loss secara automatik mengikut turun naik
  3. Ketinggian parameter boleh dikonfigurasi: Semua parameter utama (RSI kitaran, pengesanan pivot, nisbah pulangan risiko, dll.) boleh disesuaikan dengan ciri-ciri pasaran.
  4. Pengurusan dana yang saintifik: 10% kadar kedudukan digunakan secara lalai untuk mengelakkan pendedahan risiko yang berlebihan dalam satu transaksi.
  5. Maklum balas visual dalam masa nyata: Menyediakan sokongan keputusan perdagangan yang intuitif melalui penanda grafik dan garis hentian / hentian dinamik.

Analisis risiko

  1. Risiko ketinggalan: RSI sebagai penunjuk ketinggalan, yang mungkin menghasilkan isyarat kelewatan dalam keadaan unilateral yang teruk. Penyelesaian: menggabungkan penapis trend atau memendekkan kitaran RSI.
  2. Risiko pasaran goyah: mungkin menghasilkan isyarat palsu berturut-turut apabila tiada trend yang jelas. Penyelesaian: mengaktifkan mod ATR dan meningkatkan pengganda, atau penapis kadar turun naik tambahan.
  3. Risiko parameter overfit: Kombinasi parameter tertentu mungkin berfungsi dengan baik dalam data sejarah tetapi gagal pada cakera hidup. Penyelesaian: Uji tekanan pelbagai jenis pelbagai kitaran.
  4. Risiko pasaran yang melampau: Leapfrog boleh menyebabkan kegagalan kawalan kerugian. Penyelesaian: mengelakkan perdagangan sebelum dan selepas peristiwa ekonomi besar, atau menggunakan perlindungan opsyen.
  5. Ketergantungan kerangka masa: Performa berbeza dalam tempoh masa yang berbeza. Pelancaran: Optimumkan pengembalian yang mencukupi dalam kerangka masa sasaran.

Arah pengoptimuman

  1. Pengesahan indikator komposit: Tambah MACD atau indikator kuantiti pertukaran sebagai pengesahan sekunder, meningkatkan kualiti isyarat.
  2. Penyesuaian parameter dinamik: menyesuaikan secara automatik kitaran RSI dan ATR kali ganda mengikut turun naik pasaran.
  3. Pengoptimuman pembelajaran mesin: Mengoptimumkan kombinasi parameter utama menggunakan algoritma genetik.
  4. Analisis pelbagai bingkai masa: penapisan arah trend untuk memperkenalkan bingkai masa yang lebih tinggi.
  5. Pengurusan dinamik kedudukan: menyesuaikan saiz kedudukan mengikut kadar turun naik, untuk mencapai keseimbangan risiko.
  6. Penapis peristiwa: mengintegrasikan data kalendar ekonomi untuk mengelakkan transaksi sebelum dan selepas data penting dikeluarkan.

ringkaskan

Strategi RSI Dual Axis Deviation Quantification menyediakan kaedah perdagangan terbalik yang berstruktur melalui pengenalan deviasi yang sistematik dan pengurusan risiko yang ketat. Nilai utamanya adalah mengubah konsep analisis teknikal tradisional ke dalam peraturan perdagangan yang boleh diukur dan menyesuaikan diri dengan keadaan pasaran yang berbeza melalui mekanisme stop loss dua mod.

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