Strategi pembalikan momentum RSI mengidentifikasi kondisi overbought dan oversold dengan menggabungkan indikator RSI dan arah tubuh candlestick untuk perdagangan pembalikan.
Strategi ini terutama dilaksanakan melalui bagian-bagian berikut:
Indikator RSI Connors
Menghitung RSI konvensional, RSI Win Ratio, dan RSI Paris untuk mendapatkan Connors RSI sebagai rata-rata.
Indikator RSI cepat
Menggunakan perubahan harga untuk menghitung RSI cepat, mencerminkan siklus jangka pendek.
Filter badan candlestick
Membutuhkan tubuh bullish untuk panjang dan tubuh bearish untuk pendek untuk mencegah breakout palsu.
Kondisi panjang dan pendek
Pergi panjang ketika Connors RSI di bawah 20 dan cepat RSI di bawah 25 dengan tubuh bullish.
Pergi pendek ketika Connors RSI di atas 80 dan cepat RSI di atas 75 dengan tubuh bearish.
Stop loss exit
Keluar dengan stop loss ketika tubuh candlestick berputar.
Connors RSI mengidentifikasi titik pembalikan tren jangka panjang, RSI cepat mengidentifikasi pembalikan jangka pendek, dan tubuh candlestick memastikan validitas breakout. Ini memungkinkan secara efektif mendeteksi peluang pembalikan dan melakukan perdagangan kontra-tren selama kondisi overbought dan oversold.
Keuntungan dari strategi ini meliputi:
Menggabungkan indikator jangka panjang dan jangka pendek
Connors RSI mencerminkan siklus jangka panjang dan cepat RSI mencerminkan siklus jangka pendek, menggabungkan keduanya dapat secara akurat mengidentifikasi titik pembalikan.
Filter badan candlestick
Perdagangan hanya pada body breakout dapat mengurangi kerugian dari false breakout.
Parameter yang dapat disesuaikan
Parameter RSI, produk perdagangan, dan kerangka waktu perdagangan dapat diatur secara bebas agar sesuai dengan pasar yang berbeda.
Sederhana dan intuitif
RSI dan tubuh candlestick adalah indikator dasar, logika yang mudah dipahami.
Mudah diterapkan
Hanya menggunakan indikator bawaan, membutuhkan sedikit kode dan mudah diterapkan.
Risiko utama dari strategi ini:
Risiko pembalikan gagal
Harga melanjutkan tren asli setelah sinyal pembalikan, yang mengarah pada kerugian.
Risiko pasar yang bervariasi
Sinyal yang sering tidak efektif dipicu di berbagai pasar.
Risiko kebocoran palsu
Filter body candlestick tidak bisa sepenuhnya menghindari kebocoran palsu.
Risiko parameter
Parameter RSI yang tidak tepat dapat melewatkan perdagangan atau memicu beberapa perdagangan yang tidak efektif.
Risiko kondisi pasar khusus
Indikator RSI mungkin gagal dan menghasilkan sinyal yang salah dalam kondisi pasar khusus.
Strategi dapat dioptimalkan dari aspek berikut:
Tambahkan mekanisme stop loss
Mengoptimalkan strategi stop loss untuk stop yang lebih wajar, mengurangi kerugian perdagangan tunggal.
Mengintegrasikan beberapa indikator
Tambahkan filter seperti MACD dan KD untuk membuat sinyal lebih andal.
Tambahkan filter probabilitas
Gabungkan analisis tren, dukungan/resistensi untuk menghindari perdagangan dengan probabilitas rendah.
Mengoptimalkan pengaturan parameter
Uji parameter pada produk yang berbeda dan kerangka waktu untuk menemukan nilai optimal.
Hindari kondisi pasar khusus
Mengidentifikasi dan menghindari perdagangan dalam kondisi pasar khusus untuk mencegah kerugian besar.
Strategi pembalikan momentum RSI mengidentifikasi pembalikan jangka panjang dan jangka pendek menggunakan Connors RSI dan RSI cepat, dengan filter tubuh candlestick untuk meningkatkan keabsahan sinyal. Keuntungan seperti kombinasi indikator dan parameter yang dapat disesuaikan memungkinkan menangkap pembalikan dan perdagangan kontra-trend ketika overbought atau oversold. Tetapi risiko seperti pembalikan yang gagal dan breakout palsu tetap ada, yang membutuhkan optimasi lebih lanjut dalam stop loss, kombinasi indikator untuk mengurangi risiko dan meningkatkan profitabilitas.
/*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()