Persilangan purata bergerak berbilang membantu strategi dagangan kuantitatif parameter dinamik RSI

RSI MA SMA EMA WMA SMMA RMA
Tarikh penciptaan: 2025-01-17 16:14:38 Akhirnya diubah suai: 2025-01-17 16:14:38
Salin: 1 Bilangan klik: 410
1
fokus pada
1617
Pengikut

Persilangan purata bergerak berbilang membantu strategi dagangan kuantitatif parameter dinamik RSI

Gambaran keseluruhan

Ini ialah strategi dagangan kuantitatif yang menggabungkan Indeks Kekuatan Relatif (RSI) dengan purata pergerakan berganda. Strategi ini terutamanya menentukan arah aliran pasaran dengan memantau isyarat silang bagi pelbagai jenis purata bergerak (termasuk SMA, EMA, WMA dan SMMA) pada penunjuk RSI, dan menggabungkan julat terlebih beli dan terlebih jual bagi penunjuk RSI itu sendiri sebagai asas tambahan untuk pertimbangan, untuk menentukan arah aliran pasaran.

Prinsip Strategi

Strategi terutamanya merangkumi langkah pengiraan utama berikut:

  1. Kira penunjuk RSI 14 tempoh, tetapkan kawasan terlebih beli kepada 70 dan kawasan terlebih jual kepada 30
  2. Kira tiga purata bergerak dengan parameter berbeza pada lengkung RSI:
    • MA1: 20 tempoh, SMA/EMA/WMA/SMMA pilihan
    • MA2: Tempoh 50, SMA/EMA/WMA/SMMA pilihan
    • MA3: Tempoh 100, SMA/EMA/WMA/SMMA pilihan
  3. Peraturan penjanaan isyarat dagangan:
    • Isyarat beli: Apabila MA2 melintasi MA3 ke atas
    • Isyarat Jual: Apabila MA2 melintasi MA3 ke bawah
  4. Pada masa yang sama, mengesan sisihan penunjuk RSI untuk menyediakan rujukan tambahan untuk keputusan perdagangan

Kelebihan Strategik

  1. Penunjuk teknikal berbilang mengesahkan silang untuk meningkatkan kebolehpercayaan isyarat dagangan
  2. Jenis dan parameter purata bergerak boleh laras, yang mempunyai fleksibiliti yang kuat
  3. Fungsi pengesanan perbezaan RSI boleh membantu mengesan titik perubahan pasaran lebih awal
  4. Gunakan pengurusan kedudukan peratusan untuk mengawal risiko dengan berkesan
  5. Kesan visualisasi yang sangat baik, mudah untuk dianalisis dan backtest

Risiko Strategik

  1. Perpindahan purata bergerak boleh mempunyai kesan ketinggalan
  2. Isyarat palsu yang kerap mungkin berlaku dalam pasaran sisi
  3. Herotan penunjuk RSI dalam keadaan pasaran tertentu
  4. Pemilihan parameter yang tidak betul boleh mengakibatkan terlalu banyak atau terlalu sedikit isyarat dagangan Penyelesaian:
  • Adalah disyorkan untuk menggabungkan arah aliran pasaran dan volum dagangan untuk pengesahan silang
  • Kekerapan dagangan boleh dioptimumkan dengan melaraskan parameter purata bergerak
  • Tetapkan stop loss dan take profit untuk mengawal risiko

Arah pengoptimuman strategi

  1. Pengoptimuman penapisan isyarat:
  • Tambah penunjuk pengesahan arah aliran
  • Tambah analisis volum
  1. Pengoptimuman dinamik parameter:
  • Laraskan parameter RSI dan MA secara automatik mengikut turun naik pasaran
  • Memperkenalkan kaedah pengiraan kitaran adaptif
  1. Pengoptimuman kawalan risiko:
  • Membangunkan mekanisme henti rugi dan ambil untung yang dinamik
  • Reka bentuk sistem pengurusan gudang yang dinamik

ringkaskan

Strategi ini menggabungkan RSI dan berbilang purata bergerak untuk membina sistem perdagangan yang boleh disesuaikan. Kelebihan teras strategi terletak pada pengesahan silang berbilang penunjuk teknikal dan konfigurasi parameter yang fleksibel, tetapi pada masa yang sama, perhatian harus diberikan kepada ketinggalan purata bergerak dan kesan keadaan pasaran terhadap prestasi strategi. Melalui pengoptimuman berterusan dan kawalan risiko, strategi ini dijangka mencapai prestasi yang stabil dalam urus niaga sebenar.

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