Penunjuk RSI digabungkan dengan strategi dagangan Bollinger Bands


Tarikh penciptaan: 2023-12-21 11:17:19 Akhirnya diubah suai: 2023-12-21 11:17:19
Salin: 0 Bilangan klik: 809
1
fokus pada
1623
Pengikut

Penunjuk RSI digabungkan dengan strategi dagangan Bollinger Bands

I. Gambaran Strategik

Strategi ini dinamakan RSI Bollinger Bands TP/SL Strategy. Strategi ini menggabungkan RSI dan Bollinger Bands untuk mewujudkan penempatan trend dan perdagangan yang pecah. Apabila RSI menunjukkan isyarat overbought dan oversold, dan harga menyentuh atau menembusi Bollinger Bands ke atas atau ke bawah, lakukan operasi tambahan atau kosong.

2. Prinsip Strategi

1. RSI menjangkakan perubahan

Indeks RSI dapat menentukan sama ada saham berada di dalam rantaian overbought dan oversold. Apabila RSI lebih besar daripada garis overbought yang ditetapkan, ia adalah overbought, dan apabila ia lebih kecil daripada rantaian overbought yang ditetapkan, ia adalah oversold. Strategi ini menetapkan garis overbought menjadi 50, dan garis oversold menjadi 50.

2. Kecenderungan Brin untuk menilai

Beringkas Beringkas ini digunakan untuk mengukur perbezaan piawaian harga saham, untuk mendapatkan garis harga saham ke atas dan ke bawah. Garis atas adalah garis rintangan, dan garis bawah adalah garis sokongan. Garis atas adalah titik beli apabila harga saham melintasi garis bawah, dan garis bawah adalah titik jual apabila ia melintasi garis bawah.

3. RSI digabungkan dengan BRI

Apabila RSI menunjukkan isyarat pembalikan bawah, dan harga saham menembusi Bollinger Bands, maka ia dianggap sebagai pembalikan dari bawah ke atas, dan ia melakukan lebih banyak. Apabila RSI menunjukkan isyarat pembalikan atas, dan harga saham jatuh dari Bollinger Bands ke atas, ia dianggap sebagai pembalikan dari atas ke bawah, dan ia melakukan short.

Ketiga, kelebihan strategi

1. Penapisan dua arah meningkatkan ketepatan isyarat

Indeks RSI dan Bollinger Bands digunakan untuk menentukan trend dan titik balik. Penggunaan kedua-duanya dalam kombinasi dapat meningkatkan ketepatan pengenalan isyarat jual beli yang sebenar dan mengelakkan pecah palsu.

2. Kawalan risiko mekanisme hentian hentian

Strategi yang menetapkan titik berhenti dan berhenti, ditambah titik berhenti dan berhenti sebagai harga masuk(1 + Stop Loss Ratio), titik henti adalah harga permulaan(1-Rasio Hentikan Kerugian); sebaliknya, melakukan perdagangan bebas, yang dapat mengunci keuntungan, mengelakkan kerugian sebanyak mungkin, dan mengawal risiko.

3. Arah jual beli yang boleh disesuaikan

Strategi boleh dipilih hanya untuk melakukan perdagangan lebih banyak, hanya untuk melakukan perdagangan kosong atau perdagangan dua hala, pengguna boleh memilih arah yang berbeza mengikut keadaan pasaran, mengawal risiko secara fleksibel.

Risiko Strategik

1. Sensitif kepada parameter Brin

Saiz standard yang berbeza dalam pita Brin mempengaruhi lebar pita Brin yang mempengaruhi penciptaan isyarat perdagangan. Jika parameter tidak ditetapkan dengan betul, ia boleh menghasilkan banyak isyarat yang salah.

2. Risiko Kerosakan Henti

Sekiranya berlaku pembalikan bentuk V, tetapan Stop Loss mungkin terlalu radikal dan menyebabkan kerugian yang tidak perlu.

3. RSI Sensitif

Parameter RSI juga mempengaruhi bentuk kurva RSI. Jika parameter RSI ditetapkan dengan salah, ketepatan isyarat pembalikan RSI berkurang.

Lima, Strategi Untuk Mengoptimumkan

1. Mengoptimumkan parameter RSI

Lebih banyak parameter panjang RSI boleh diuji untuk mencari kombinasi parameter terbaik.

2. Mengoptimumkan parameter Brin

