RSI Bollinger Bands Strategi TP/SL

Penulis:ChaoZhang, Tanggal: 2023-12-21 11:17:19
Tag:

img

I. Ringkasan Strategi

Strategi ini disebut RSI Bollinger Bands TP/SL Strategy. Ini menggabungkan indikator RSI dan Bollinger Bands untuk mengidentifikasi tren dan sinyal perdagangan. Ketika indikator RSI menunjukkan sinyal overbought atau oversold dan harga menyentuh atau menembus Bollinger Bands, posisi panjang atau pendek akan dibuka. Selain itu, mengambil keuntungan dan titik stop loss juga diatur untuk mengendalikan risiko.

II. Logika Strategi

1. Indikator RSI untuk Pembalikan

Indikator RSI menilai apakah saham terlalu banyak dibeli atau terlalu banyak dijual. Pembacaan RSI di atas garis overbought menunjukkan kondisi overbought, sementara pembacaan di bawah garis oversold menunjukkan kondisi oversold.

2. Bollinger Bands untuk Trend

Bollinger Bands memetakan garis standar deviasi di atas dan di bawah rata-rata bergerak sederhana. Band atas bertindak sebagai resistance dan band bawah bertindak sebagai support.

3. Kombinasi RSI dan Bollinger Bands

Ketika indikator RSI menunjukkan sinyal pembalikan bawah dan harga menembus band bawah Bollinger Bands, itu dianggap sebagai pembalikan ke atas, sehingga pergi panjang.

III. Keuntungan

1. Keakuratan yang Ditingkatkan dengan Indikator Ganda

RSI dan Bollinger Bands keduanya digunakan untuk menentukan tren dan pembalikan.

2. Pengendalian risiko menggunakan TP/SL

Strategi yang ditetapkan mengambil keuntungan (TP) dan stop loss (SL) poin untuk mengunci keuntungan dan memaksimalkan mitigasi kerugian.

3. Arahan yang dapat disesuaikan

Pengguna dapat pergi hanya panjang, hanya pendek atau kedua arah berdasarkan kondisi pasar, memungkinkan kontrol risiko yang fleksibel.

IV. Risiko

1. Parameter Bollinger Bands yang Sensitif

Ukuran standar deviasi mempengaruhi lebar band dan sinyal perdagangan. pengaturan yang tidak benar dapat menghasilkan sinyal palsu yang berlebihan.

2. Risiko TP/SL

Pembalikan berbentuk V dapat memicu kerugian yang tidak perlu dengan pengaturan TP / SL yang terlalu agresif.

3. Parameter RSI yang sensitif

Pengaturan parameter RSI yang salah menyebabkan penurunan akurasi sinyal pembalikan.

V. Arahan Optimalisasi

1. Optimalkan Parameter RSI

Lebih banyak nilai panjang RSI dapat diuji untuk menemukan kombinasi parameter yang optimal.

2. Optimalkan Parameter Bollinger Bands

Lebih banyak panjang dan standar deviasi dapat diuji untuk menemukan kombinasi parameter yang optimal.

3. Uji Rasio TP/SL yang Berbeda

Pengujian balik dapat membantu menemukan rasio TP/SL yang optimal.

VI. Kesimpulan

Strategi ini memanfaatkan RSI dan Bollinger Bands untuk mengidentifikasi tren dan pembalikan, dan mengatur TP / SL untuk mengendalikan risiko. Ini dapat secara otomatis mendeteksi sinyal perdagangan dan mengelola keluar. Masih ada beberapa risiko yang dapat ditingkatkan dengan optimasi parameter. Secara umum, ini adalah strategi praktis dengan penerapan 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")



















Lebih banyak