Strategi pecah RSI berganda adalah strategi dagangan algoritma yang mengenal pasti titik pembalikan harga menggunakan penunjuk RSI. Ia menghasilkan isyarat dagangan dengan membandingkan penunjuk RSI dengan nilai ambang atas dan bawah yang telah ditetapkan untuk menentukan sama ada pasaran terlalu banyak dibeli atau terlalu banyak dijual.
Strategi ini terutamanya bergantung kepada penunjuk RSI untuk menilai keadaan pasaran. Penunjuk RSI dikira berdasarkan perubahan harga penutupan dalam tempoh tertentu, mencerminkan momentum pembelian dan penjualan saham. Apabila RSI melintasi di atas ambang atas yang telah ditetapkan (default 75), ia menunjukkan saham telah memasuki zon overbought. Apabila RSI jatuh di bawah ambang bawah yang telah ditetapkan (default 25), ia menunjukkan saham telah memasuki zon oversold.
Peraturan penghakiman adalah:
Logik dagangnya mudah dan jelas, dengan tetapan parameter rujukan yang munasabah, ruang konfigurasi yang besar, dan sesuai untuk menangkap trend yang lebih besar di pasaran.
Kelebihan strategi ini termasuk:
Secara umum, dengan tetapan parameter rujukan yang munasabah, pelaksanaan yang mudah, dan keupayaan untuk menentukan pembalikan harga dengan berkesan melalui RSI, strategi ini sesuai untuk menangkap trend jangka sederhana hingga panjang dan mudah difahami dan digunakan sebagai strategi kuantitatif.
Walaupun strategi ini agak mudah dan boleh dipercayai, kita tidak boleh mengabaikan potensi risiko yang dihadapi:
Untuk mengawal risiko, kita perlu memberi perhatian kepada perkara berikut:
Memandangkan risiko utama yang dihadapi oleh strategi ini adalah kesalahan penilaian pembalikan dan kerugian di pasaran yang berbeza, kita boleh mengoptimumkan dari aspek berikut:
Ringkasnya, strategi pecah RSI berganda adalah strategi kuantitatif yang mudah dan praktikal. Ia mengenal pasti pembalikan harga melalui RSI untuk mencapai trend yang mudah. Walaupun terdapat risiko salah penilaian tertentu, pengoptimuman seperti penyesuaian parameter, penapisan isyarat dapat membantu mengurangkan ini dan membolehkannya memainkan peranan penting dalam menangkap trend jangka menengah hingga panjang. Logiknya mudah, menjadikannya sesuai untuk kuantiti pemula untuk merujuk dan belajar dari. Dengan pengoptimuman lanjut, strategi ini menunjukkan janji dalam mendapatkan pulangan kuantitatif yang agak stabil.
/*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)