Strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan RSI


Tarikh penciptaan: 2023-12-20 15:39:19 Akhirnya diubah suai: 2023-12-20 15:39:19
Salin: 0 Bilangan klik: 699
1
fokus pada
1629
Pengikut

Strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan RSI

Gambaran keseluruhan

Strategi ini direka untuk strategi perdagangan kuantitatif berdasarkan Brinband dan indikator yang agak kuat ((RSI)). Strategi ini menggabungkan trend-following dan penilaian overbought dan oversold, yang bertujuan untuk memasuki pasaran pada peringkat permulaan trend dan keluar dalam keadaan overbought dan oversold untuk mencapai keuntungan.

Prinsip Strategi

Strategi ini menggunakan Bolling untuk menentukan trend harga dan menyokong tahap rintangan. Apabila harga mendekati Bolling, ia dianggap sebagai sinyal oversold; Apabila harga mendekati Bolling, ia dianggap sebagai sinyal overbought.

Peraturan perdagangan khusus adalah: masuk lebih banyak apabila harga lebih rendah daripada Brin Belt dan RSI lebih rendah daripada 30; masuk kosong apabila harga lebih tinggi daripada Brin Belt dan RSI lebih tinggi daripada 70. Apabila berhenti Exit, pilih garis tengah Brin Belt atau Brin Belt Belt di arah sebaliknya sebagai tempat berhenti. Hentikan kerugian ditetapkan sebagai peratusan harga masuk.

Kelebihan Strategik

Strategi ini digabungkan dengan pengesanan trend Brin dan penilaian RSI untuk membeli dan menjual lebih baik untuk memahami titik permulaan trend. Di samping itu, strategi berhenti dan hentikan juga lebih jelas dan membantu pengurusan risiko.

Strategi ini menggunakan pelbagai indikator dan parameter yang dapat meningkatkan ketepatan keputusan berbanding dengan menggunakan indikator seperti Brinks atau RSI secara tunggal. Dengan penyesuaian parameter yang sesuai, prestasi dagangan akan lebih stabil.

Risiko Strategik

Strategi ini bergantung kepada pengoptimuman parameter, dan jika parameter ditetapkan dengan tidak betul, risiko yang lebih besar akan dihadapi. Sebagai contoh, parameter kitaran Brin tidak sepadan, ia mungkin terlepas trend atau menghasilkan isyarat palsu.

Strategi ini juga mempunyai ketergantungan kepada varieti perdagangan. Untuk varieti yang lebih bergelombang, parameter Brin Belt perlu disesuaikan. Untuk varieti yang tidak menunjukkan trend, kesannya juga akan dikurangkan.

Adalah disyorkan untuk melakukan ujian pengoptimuman parameter, menilai tahap stop loss, dan menguji prestasi dalam pelbagai jenis dan keadaan pasaran.

Arah pengoptimuman

Strategi ini boleh terus dioptimumkan dengan cara berikut:

  1. Menilai dan mengoptimumkan parameter Brin Belt dan RSI agar lebih sesuai dengan ciri-ciri varieti yang diperdagangkan

  2. Menambah penilaian lain seperti KDJ, MACD dan sebagainya untuk membentuk model multi-faktor

  3. Menilai strategi hentian hentian, menetapkan hentian bergerak atau hentian hentian

  4. Optimumkan parameter dinamik mengikut varieti dan keadaan pasaran tertentu

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

ringkaskan

Strategi ini menggabungkan tanda Brin dan RSI, merancang satu set strategi pengesanan trend yang lebih lengkap. Kesan dan kestabilan masih ada ruang untuk diperbaiki dengan pengoptimuman parameter dan pengurusan risiko.

Kod sumber strategi
/*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)