
Strategi ini disebut strategi RSI Bollinger Bands Stop Loss (RSI Bollinger Bands TP/SL Strategy). Strategi ini menggabungkan indikator RSI dan indikator Bollinger Bands untuk melakukan posisi tren dan melakukan perdagangan yang melanggar.
Indikator RSI dapat menentukan apakah suatu saham berada dalam zona overbought dan oversold. Jika RSI lebih besar dari garis overbought yang ditetapkan, maka itu adalah overbought, dan jika lebih kecil dari garis oversold yang ditetapkan, maka itu adalah oversold. Strategi ini menetapkan garis overbought menjadi 50, dan garis oversold menjadi 50.
Brin-band dengan menghitung selisih standar harga saham, mendapatkan harga saham naik-turun. Rel atas adalah garis resistensi, rel bawah adalah garis dukungan. Rel atas adalah titik beli ketika harga saham naik turun, dan rel bawah adalah titik jual ketika naik turun.
Ketika indikator RSI muncul di bawah sinyal reversal, sementara harga saham menembus Bollinger Bands downtrack, berpikir bahwa pasar dari bawah ke atas reversal, melakukan lebih banyak; ketika indikator RSI muncul di atas sinyal reversal, sementara harga saham jatuh Bollinger Bands uptrack, berpikir bahwa pasar dari atas ke bawah reversal, melakukan shorting.
Indikator RSI dan indikator Brinks digunakan untuk menentukan tren dan titik balik. Penggunaan keduanya dalam kombinasi dapat meningkatkan akurasi identifikasi sinyal jual beli yang sebenarnya dan mencegah terjadinya false breakout.
Strategi yang mengatur stop loss stop loss, melakukan stop loss plus entry price(Rasio Stop Loss + 1) Stop Loss adalah harga masuk(1- Stop Loss Ratio); sebaliknya, melakukan shorting dapat mengunci keuntungan, menghindari kerugian, dan mengontrol risiko.
Strategi dapat memilih hanya melakukan perdagangan lebih banyak, hanya melakukan perdagangan lebih sedikit atau perdagangan dua arah, pengguna dapat memilih arah yang berbeda sesuai dengan kondisi pasar, dan memiliki fleksibilitas untuk mengendalikan risiko.
Ukuran standar dari Brinband mempengaruhi lebar dari Brinband sehingga mempengaruhi sinyal perdagangan yang dihasilkan. Jika parameter yang tidak tepat, dapat menghasilkan banyak sinyal yang salah.
Jika terjadi pembalikan V, pengaturan Stop Loss bisa terlalu radikal dan menyebabkan kerugian yang tidak perlu.
Parameter RSI juga mempengaruhi bentuk kurva RSI. Jika parameter RSI ditetapkan dengan salah, akurasi sinyal reversal RSI berkurang.
Lebih banyak parameter panjang RSI dapat diuji untuk menemukan kombinasi parameter yang optimal.
Anda dapat menguji lebih banyak panjang pita Brin dan parameter standar deviasi untuk menemukan kombinasi parameter optimal.
Parameter rasio stop-loss optimal dapat ditemukan dengan pengukuran ulang.
Strategi ini menggunakan indikator RSI dan indikator Bollinger Bands untuk menilai tren dan pembalikan, menambahkan risiko pengendalian mekanisme stop loss, yang dapat secara otomatis mengidentifikasi titik jual beli dan menghentikan stop loss tepat waktu. Strategi ini juga memiliki beberapa risiko, terutama dapat ditingkatkan melalui metode optimasi parameter. Secara keseluruhan, strategi ini memiliki kepraktisan yang kuat.
/*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")