Strategi Dagangan Kuantitatif Berdasarkan Bollinger Bands dan RSI

Penulis:ChaoZhang, Tarikh: 2023-12-20 15:39:19
Tag:

img

Ringkasan

Strategi ini merancang strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan Indeks Kekuatan Relatif (RSI). Ia menggabungkan pengesanan trend dan penilaian overbought / oversold untuk memasuki pasaran pada permulaan trend dan keluar pada tahap overbought / oversold untuk keuntungan.

Prinsip Strategi

Strategi ini menggunakan Bollinger Bands untuk menentukan trend harga dan tahap sokongan / rintangan. Harga yang mendekati Bollinger Band bawah dilihat sebagai isyarat oversold, sementara harga yang mendekati Bollinger Band atas dilihat sebagai isyarat overbought. Pada masa yang sama, ia menggabungkan penunjuk RSI untuk menentukan sama ada keadaan oversold atau overbought wujud.

Peraturan dagangan khusus adalah: pergi panjang apabila harga di bawah Bollinger Band bawah dan RSI di bawah 30; pergi pendek apabila harga di atas Bollinger Band atas dan RSI di atas 70. Untuk mengambil keuntungan, tetapkan Bollinger Band tengah atau Bollinger Band bertentangan sebagai tahap mengambil keuntungan. Stop loss ditetapkan pada peratusan tertentu dari harga kemasukan.

Kelebihan

Strategi ini menggabungkan keupayaan pengesanan trend Bollinger Bands dan penilaian overbought/oversold RSI untuk menangkap masa permulaan trend yang baik.

Berbanding dengan menggunakan satu penunjuk seperti Bollinger Bands atau RSI sahaja, strategi ini menggunakan beberapa penunjuk dan parameter untuk meningkatkan ketepatan keputusan. Dengan penyesuaian parameter yang betul, ia dapat mencapai prestasi yang agak stabil.

Risiko

Strategi ini sangat bergantung pada pengoptimuman parameter. Tetapan parameter yang tidak betul boleh menyebabkan tren yang hilang atau menghasilkan isyarat palsu. Sebagai contoh, tempoh Bollinger yang tidak sesuai boleh menyebabkan masalah seperti itu.

Strategi juga bergantung kepada instrumen dagangan. Untuk aset yang sangat tidak menentu, parameter Bollinger Band perlu diselaraskan dengan sewajarnya. Untuk instrumen dengan trend yang tidak jelas, prestasi mungkin mengalami juga. Juga dipengaruhi oleh kos transaksi, slippage dan peristiwa pasaran yang melampau.

Ujian pengoptimuman parameter disyorkan untuk menilai tahap mengambil keuntungan / berhenti kerugian dan prestasi di pelbagai aset dan rejimen pasaran.

Arahan pengoptimuman

Beberapa aspek boleh ditingkatkan:

  1. Menilai dan mengoptimumkan parameter untuk Bollinger Bands dan RSI untuk lebih sesuai dengan ciri-ciri instrumen dagangan

  2. Menggabungkan penunjuk tambahan seperti KDJ, MACD untuk membina model pelbagai faktor

  3. Mengkaji strategi mengambil keuntungan/berhenti kehilangan, seperti kehilangan berhenti atau keluar skala.

  4. Melakukan penyesuaian parameter dinamik berdasarkan aset tertentu dan keadaan pasaran

  5. Tambah model pembelajaran mesin untuk menilai kualiti isyarat dan tahap risiko

Ringkasan

Strategi ini mengintegrasikan Bollinger Bands dan RSI untuk sistem trend berikut yang komprehensif. Terdapat ruang lebih lanjut untuk meningkatkan keberkesanan dan kestabilan melalui penyesuaian parameter dan pengurusan risiko. Penyesuaian dan pengoptimuman tersuai disyorkan berdasarkan keperluan individu dan keutamaan risiko untuk prestasi yang lebih baik.


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BB + RSI Estrategia", overlay=true)

longitud = input(20, title="Longitud BB", minval=5, maxval=50, step=1)
multiplicador = input(2.0, title="Multiplicador BB", type=input.float, step=0.1)
timeframe_bb = input("D", title="Marco de Tiempo BB", type=input.resolution)
rsi_length = input(14, title="Longitud RSI", minval=5, maxval=50, step=1)
rsi_overbought = input(70, title="Nivel de sobrecompra RSI", minval=50, maxval=80, step=1)
rsi_oversold = input(30, title="Nivel de sobreventa RSI", minval=20, maxval=50, step=1)
take_profit = input("Central", title="Take Profit (banda)", options=["Central", "Opuesta"])
stop_loss = input(2.00, title="Stop Loss", type=input.float, step=0.10)

var SL = 0.0

[banda_central, banda_superior, banda_inferior] = security(syminfo.tickerid, timeframe_bb, bb(close, longitud, multiplicador))
rsi_value = rsi(close, rsi_length)

comprado = strategy.position_size > 0
vendido = strategy.position_size < 0

if not comprado and not vendido
    if close < banda_inferior and rsi_value < rsi_oversold
        // Realizar la compra
        cantidad = round(strategy.equity / close)
        strategy.entry("Compra", strategy.long, qty=cantidad, when=cantidad > 0)
        SL := close * (1 - (stop_loss / 100))

    if close > banda_superior and rsi_value > rsi_overbought
        // Realizar la Venta
        cantidad = round(strategy.equity / close)
        strategy.entry("Venta", strategy.short, qty=cantidad, when=cantidad > 0)
        SL := close * (1 + (stop_loss / 100))

if comprado
    // Verificar el take profit
    if take_profit == "Central" and close >= banda_central
        strategy.close("Compra", comment="TP")
        SL := 0

    if take_profit == "Opuesta" and close >= banda_superior
        strategy.close("Compra", comment="TP")
        SL := 0
    // Verificar el stop loss
    if close <= SL
        strategy.close("Compra", comment="SL")
        SL := 0

if vendido
    // Verificar el take profit
    if take_profit == "Central" and close <= banda_central
        strategy.close("Venta", comment="TP")
        SL := 0

    if take_profit == "Opuesta" and close <= banda_inferior
        strategy.close("Venta", comment="TP")
        SL := 0
    // Verificar el Stop loss
    if close >= SL
        strategy.close("Venta", comment="SL")
        SL := 0

// Salida
plot(SL > 0 ? SL : na, style=plot.style_circles, color=color.red)
g1 = plot(banda_superior, color=color.aqua)
plot(banda_central, color=color.red)
g2 = plot(banda_inferior, color=color.aqua)
fill(g1, g2, color=color.aqua, transp=97)

// Dibujar niveles de sobrecompra/sobreventa del RSI
hline(rsi_overbought, "RSI Overbought", color=color.red)
hline(rsi_oversold, "RSI Oversold", color=color.green)

Lebih lanjut