Strategi Reversi Rata-rata RSI Dual

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

img

Gambaran umum

Dual RSI Mean Reversion Strategy adalah strategi yang mengidentifikasi kondisi overbought dan oversold menggunakan dua indikator RSI pada jangka waktu yang berbeda. Strategi ini bertujuan untuk memanfaatkan reversi rata-rata dengan pergi lama setelah kondisi oversold dan pergi pendek setelah kondisi overbought. Strategi ini menggunakan lilin Heikin-Ashi, indikator RSI dan filter warna terbuka untuk mengidentifikasi peluang perdagangan.

Logika Strategi

Strategi ini menggunakan dua indikator RSI dengan periode yang berbeda - satu pada grafik 5 menit dan satu pada grafik 1 jam. Untuk indikator RSI, tingkat oversold diidentifikasi di bawah 30 dan tingkat overbought di atas 70.

Ini melacak nilai RSI dan mencari situasi di mana RSI telah di bawah 30 atau di atas 70 untuk sejumlah batang yang ditentukan, menunjukkan kondisi oversold atau overbought yang diperpanjang.

Selain itu, ia menggunakan lilin Heikin-Ashi dan memeriksa sejumlah lilin hijau atau merah yang ditentukan untuk mengkonfirmasi arah tren sebelum memasuki perdagangan.

Ketika kedua kondisi RSI dan Heikin-Ashi sejajar, strategi akan pergi panjang setelah kondisi oversold atau pergi pendek setelah kondisi overbought, bertaruh pada reversi ke rata-rata.

Posisi ditutup pada akhir setiap hari untuk menghindari perdagangan semalam.

Keuntungan

  • Menggunakan pendekatan multi-frame waktu untuk mengidentifikasi kondisi overbought/oversold
  • Lilin Heikin-Ashi menyaring kebisingan dan mengidentifikasi arah tren
  • Filter warna terbuka menghindari sinyal palsu
  • Aturan masuk/keluar yang jelas berdasarkan dua indikator yang menyelaraskan
  • Manajemen risiko dengan menutup posisi sebelum akhir setiap hari

Risiko

  • Whipsaws mungkin jika tren kuat berlanjut setelah sinyal RSI overbought/oversold
  • Celah pasar dapat memicu berhenti
  • Heikin-Ashi lag dapat menunda entri perdagangan dan menyebabkan gerakan terlewatkan
  • Penutupan posisi pada akhir hari memberikan potensi keuntungan dari overnight hold

Peningkatan

  • Tambahkan filter tambahan seperti volume atau volatilitas untuk mengkonfirmasi sinyal
  • Mengoptimalkan periode RSI dan tingkat overbought/oversold untuk instrumen
  • Pertimbangkan ukuran posisi dinamis berdasarkan volatilitas
  • Bereksperimen dengan target laba atau trailing stop alih-alih exit akhir hari
  • Efektivitas pengujian pada instrumen yang berbeda dan atur parameter

Kesimpulan

Strategi Reversi Rata-rata RSI Ganda mengambil pendekatan berbasis aturan untuk momentum perdagangan. Dengan menggabungkan dua kerangka waktu, indikator overbought/oversold, analisis candlestick dan filter entri, itu bertujuan untuk mengidentifikasi pengaturan reversi rata-rata probabilitas tinggi. Manajemen risiko yang ketat dan ukuran posisi yang bijaksana membantu menyeimbangkan keuntungan dengan mengelola penarikan. Optimasi lebih lanjut dan pengujian ketahanan akan membantu menyebarkannya dengan sukses di berbagai pasar.


/*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 banyak