Strategi pembalikan momentum RSI mengenal pasti keadaan overbought dan oversold dengan menggabungkan penunjuk RSI dan arah badan candlestick untuk perdagangan pembalikan.
Strategi ini dilaksanakan terutamanya melalui bahagian-bahagian berikut:
Indikator RSI Connors
Mengira RSI konvensional, RSI Win Ratio, dan RSI Parisian untuk mendapatkan Connors RSI sebagai purata.
Indikator RSI pantas
Menggunakan perubahan harga untuk mengira RSI cepat, mencerminkan kitaran jangka pendek.
Penapis badan candlestick
Memerlukan badan bullish untuk panjang dan badan bearish untuk pendek untuk mengelakkan pecah palsu.
Syarat panjang dan pendek
Pergi panjang apabila Connors RSI di bawah 20 dan cepat RSI di bawah 25 dengan badan bullish.
Pergi pendek apabila Connors RSI di atas 80 dan cepat RSI di atas 75 dengan badan bearish.
Keluar Stop Loss
Keluar dengan stop loss apabila badan candlestick berputar.
Connors RSI mengenal pasti titik pembalikan trend jangka panjang, RSI cepat mengenal pasti pembalikan jangka pendek, dan badan candlestick memastikan kesahihan pecah. Ini membolehkan mengesan peluang pembalikan dengan berkesan dan membuat perdagangan kontra-trend semasa keadaan overbought dan oversold.
Kelebihan strategi ini termasuk:
Menggabungkan penunjuk jangka panjang dan jangka pendek
Connors RSI mencerminkan kitaran jangka panjang dan RSI cepat mencerminkan kitaran jangka pendek, menggabungkan kedua-duanya dapat mengenal pasti titik pembalikan dengan tepat.
Penapis badan candlestick
Perdagangan hanya pada penyemburan badan boleh mengurangkan kerugian daripada penyemburan palsu.
Parameter yang boleh diselaraskan
Parameter RSI, produk dagangan, dan bingkai masa dagangan boleh disesuaikan secara bebas untuk memenuhi pasaran yang berbeza.
Mudah dan intuitif
RSI dan badan lilin adalah petunjuk asas, mudah difahami logik.
Mudah dilaksanakan
Menggunakan penunjuk terbina dalam sahaja, memerlukan kod yang sedikit dan mudah dilaksanakan.
Risiko utama strategi ini:
Risiko pembalikan gagal
Harga meneruskan trend asal selepas isyarat pembalikan, membawa kepada kerugian.
Risiko pasaran yang berbeza
Isyarat yang tidak berkesan yang kerap diaktifkan di pasaran yang berbeza.
Risiko keluar palsu
Penapis badan candlestick tidak boleh mengelakkan pembocoran palsu sepenuhnya.
Risiko parameter
Parameter RSI yang tidak sesuai boleh terlepas perdagangan atau mencetuskan pelbagai perdagangan yang tidak berkesan.
Risiko keadaan pasaran khas
Penunjuk RSI mungkin gagal dan menghasilkan isyarat yang salah dalam keadaan pasaran khas.
Strategi ini boleh dioptimumkan dari aspek berikut:
Tambahkan mekanisme stop loss
Mengoptimumkan strategi stop loss untuk berhenti yang lebih munasabah, mengurangkan kerugian perdagangan tunggal.
Mengintegrasikan pelbagai penunjuk
Tambah penapis seperti MACD dan KD untuk membuat isyarat lebih boleh dipercayai.
Tambah penapis kebarangkalian
Gabungkan analisis trend, sokongan/kekuatan untuk mengelakkan perdagangan kemungkinan rendah.
Mengoptimumkan tetapan parameter
Uji parameter pada produk dan jangka masa yang berbeza untuk mencari nilai optimum.
Elakkan keadaan pasaran khas
Mengenali dan mengelakkan perdagangan dalam keadaan pasaran khas untuk mengelakkan kerugian besar.
Strategi pembalikan momentum RSI mengenal pasti pembalikan jangka panjang dan jangka pendek menggunakan Connors RSI dan RSI pantas, dengan penapis badan candlestick untuk meningkatkan kesahihan isyarat. Kelebihan seperti kombinasi penunjuk dan parameter yang boleh disesuaikan membolehkan menangkap pembalikan dan perdagangan kontra-trend apabila terlalu banyak dibeli atau terlalu banyak dijual. Tetapi risiko seperti pembalikan yang gagal dan pecah palsu tetap ada, memerlukan pengoptimuman lanjut dalam kehilangan berhenti, kombinasi penunjuk untuk mengurangkan risiko dan meningkatkan keuntungan.
/*backtest start: 2023-10-07 00:00:00 end: 2023-11-06 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //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, %") usecrsi = input(true, defval = true, title = "Use CRSI Strategy") usefrsi = input(true, defval = true, title = "Use FRSI Strategy") usemod = input(true, defval = true, title = "CRSI+FRSI Mode") limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit") usebod = input(true, defval = true, title = "Use Body-filter") usecol = input(true, defval = true, title = "Use Color-filter") 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") //CRSI rsilen = 3 streaklen = 2 lookback = 100 rsi = rsi(close,rsilen) upday = close > close[1] ? 1 : 0 downday = close < close[1] ? -1 : 0 upstreak = upday!=0 ? upstreak[1] + upday : 0 downstreak = downday!=0 ? downstreak[1] + downday : 0 streak = upstreak + downstreak streakrsi = rsi(streak,streaklen) roc = close/close[1] - 1 roccount = 0 for i=1 to lookback-1 roccount := roc[i]<roc ? roccount + 1 : roccount crsi = (rsi + streakrsi + roccount) / 3 //Oscilator // rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue) // band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red) // band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green) // fill(band1, band0, color=purple, transp=90) //Fast RSI fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 3 or usebod == false //Color Filter bar = close > open ? 1 : close < open ? -1 : 0 gbar = bar == 1 or usecol == false rbar = bar == -1 or usecol == false //Signals up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body //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) and usemod == false) or (up1 and up2 and usemod) if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if ((dn1 or dn2) and usemod == false) or (dn1 and dn2 and usemod) if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot) if exit strategy.close_all()