
Strategi penembusan RSI dua arah adalah strategi perdagangan algoritma yang menggunakan indikator RSI untuk mengenal pasti titik balik harga. Ia membandingkan indikator RSI dengan nilai terhad yang ditetapkan untuk menentukan apakah pasaran telah melampaui harga jual dan mengeluarkan isyarat perdagangan.
Strategi ini bergantung kepada indikator RSI untuk menilai keadaan. Indeks RSI dikira berdasarkan perubahan harga penutupan dalam tempoh tertentu, yang mencerminkan daya beli saham. Apabila RSI melintasi set harga atas (default 75), saham memasuki kawasan overbought; apabila RSI melintasi set harga bawah (default 25), saham memasuki kawasan oversold.
Peraturan penilaian strategik:
Logik dagangan mudah dan jelas, parameter rujukan ditetapkan dengan munasabah, ruang yang boleh dikonfigurasi besar, sesuai untuk menangkap trend yang lebih besar dalam pasaran.
Strategi ini mempunyai kelebihan berikut:
Secara keseluruhannya, parameter rujukan strategi ini ditetapkan dengan munasabah, mudah dilaksanakan, dapat menilai perubahan harga dengan berkesan melalui indikator RSI, sesuai untuk menangkap trend besar di pasaran, dan merupakan strategi kuantitatif yang mudah dipelajari.
Walaupun strategi ini mudah dan boleh dipercayai, kita tidak boleh mengabaikan potensi risiko yang dihadapi:
Untuk mengawal risiko, kita perlu berhati-hati dengan perkara berikut:
Dengan mengambil kira bahawa strategi ini kebanyakannya berhadapan dengan risiko kesilapan pembalikan dan kerugian akibat kejutan, kita boleh mengoptimumkannya dalam beberapa aspek:
Strategi penembusan RSI dua arah secara keseluruhan adalah strategi kuantitatif yang mudah dan praktikal. Ia menilai harga berbalik dengan indikator RSI, dan melakukan trend yang mudah. Walaupun terdapat risiko kesalahan, ia dapat dioptimumkan melalui penyesuaian parameter dan penapisan isyarat, memainkan peranan penting dalam menangkap trend 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)