RSI Reversal Trading Strategy (Strategi Perdagangan Pembalikan RSI)

Penulis:ChaoZhang, Tarikh: 2023-09-28 16:09:39
Tag:

Ringkasan

Strategi ini menggunakan penunjuk RSI untuk menilai trend pasaran dan menghasilkan isyarat perdagangan apabila keadaan overbought atau oversold berlaku. Ia bertujuan untuk menangkap pergerakan pembalikan jangka pendek di pasaran. Ia juga menggabungkan purata bergerak dan logika mengambil keuntungan / berhenti kerugian untuk menapis isyarat dan mengawal risiko.

Logika Strategi

  1. Mengira RSI 14 tempoh dan menetapkan garis overbought pada 67 dan garis oversold pada 44.

  2. Apabila RSI melintasi di atas garisan overbought, isyarat jual dihasilkan. Apabila RSI melintasi di bawah garisan oversold, isyarat beli dihasilkan.

  3. Tambah penapis purata bergerak. Isyarat jual hanya berlaku apabila penutupan berada di bawah MA hari sebelumnya; Isyarat beli hanya berlaku apabila penutupan berada di atas MA hari sebelumnya.

  4. Menggabungkan mengambil keuntungan dan logik stop-loss. Sama ada titik tetap atau keluar berasaskan RSI boleh digunakan.

Analisis Kelebihan

  1. Mengambil peluang pembalikan jangka pendek menggunakan tahap RSI overbought / oversold.

  2. Penapis purata bergerak mengelakkan perdagangan terhadap trend.

  3. Mengambil keuntungan dan menghentikan kerugian mengawal kerugian perdagangan tunggal.

  4. Boleh menangkap peluang pembalikan trend lebih awal.

Risiko dan Penyelesaian

  1. RSI lag boleh menyebabkan isyarat palsu. menyesuaikan parameter atau menggabungkan dengan penunjuk lain.

  2. Stop loss tetap boleh terlalu luas atau terlalu sempit.

  3. Mengambil keuntungan tetap boleh keluar terlalu awal atau sasaran terlalu kecil.

  4. Gagal untuk menapis pasaran yang berbeza, menyebabkan perdagangan berlebihan dan kerugian.

Arahan pengoptimuman

  1. Uji parameter RSI pada jangka masa yang berbeza.

  2. Sesuaikan tahap RSI overbought/oversold.

  3. Cuba purata bergerak yang berbeza atau penapis lain.

  4. Uji sasaran keuntungan tetap berbanding sasaran/hentian dinamik.

  5. Mengoptimumkan nilai keuntungan / berhenti untuk menyesuaikan dengan turun naik pasaran.

  6. Tambah penapis untuk mengelakkan whipsaws di pasaran pelbagai.

  7. Pertimbangkan perpaduan jangka masa berganda untuk meningkatkan kualiti isyarat.

Ringkasan

Strategi ini memperdagangkan pembalikan menggunakan RSI digabungkan dengan purata bergerak dan logika mengambil keuntungan / berhenti kerugian. Ia bertujuan untuk menangkap perubahan jangka pendek di pasaran. Pengoptimuman parameter lanjut dan penapis tambahan dapat meningkatkan keuntungan sambil mengurangkan risiko. Ia sesuai untuk pelabur yang sensitif terhadap pergerakan jangka pendek dan mencari perdagangan yang kerap.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))

Lebih lanjut