Strategi pembalikan RSI berganda

Penulis:ChaoZhang, Tarikh: 2023-10-23 15:46:33
Tag:

img

Ringkasan

Dual RSI Mean Reversion Strategy adalah strategi trend yang mengenal pasti keadaan overbought dan oversold menggunakan dua penunjuk RSI pada jangka masa yang berbeza. Ia bertujuan untuk memanfaatkan pembalikan purata dengan pergi lama selepas keadaan oversold dan pergi pendek selepas keadaan overbought. Strategi ini menggunakan lilin Heikin-Ashi, penunjuk RSI dan penapis warna terbuka untuk mengenal pasti peluang perdagangan.

Logika Strategi

Strategi ini menggunakan dua penunjuk RSI dengan tempoh yang berbeza - satu pada carta 5 minit dan satu pada carta 1 jam.

Ia mengesan nilai RSI dan mencari situasi di mana RSI telah di bawah 30 atau di atas 70 untuk bilangan bar yang ditentukan, yang menunjukkan keadaan oversold atau overbought yang berpanjangan.

Di samping itu, ia menggunakan lilin Heikin-Ashi dan memeriksa jumlah lilin hijau atau merah yang ditentukan untuk mengesahkan arah trend sebelum memasuki perdagangan.

Apabila kedua-dua keadaan RSI dan Heikin-Ashi sejajar, strategi akan pergi lama selepas keadaan oversold atau pergi pendek selepas keadaan overbought, bertaruh pada pembalikan ke purata.

Posisi ditutup pada akhir setiap hari untuk mengelakkan perdagangan semalam.

Kelebihan

  • Menggunakan pendekatan pelbagai jangka masa untuk mengenal pasti keadaan overbought / oversold
  • Lilin Heikin-Ashi menyaring bunyi dan mengenal pasti arah trend
  • Penapis warna terbuka mengelakkan isyarat palsu
  • Peraturan kemasukan/keluar yang jelas berdasarkan dua penunjuk yang menyelaraskan
  • Pengurusan risiko dengan menutup kedudukan sebelum akhir setiap hari

Risiko

  • Whipsaws mungkin jika trend yang kuat berterusan selepas isyarat overbought/oversold RSI
  • Celah pasaran boleh mencetuskan berhenti
  • Lag Heikin-Ashi boleh melambatkan kemasukan perdagangan dan menyebabkan pergerakan yang terlepas
  • Penutupan kedudukan pada akhir hari melepaskan potensi keuntungan dari tahan semalaman

Peningkatan

  • Tambah penapis tambahan seperti jumlah atau turun naik untuk mengesahkan isyarat
  • Mengoptimumkan tempoh RSI dan tahap overbought/oversold untuk instrumen
  • Pertimbangkan saiz kedudukan dinamik berdasarkan turun naik
  • Percubaan dengan sasaran keuntungan atau hentian penghujung daripada keluar pada akhir hari
  • Kecekapan ujian pada instrumen yang berbeza dan menyesuaikan parameter

Kesimpulan

Strategi pembalikan purata RSI berganda mengambil pendekatan berdasarkan peraturan untuk momentum dagangan. Dengan menggabungkan dua bingkai masa, penunjuk overbought / oversold, analisis lilin dan penapis kemasukan, ia bertujuan untuk mengenal pasti persediaan pembalikan purata kebarangkalian tinggi. Pengurusan risiko yang ketat dan ukuran kedudukan yang berhati-hati membantu menyeimbangkan keuntungan dengan menguruskan penarikan. Pengoptimuman dan ujian ketahanan yang lebih lanjut akan membantu menyebarkannya dengan berjaya di pelbagai pasaran.


/*backtest
start: 2023-09-01 00:00:00
end: 2023-09-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Gidra
//2018

//@version=2
strategy(title = "Gidra's Vchain Strategy v0.1", shorttitle = "Gidra's Vchain Strategy v0.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
rsiperiod = input(14, defval = 14, minval = 2, maxval = 100, title = "RSI period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI limit")
rsibars = input(3, defval = 3, minval = 1, maxval = 20, title = "RSI signals")
useocf = input(true, defval = true, title = "Use Open Color Filter")
openbars = input(2, defval = 2, minval = 1, maxval = 20, title = "Open Color, Bars")
showrsi = input(true, defval = true, title = "Show indicator RSI")
fromyear = input(2018, defval = 2018, 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")


//Heikin Ashi Open/Close Price
o=open
c=close
h=high
l=low
haclose = (o+h+l+c)/4
haopen = na(haopen[1]) ? (o + c)/2 : (haopen[1] + haclose[1]) / 2
hahigh = max (h, max(haopen,haclose))
halow = min (l, min(haopen,haclose))
col=haopen>haclose ? red : lime
plotcandle(haopen, hahigh, halow, haclose, title="heikin", color=col)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0

//RSI condition
rsidnok = highest(rsidn, rsibars) == 1? 1 : 0
rsiupok = highest(rsiup, rsibars) == 1? 1 : 0

//Color Filter
bar = haclose > haopen ? 1 : haclose < haopen ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
openrbarok = sma(gbar, openbars) == 1 or useocf == false
opengbarok = sma(rbar, openbars) == 1 or useocf == false

//Signals
up = openrbarok and rsidnok
dn = opengbarok and rsiupok

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Indicator RSI
colbg = showrsi == false ? na : rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//Trading
if up
    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 dn
    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()

Lebih lanjut