
Strategi penembusan RSI bidirectional adalah strategi perdagangan algoritmik yang menggunakan indikator RSI untuk mengidentifikasi titik balik harga. Strategi ini membandingkan indikator RSI dengan set nilai upside dan downside untuk menentukan apakah pasar telah melampaui overbought dan mengirimkan sinyal perdagangan.
Strategi ini terutama bergantung pada indikator RSI untuk menilai situasi. Indikator RSI dihitung berdasarkan perubahan harga penutupan dalam periode tertentu, yang mencerminkan daya beli saham. Ketika RSI melewati batas atas yang ditetapkan (default 75), berarti saham memasuki area overbought; Ketika RSI melewati batas bawah yang ditetapkan (default 25), berarti saham memasuki area oversold.
Peraturan penilaian strategis:
Logika perdagangan yang sederhana dan jelas, parameter referensi yang diatur dengan wajar, ruang yang besar yang dapat dikonfigurasi, cocok untuk menangkap tren yang lebih besar dalam situasi pasar.
Strategi ini memiliki keuntungan sebagai berikut:
Secara keseluruhan, strategi ini memiliki parameter acuan yang masuk akal, mudah diterapkan, dapat secara efektif menilai reversal harga melalui indikator RSI, cocok untuk menangkap tren besar di pasar, dan merupakan strategi kuantitatif yang mudah dikuasai.
Meskipun strategi ini sederhana dan dapat diandalkan, kita tidak boleh mengabaikan potensi risiko yang dihadapi:
Untuk mengendalikan risiko, kita perlu memperhatikan hal-hal berikut:
Mengingat bahwa strategi ini sebagian besar menghadapi risiko kesalahan perhitungan terbalik dan kerugian akibat kehancuran, kita dapat mengoptimalkannya dari beberapa sisi:
Strategi penembusan RSI dua arah secara keseluruhan adalah strategi kuantitatif yang sederhana dan praktis. Strategi ini menilai reversal harga melalui indikator RSI dan memungkinkan pelacakan tren yang sederhana. Meskipun ada risiko kesalahan penilaian tertentu, namun dapat dioptimalkan melalui penyesuaian parameter dan pemfilteran sinyal, memainkan peran penting dalam menangkap tren garis tengah dan panjang.
/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("RSI Algo", overlay=true)
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")
//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0
london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)
time_cond = true
myPeriod = input(defval=14, type=input.integer, title="Period")
myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold")
myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold")
myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim")
myLineToggle = input(defval=true, type=input.bool, title="Show Lines")
myLabelToggle = input(defval=true, type=input.bool, title="Show Labels")
myRSI=rsi(close, myPeriod)
buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond
sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond
myPosition = 0
myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0
trendColor = buy ? color.red : sell ? color.green : na
plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false)
plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false)
plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false)
strategy.initial_capital = 50000
//Calculate the size of the next trade
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit //floating profit/loss
risk = input(2,type=input.float,title="Risk %")/100 //risk % per trade
isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...")
stop = input(250, title="stop loss pips")
tp = input(2500, title="take profit pips")
if(isTwoDigit)
stop := stop/100
temp01 = balance * risk //Risk in USD
temp02 = temp01/stop //Risk in lots
temp03 = temp02*100000 //Convert to contracts
size = 1
strategy.entry("long",1,size,when=buy and myPosition[1]==1 )
strategy.entry("short",0,size,when=sell and myPosition[1]==0)
strategy.exit("exit_long","long",loss=stop, profit=tp) //Long exit (stop loss)
strategy.exit("exit_short","short",loss=stop, profit=tp) //Short exit (stop loss)
//strategy.close_all(when= not time_cond)