Strategi perdagangan kuantitatif parameter dinamis RSI dengan bantuan crossover rata-rata bergerak ganda

RSI MA SMA EMA WMA SMMA RMA
Tanggal Pembuatan: 2025-01-17 16:14:38 Akhirnya memodifikasi: 2025-01-17 16:14:38
menyalin: 1 Jumlah klik: 410
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif parameter dinamis RSI dengan bantuan crossover rata-rata bergerak ganda

Ringkasan

Ini adalah strategi perdagangan kuantitatif yang menggabungkan Indeks Kekuatan Relatif (RSI) dengan beberapa rata-rata pergerakan. Strategi ini terutama menentukan tren pasar dengan memantau sinyal persilangan berbagai jenis moving average (termasuk SMA, EMA, WMA dan SMMA) pada indikator RSI, dan menggabungkan rentang overbought dan oversold dari indikator RSI itu sendiri sebagai dasar tambahan untuk penilaian, untuk menentukan tren pasar. Waktu perdagangan.

Prinsip Strategi

Strategi ini terutama mencakup langkah-langkah perhitungan utama berikut:

  1. Hitung indikator RSI periode 14, atur area overbought ke 70 dan area oversold ke 30
  2. Hitung tiga rata-rata bergerak dengan parameter berbeda pada kurva RSI:
    • MA1: 20 periode, SMA/EMA/WMA/SMMA opsional
    • MA2: periode 50, SMA/EMA/WMA/SMMA opsional
    • MA3: periode 100, SMA/EMA/WMA/SMMA opsional
  3. Aturan pembuatan sinyal perdagangan:
    • Sinyal beli: Ketika MA2 melintasi MA3 ke atas
    • Sinyal jual: Ketika MA2 melintasi MA3 ke bawah
  4. Pada saat yang sama, mendeteksi penyimpangan indikator RSI untuk memberikan referensi tambahan untuk keputusan perdagangan

Keunggulan Strategis

  1. Beberapa indikator teknis saling melakukan validasi silang untuk meningkatkan keandalan sinyal perdagangan
  2. Jenis dan parameter rata-rata bergerak dapat disesuaikan, yang memiliki fleksibilitas yang kuat
  3. Fungsi deteksi divergensi RSI dapat membantu mendeteksi titik balik pasar terlebih dahulu
  4. Gunakan manajemen posisi persentase untuk mengendalikan risiko secara efektif
  5. Efek visualisasi yang sangat baik, mudah dianalisis dan diuji ulang

Risiko Strategis

  1. Pergerakan rata-rata persilangan dapat memiliki efek lagging
  2. Sinyal palsu sering terjadi di pasar sideways
  3. Distorsi indikator RSI dalam kondisi pasar tertentu
  4. Pemilihan parameter yang tidak tepat dapat menyebabkan sinyal perdagangan terlalu banyak atau terlalu sedikit Solusi sementara:
  • Disarankan untuk menggabungkan tren pasar dan volume perdagangan untuk validasi silang
  • Frekuensi perdagangan dapat dioptimalkan dengan menyesuaikan parameter rata-rata bergerak
  • Tetapkan stop loss dan take profit untuk mengendalikan risiko

Arah optimasi strategi

  1. Optimasi penyaringan sinyal:
  • Tambahkan indikator konfirmasi tren
  • Tambahkan analisis volume
  1. Optimasi dinamis parameter:
  • Sesuaikan parameter RSI dan MA secara otomatis sesuai dengan volatilitas pasar
  • Memperkenalkan metode perhitungan siklus adaptif
  1. Optimasi pengendalian risiko:
  • Mengembangkan mekanisme stop loss dan take profit yang dinamis
  • Merancang sistem manajemen gudang yang dinamis

Meringkaskan

Strategi ini menggabungkan RSI dan beberapa rata-rata pergerakan untuk membangun sistem perdagangan yang sangat adaptif. Keuntungan inti dari strategi ini terletak pada validasi silang berbagai indikator teknis dan konfigurasi parameter yang fleksibel, tetapi pada saat yang sama, perhatian harus diberikan pada kelambatan rata-rata pergerakan dan dampak kondisi pasar pada kinerja strategi. Melalui optimalisasi berkelanjutan dan pengendalian risiko, strategi ini diharapkan dapat mencapai kinerja yang stabil dalam transaksi aktual.

