Strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan RSI

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

img

Gambaran umum

Strategi ini merancang strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan Relative Strength Index (RSI). Ini menggabungkan pelacakan tren dan penilaian overbought / oversold untuk memasuki pasar pada awal tren dan keluar pada tingkat overbought / oversold untuk mendapatkan keuntungan.

Prinsip Strategi

Strategi ini menggunakan Bollinger Bands untuk menentukan tren harga dan level support/resistance. Harga yang mendekati Bollinger Band yang lebih rendah dipandang sebagai sinyal oversold, sementara harga yang mendekati Bollinger Band yang lebih tinggi dipandang sebagai sinyal overbought. Pada saat yang sama, ini menggabungkan indikator RSI untuk menentukan apakah kondisi oversold atau overbought ada.

Aturan perdagangan khusus adalah: pergi panjang ketika harga berada di bawah Bollinger Band bawah dan RSI berada di bawah 30; pergi pendek ketika harga berada di atas Bollinger Band atas dan RSI berada di atas 70. Untuk mengambil keuntungan, atur Bollinger Band tengah atau Bollinger Band berlawanan sebagai tingkat mengambil keuntungan. Stop loss ditetapkan pada persentase tertentu dari harga masuk.

Keuntungan

Strategi ini menggabungkan kemampuan pelacakan tren Bollinger Bands dan penilaian overbought/oversold RSI untuk menangkap waktu awal tren yang baik.

Dibandingkan dengan menggunakan satu indikator seperti Bollinger Bands atau RSI saja, strategi ini memanfaatkan beberapa indikator dan parameter untuk meningkatkan akurasi keputusan.

Risiko

Strategi ini sangat bergantung pada optimasi parameter. Pengaturan parameter yang salah dapat menyebabkan hilangnya tren atau menghasilkan sinyal palsu. Misalnya, periode Bollinger yang tidak cocok dapat menyebabkan masalah seperti itu.

Strategi juga tergantung pada instrumen perdagangan. Untuk aset yang sangat fluktuatif, parameter Bollinger Band perlu disesuaikan. Untuk instrumen dengan tren yang tidak jelas, kinerja mungkin menderita juga. Juga dipengaruhi oleh biaya transaksi, slippage dan peristiwa pasar ekstrem.

Pengujian optimasi parameter dianjurkan untuk mengevaluasi tingkat profit taking/stop loss dan kinerja di berbagai aset dan rezim pasar.

Arahan Optimasi

Beberapa aspek dapat ditingkatkan:

  1. Mengevaluasi dan mengoptimalkan parameter untuk Bollinger Bands dan RSI agar lebih sesuai dengan karakteristik instrumen perdagangan

  2. Menggabungkan indikator tambahan seperti KDJ, MACD untuk membangun model multifaktor

  3. Mengevaluasi strategi profit taking/stop loss, seperti trailing stop loss atau scale exit

  4. Melakukan penyesuaian parameter dinamis berdasarkan aset spesifik dan kondisi pasar

  5. Tambahkan model pembelajaran mesin untuk menilai kualitas sinyal dan tingkat risiko

Ringkasan

Strategi ini mengintegrasikan Bollinger Bands dan RSI untuk sistem trend berikut yang komprehensif. Ada ruang lebih lanjut untuk meningkatkan efektivitas dan stabilitas melalui penyesuaian parameter dan manajemen risiko. Penyesuaian dan optimalisasi khusus dianjurkan berdasarkan kebutuhan individu dan preferensi risiko untuk kinerja 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 banyak