Strategi Pembalikan Momentum RSI

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

img

Ringkasan

Strategi pembalikan momentum RSI mengenal pasti keadaan overbought dan oversold dengan menggabungkan penunjuk RSI dan arah badan candlestick untuk perdagangan pembalikan.

Logika Strategi

Strategi ini dilaksanakan terutamanya melalui bahagian-bahagian berikut:

  1. Indikator RSI Connors

    Mengira RSI konvensional, RSI Win Ratio, dan RSI Parisian untuk mendapatkan Connors RSI sebagai purata.

  2. Indikator RSI pantas

    Menggunakan perubahan harga untuk mengira RSI cepat, mencerminkan kitaran jangka pendek.

  3. Penapis badan candlestick

    Memerlukan badan bullish untuk panjang dan badan bearish untuk pendek untuk mengelakkan pecah palsu.

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

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

Analisis Kelebihan

Kelebihan strategi ini termasuk:

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

  2. Penapis badan candlestick

    Perdagangan hanya pada penyemburan badan boleh mengurangkan kerugian daripada penyemburan palsu.

  3. Parameter yang boleh diselaraskan

    Parameter RSI, produk dagangan, dan bingkai masa dagangan boleh disesuaikan secara bebas untuk memenuhi pasaran yang berbeza.

  4. Mudah dan intuitif

    RSI dan badan lilin adalah petunjuk asas, mudah difahami logik.

  5. Mudah dilaksanakan

    Menggunakan penunjuk terbina dalam sahaja, memerlukan kod yang sedikit dan mudah dilaksanakan.

Analisis Risiko

Risiko utama strategi ini:

  1. Risiko pembalikan gagal

    Harga meneruskan trend asal selepas isyarat pembalikan, membawa kepada kerugian.

  2. Risiko pasaran yang berbeza

    Isyarat yang tidak berkesan yang kerap diaktifkan di pasaran yang berbeza.

  3. Risiko keluar palsu

    Penapis badan candlestick tidak boleh mengelakkan pembocoran palsu sepenuhnya.

  4. Risiko parameter

    Parameter RSI yang tidak sesuai boleh terlepas perdagangan atau mencetuskan pelbagai perdagangan yang tidak berkesan.

  5. Risiko keadaan pasaran khas

    Penunjuk RSI mungkin gagal dan menghasilkan isyarat yang salah dalam keadaan pasaran khas.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dari aspek berikut:

  1. Tambahkan mekanisme stop loss

    Mengoptimumkan strategi stop loss untuk berhenti yang lebih munasabah, mengurangkan kerugian perdagangan tunggal.

  2. Mengintegrasikan pelbagai penunjuk

    Tambah penapis seperti MACD dan KD untuk membuat isyarat lebih boleh dipercayai.

  3. Tambah penapis kebarangkalian

    Gabungkan analisis trend, sokongan/kekuatan untuk mengelakkan perdagangan kemungkinan rendah.

  4. Mengoptimumkan tetapan parameter

    Uji parameter pada produk dan jangka masa yang berbeza untuk mencari nilai optimum.

  5. Elakkan keadaan pasaran khas

    Mengenali dan mengelakkan perdagangan dalam keadaan pasaran khas untuk mengelakkan kerugian besar.

Kesimpulan

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

Lebih lanjut