Strategi RSI breakout ganda adalah strategi perdagangan algoritmik yang mengidentifikasi titik pembalikan harga menggunakan indikator RSI. Ini menghasilkan sinyal perdagangan dengan membandingkan indikator RSI dengan nilai ambang atas dan bawah yang telah ditetapkan sebelumnya untuk menentukan apakah pasar terlalu banyak dibeli atau terlalu banyak dijual.
Strategi ini terutama mengandalkan indikator RSI untuk menilai kondisi pasar. Indikator RSI dihitung berdasarkan perubahan harga penutupan selama periode tertentu, mencerminkan momentum pembelian dan penjualan saham. Ketika RSI melintasi di atas ambang batas atas yang telah ditetapkan (default 75), itu menunjukkan saham telah memasuki zona overbought. Ketika RSI turun di bawah ambang batas bawah yang telah ditetapkan (default 25), itu menunjukkan saham telah memasuki zona oversold.
Aturan pengadilan adalah:
Logika tradingnya sederhana dan jelas, dengan pengaturan parameter referensi yang wajar, ruang konfigurasi yang besar, dan cocok untuk menangkap tren yang lebih besar di pasar.
Keuntungan dari strategi ini meliputi:
Secara umum, dengan pengaturan parameter referensi yang wajar, implementasi yang sederhana, dan kemampuan untuk secara efektif menentukan pembalikan harga melalui RSI, strategi ini cocok untuk menangkap tren jangka menengah hingga panjang dan mudah dipahami dan digunakan sebagai strategi kuantitatif.
Meskipun strategi ini relatif sederhana dan dapat diandalkan, kita tidak dapat mengabaikan potensi risiko yang dihadapi:
Untuk mengendalikan risiko, kita perlu memperhatikan hal-hal berikut:
Mengingat risiko utama yang dihadapi oleh strategi ini adalah kesalahan penilaian pembalikan dan kerugian di berbagai pasar, kita dapat mengoptimalkan dari aspek berikut:
Secara singkat, strategi RSI breakout ganda adalah strategi kuantitatif yang sederhana dan praktis. Ini mengidentifikasi pembalikan harga melalui RSI untuk mencapai tren sederhana. Meskipun ada risiko penilaian yang salah, optimasi seperti penyesuaian parameter, penyaringan sinyal dapat membantu mengurangi hal ini dan memungkinkannya memainkan peran penting dalam menangkap tren jangka menengah hingga panjang. Logikanya sederhana, membuatnya cocok untuk referensi dan pembelajaran pemula. Dengan optimasi lebih lanjut, strategi ini menunjukkan janji dalam memperoleh pengembalian kuantitatif yang relatif 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)