Strategi ini dinamakan “RSI Reversal” dan merupakan strategi perdagangan kuantitatif berdasarkan indeks kekuatan relatif (RSI). Strategi ini menggunakan dua kitaran RSI yang berbeza sebagai isyarat membeli dan menjual untuk mencapai harga rendah dan tinggi dan mendapatkan peluang perdagangan yang dibawa oleh harga saham.
Strategi ini menggunakan RSI jangka masa cepat (default 55 hari) dan RSI jangka masa perlahan (default 126 hari) untuk membina isyarat perdagangan. Ia menghasilkan isyarat beli apabila RSI jangka masa cepat melintasi RSI jangka masa perlahan, dan sebaliknya menghasilkan isyarat jual apabila RSI jangka masa cepat melintasi RSI jangka masa perlahan. Dengan cara ini, peluang pembalikan trend jangka pendek dan jangka panjang dapat dijumpai dengan membandingkan kekuatan relatif pergerakan harga dalam dua tempoh masa yang berbeza.
Selepas masuk ke isyarat, strategi akan menetapkan titik hentian berhenti. Titik hentian secara default 0.9 kali harga masuk, titik hentian secara default 3% dari harga masuk. Pada masa yang sama, apabila isyarat pembalikan muncul semula, ia akan meratakan kedudukan semasa.
Strategi ini menggunakan RSI berputar balik pada dua paksi masa dengan membandingkan kedua-dua RSI dalam kitaran yang lebih cepat dan kitaran yang lebih perlahan sebagai isyarat perdagangan, dengan tujuan untuk menangkap peluang perubahan harga dalam jangka pendek. Ia juga menetapkan peraturan stop-loss untuk mengelakkan risiko.
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title="Relative Strength Index", shorttitle="RSI")
slen = input(55, title="Short length")
llen = input(126, title="Long length")
sup = ema(max(change(close), 0), slen)
sdown = ema(-min(change(close), 0), slen)
rsi1 = sdown == 0 ? 100 : sup == 0 ? 0 : 100 - (100 / (1 + sup / sdown))
lup = ema(max(change(close), 0), llen)
ldown = ema(-min(change(close), 0), llen)
rsi2 = ldown == 0 ? 100 : lup == 0 ? 0 : 100 - (100 / (1 + lup / ldown))
ob = input(55, title="Overbought")
os = input(45, title="Oversold")
tp = input(.9, title="Take profit level %")*.01
sl = input(3, title="Stoploss level %")*.01
mid = avg(ob,os)
plot (mid, color=#4f4f4f, transp=0)
hline (ob, color=#4f4f4f)
hline (os, color=#4f4f4f)
long = crossover(rsi1,rsi2)
short = crossunder(rsi1,rsi2)
vall = valuewhen(long,close,0)
lexit1 = high>=(vall*tp)+vall
lexit2 = low<=vall-(vall*sl)
vals = valuewhen(short,close,0)
sexit1 = low<=vals - (vals*tp)
sexit2 = high>=vals + (vals*sl)
bgcolor (color=long?lime:na,transp=50)
bgcolor (color=short?red:na, transp=50)
strategy.entry("Long", strategy.long, when=long)
strategy.close("Long", when=lexit1)
strategy.close("Long", when=lexit2)
strategy.close("Long", when=short)
strategy.entry("Short", strategy.short, when=short)
strategy.close("Short", when=sexit1)
strategy.close("Short", when=sexit2)
strategy.close("Short", when=long)
plot (rsi1, color=orange, transp=0,linewidth=1, title="Short period RSI")
plot (rsi2, color=aqua , transp=0,linewidth=1, title="Long period RSI")