Kode Sumber Strategi
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy(title="Relative Strength Index with MA Strategy", shorttitle="RSI-MA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// RSI Inputs
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
calculateDivergence = input.bool(false, title="Calculate Divergence", group="RSI Settings", tooltip="Calculating divergences is needed in order for divergence alerts to fire.")

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

// RSI Plot
plot(rsi, "RSI", color=#7E57C2)
hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
hline(30, "RSI Lower Band", color=#787B86)
fill(hline(70), hline(30), color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

// RSI-based MA Inputs
grpRSIMovingAverages = "RSI Moving Averages"
ma1Length = input.int(20, title="MA1 Length", group=grpRSIMovingAverages)
ma2Length = input.int(50, title="MA2 Length", group=grpRSIMovingAverages)
ma3Length = input.int(100, title="MA3 Length", group=grpRSIMovingAverages)
ma1Type = input.string("SMA", title="MA1 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)
ma2Type = input.string("EMA", title="MA2 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)
ma3Type = input.string("WMA", title="MA3 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)

// MA Calculation Function
calcMA(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "WMA" => ta.wma(source, length)
        "SMMA" => ta.rma(source, length)

// MA Calculations
ma1 = calcMA(rsi, ma1Length, ma1Type)
ma2 = calcMA(rsi, ma2Length, ma2Type)
ma3 = calcMA(rsi, ma3Length, ma3Type)

// MA Plots
plot(ma1, title="RSI MA1", color=color.blue)
plot(ma2, title="RSI MA2", color=color.green)
plot(ma3, title="RSI MA3", color=color.red)

// Divergence (Retained from original script)
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)

_inRange(bool cond) =>
    bars = ta.barssince(cond)
    rangeLower <= bars and bars <= rangeUpper

plFound = false
phFound = false

bullCond = false
bearCond = false

rsiLBR = rsi[lookbackRight]

if calculateDivergence
    // Regular Bullish
    plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))    
    rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and _inRange(plFound[1])
    lowLBR = low[lookbackRight]
    priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
    bullCond := priceLL and rsiHL and plFound

    // Regular Bearish
    phFound := not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
    rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and _inRange(phFound[1])
    highLBR = high[lookbackRight]
    priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
    bearCond := priceHH and rsiLH and phFound

// plot(
//      plFound ? rsiLBR : na,
//      offset=-lookbackRight,
//      title="Regular Bullish",
//      linewidth=2,
//      color=(bullCond ? bullColor : noneColor),
//      display = display.pane
//      )

plotshape(
     bullCond ? rsiLBR : na,
     offset=-lookbackRight,
     title="Regular Bullish Label",
     text=" Bull ",
     style=shape.labelup,
     location=location.absolute,
     color=bullColor,
     textcolor=textColor
     )

// plot(
//      phFound ? rsiLBR : na,
//      offset=-lookbackRight,
//      title="Regular Bearish",
//      linewidth=2,
//      color=(bearCond ? bearColor : noneColor),
//      display = display.pane
//      )

plotshape(
     bearCond ? rsiLBR : na,
     offset=-lookbackRight,
     title="Regular Bearish Label",
     text=" Bear ",
     style=shape.labeldown,
     location=location.absolute,
     color=bearColor,
     textcolor=textColor
     )

alertcondition(bullCond, title='Regular Bullish Divergence', message="Found a new Regular Bullish Divergence, `Pivot Lookback Right` number of bars to the left of the current bar.")
alertcondition(bearCond, title='Regular Bearish Divergence', message='Found a new Regular Bearish Divergence, `Pivot Lookback Right` number of bars to the left of the current bar.')

// ----- MUA/BÁN -----

// Điều kiện Mua: MA2 cắt lên MA3 và MA3 < 55
buyCondition = ta.crossover(ma2, ma3) 

// Điều kiện Bán: MA2 cắt xuống MA3 và MA3 > 40
sellCondition = ta.crossunder(ma2, ma3)

// Thực hiện lệnh Mua/Bán
if (buyCondition)
    strategy.entry("Buy", strategy.long, comment="Buy Signal")

if (sellCondition)
    strategy.close("Buy", comment="Sell Signal")



// ----- KẾT THÚC -----