Strategi Pembalikan Momentum RSI

Penulis:ChaoZhang, Tanggal: 2023-11-07 15:45:15
Tag:

img

Gambaran umum

Strategi pembalikan momentum RSI mengidentifikasi kondisi overbought dan oversold dengan menggabungkan indikator RSI dan arah tubuh candlestick untuk perdagangan pembalikan.

Logika Strategi

Strategi ini terutama dilaksanakan melalui bagian-bagian berikut:

  1. Indikator RSI Connors

    Menghitung RSI konvensional, RSI Win Ratio, dan RSI Paris untuk mendapatkan Connors RSI sebagai rata-rata.

  2. Indikator RSI cepat

    Menggunakan perubahan harga untuk menghitung RSI cepat, mencerminkan siklus jangka pendek.

  3. Filter badan candlestick

    Membutuhkan tubuh bullish untuk panjang dan tubuh bearish untuk pendek untuk mencegah breakout palsu.

  4. 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.

  5. 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.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. 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.

  2. Filter badan candlestick

    Perdagangan hanya pada body breakout dapat mengurangi kerugian dari false breakout.

  3. Parameter yang dapat disesuaikan

    Parameter RSI, produk perdagangan, dan kerangka waktu perdagangan dapat diatur secara bebas agar sesuai dengan pasar yang berbeda.

  4. Sederhana dan intuitif

    RSI dan tubuh candlestick adalah indikator dasar, logika yang mudah dipahami.

  5. Mudah diterapkan

    Hanya menggunakan indikator bawaan, membutuhkan sedikit kode dan mudah diterapkan.

Analisis Risiko

Risiko utama dari strategi ini:

  1. Risiko pembalikan gagal

    Harga melanjutkan tren asli setelah sinyal pembalikan, yang mengarah pada kerugian.

  2. Risiko pasar yang bervariasi

    Sinyal yang sering tidak efektif dipicu di berbagai pasar.

  3. Risiko kebocoran palsu

    Filter body candlestick tidak bisa sepenuhnya menghindari kebocoran palsu.

  4. Risiko parameter

    Parameter RSI yang tidak tepat dapat melewatkan perdagangan atau memicu beberapa perdagangan yang tidak efektif.

  5. Risiko kondisi pasar khusus

    Indikator RSI mungkin gagal dan menghasilkan sinyal yang salah dalam kondisi pasar khusus.

Arahan Optimasi

Strategi dapat dioptimalkan dari aspek berikut:

  1. Tambahkan mekanisme stop loss

    Mengoptimalkan strategi stop loss untuk stop yang lebih wajar, mengurangi kerugian perdagangan tunggal.

  2. Mengintegrasikan beberapa indikator

    Tambahkan filter seperti MACD dan KD untuk membuat sinyal lebih andal.

  3. Tambahkan filter probabilitas

    Gabungkan analisis tren, dukungan/resistensi untuk menghindari perdagangan dengan probabilitas rendah.

  4. Mengoptimalkan pengaturan parameter

    Uji parameter pada produk yang berbeda dan kerangka waktu untuk menemukan nilai optimal.

  5. Hindari kondisi pasar khusus

    Mengidentifikasi dan menghindari perdagangan dalam kondisi pasar khusus untuk mencegah kerugian besar.

Kesimpulan

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()

Lebih banyak