Strategi ini melaksanakan perdagangan pembalikan dengan mengesan isyarat overbought dan oversold yang terlepas dari penunjuk RSI. Isyarat beli dihasilkan apabila RSI turun dari tahap overbought, dan isyarat jual apabila RSI melantun dari tahap oversold, bertujuan untuk menangkap peluang pembalikan.
Indikator RSI mengenal pasti tahap overbought/oversold. Overbought apabila RSI melintasi ambang overbought, oversold apabila melintasi di bawah ambang oversold.
overbought = rsi > uplimit
oversold = rsi < dnlimit
Jika RSI overbought bar terakhir dan keluar overbought bar ini, isyarat beliup1
Jika RSI adalah oversold bar terakhir dan keluar oversold bar ini, isyarat jualdn1
dihasilkan.
up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false
Jika arah bar sejajar dengan arah kedudukan, dan badan bar melebihi separuh daripada purata 10 tempohnya, isyarat keluar diaktifkan.
exit = (((strategy.position_size > 0 and bar == 1) or
(strategy.position_size < 0 and bar == -1)) and
body > abody / 2)
Mengesan isyarat pembalikan RSI yang terlepas, mengelakkan keperluan untuk menangkap titik overbought / oversold tepat pada masanya.
Leverage sifat pembalikan RSI
Menggabungkan arah bar dan saiz ke dalam logik keluar untuk mengelakkan pengesanan lanjut selepas pullbacks.
Risiko isyarat palsu daripada RSI
Harga mungkin telah menarik balik dengan ketara apabila isyarat pengesanan, meningkatkan risiko kerugian
Risiko penyingkiran awal sebelum pembalikan keuntungan penuh
Mengoptimumkan parameter seperti tahap overbought / oversold, tempoh kembali dan lain-lain berdasarkan pasaran yang berbeza
Sesuaikan saiz kedudukan, seperti mengurangkan saiz apabila isyarat pengesanan
Meningkatkan masa kemasukan, menambah penapis di luar isyarat pengesanan
Meningkatkan keluar untuk meningkatkan keuntungan, seperti penangguhan keuntungan
Mengoptimumkan hentian untuk mengurangkan kerugian, seperti hentian trailing atau hentian kerucut
Strategi ini melaksanakan perdagangan pembalikan dengan mengesan isyarat overbought / oversold RSI. Ia mempunyai kelebihan menangkap isyarat pembalikan tetapi juga mempunyai risiko isyarat dan kerugian palsu. Pengoptimuman lanjut dapat meningkatkan kestabilan dan keuntungan strategi.
/*backtest start: 2023-09-20 00:00:00 end: 2023-09-27 00:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Anti RSI Strategy v1.0", shorttitle = "Anti RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") rsiperiod1 = input(14, defval = 14, minval = 2, maxval = 50, title = "RSI Period") rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit") showarr = input(false, defval = false, title = "Show Arrows") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //RSI uprsi1 = rma(max(change(close), 0), rsiperiod1) dnrsi1 = rma(-min(change(close), 0), rsiperiod1) rsi = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1)) uplimit = 100 - rsilimit1 dnlimit = rsilimit1 //Body body = abs(close - open) abody = sma(body, 10) //Signals bar = close > open ? 1 : close < open ? -1 : 0 overbought = rsi > uplimit oversold = rsi < dnlimit up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false up2 = bar == -1 and strategy.position_size > 0 and overbought == false dn2 = bar == 1 and strategy.position_size < 0 and oversold == false norma = overbought == false and oversold == false exit = (((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2) //Arrows col = exit ? black : up1 or dn1 or up2 or dn2 ? blue : na needup = up1 or up2 needdn = dn1 or dn2 needexitup = exit and strategy.position_size < 0 needexitdn = exit and strategy.position_size > 0 plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0) plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 or up2 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()