Anda boleh menguji lebih banyak panjang pita Brin dan parameter perbezaan piawai untuk mencari kombinasi parameter terbaik.

3. Uji pelbagai peratusan hentian hentian

Parameter nisbah stop-loss yang optimum boleh dijumpai dengan mengkaji semula.

VI

Strategi ini menggunakan indikator RSI dan indikator Brin untuk menilai trend dan pembalikan, dan menambah kawalan risiko mekanisme hentian hentian, yang dapat secara automatik mengenal pasti titik jual beli dan menghentikan hentian dalam masa yang tepat. Strategi ini juga mempunyai risiko tertentu, dan ia boleh diperbaiki terutamanya melalui kaedah pengoptimuman parameter. Secara keseluruhan, strategi ini mempunyai kegunaan yang kuat.

Kod sumber strategi
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BigCoinHunter

//@version=5
strategy(title="RSI_Boll-TP/SL", overlay=true, 
     pyramiding=0, default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, initial_capital=1000, 
     currency=currency.USD, commission_value=0.05, 
     commission_type=strategy.commission.percent, 
     process_orders_on_close=true)

//----------- get the user inputs --------------

//---------- RSI -------------
price = input(close, title="Source")

RSIlength = input.int(defval=6,title="RSI Length") 
RSIoverSold = input.int(defval=50, title="RSI OverSold", minval=1)
RSIoverBought = input.int(defval=50, title="RSI OverBought", minval=1)

//------- Bollinger Bands -----------
BBlength = input.int(defval=200, title="Bollinger Period Length", minval=1)
BBmult = input.float(defval=2.0, minval=0.001, maxval=50, step=0.1, title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
fill(plot1=p1, plot2=p2, title="Bollinger BackGround", color=color.new(color.aqua,90), fillgaps=false, editable=true)

//---------- input TP/SL ---------------
tp = input.float(title="Take Profit:", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss:  ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01

longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")

//---------- backtest range setup ------------
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay     = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth   = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear    = input.int(defval = 2042, title = "To Year", minval = 2010)

//------------ time interval setup -----------
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish    = timestamp(toYear, toMonth, toDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//------- define the global variables ------
var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
//--------- Colors ---------------

TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na
//bgcolor(switch2?(color.new(TrendColor,50)):na)


//--------- calculate the input/output points -----------
longProfitPrice  = strategy.position_avg_price * (1 + tp)     // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl)        // sl -> stop loss percentage

shortProfitPrice  = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)


//---------- RSI + Bollinger Bands Strategy -------------
vrsi = ta.rsi(price, RSIlength)

rsiCrossOver = ta.crossover(vrsi, RSIoverSold)
rsiCrossUnder = ta.crossunder(vrsi, RSIoverBought)

BBCrossOver = ta.crossover(source, BBlower)
BBCrossUnder = ta.crossunder(source, BBupper)

if (not na(vrsi))

    if rsiCrossOver and BBCrossOver
        long := true
        
    if rsiCrossUnder and BBCrossUnder
        long := false

//------------------- determine buy and sell points ---------------------
buySignall = window() and long  and (not stoppedOutLong)
sellSignall = window() and (not long)  and (not stoppedOutShort)

//---------- execute the strategy -----------------
if(longEntry and shortEntry)
    if long 
        strategy.entry("LONG", strategy.long, when = buySignall, comment = "ENTER LONG")
        stoppedOutLong := true
        stoppedOutShort := false
    else 
        strategy.entry("SHORT", strategy.short, when = sellSignall, comment = "ENTER SHORT")
        stoppedOutLong  := false
        stoppedOutShort := true

else if(longEntry)
    strategy.entry("LONG", strategy.long,  when = buySignall)
    strategy.close("LONG", when = sellSignall)
    if long 
        stoppedOutLong := true
    else
        stoppedOutLong  := false

else if(shortEntry)
    strategy.entry("SHORT", strategy.short, when = sellSignall)
    strategy.close("SHORT", when = buySignall)
    if not long
        stoppedOutShort := true
    else
        stoppedOutShort := false
    

//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment="Long TP/SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment="Short TP/SL Trigger")

else if(tp>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, comment="Long TP Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, comment="Short TP Trigger")
        
else if(sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG",  stop=longStopPrice, comment="Long SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT",  stop=shortStopPrice, comment="Short SL Trigger")