Strategi RSI Stochastic Els-Smoothed


Tarikh penciptaan: 2024-01-26 15:58:48 Akhirnya diubah suai: 2024-01-26 15:58:48
Salin: 0 Bilangan klik: 777
1
fokus pada
1617
Pengikut

Strategi RSI Stochastic Els-Smoothed

Gambaran keseluruhan

Idea utama strategi ini adalah menggunakan penapis Ehlers SuperSmoother untuk memproses indikator RSI Stochastic secara rawak, untuk menyaring banyak isyarat palsu dan mendapatkan isyarat perdagangan yang lebih dipercayai. Prinsip asasnya adalah untuk mengira indeks RSI secara rawak, kemudian memprosesnya dengan halus menggunakan penapis Ehlers SuperSmoother, dan akhirnya melakukan polygon kosong dengan merentas rata-rata bergeraknya sendiri.

Prinsip Strategi

Strategi ini mula-mula mengira RSI pada harga penutupan jurnal, kemudian mengira Stochastic berdasarkan RSI, yang merupakan indikator indeks yang agak kuat. Untuk menyaring isyarat palsu, menggunakan penyaring ultra-slim Ells untuk memproses Stochastic RSI, dan akhirnya melakukan persilangan emas antara garis Stochastic RSI dan purata bergeraknya sendiri, dan melakukan persilangan mati.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah penggunaan Ells Super Smooth Filter, yang dapat menyaring banyak isyarat palsu dengan berkesan, menjadikan isyarat perdagangan lebih dipercayai. Selain itu, penunjuk Stochastic RSI sendiri mempunyai kemampuan penembusan dan trend yang baik.

Analisis risiko

Risiko utama strategi ini adalah bahawa ia mudah menghasilkan isyarat yang salah ketika pasaran bergolak secara besar-besaran. Apabila harga bergolak secara besar-besaran dalam julat yang lebih sempit, indikator Stochastic RSI akan menghasilkan banyak isyarat palsu untuk kenaikan dan penurunan, di mana kesan Ells Super Smooth Filter juga akan dikurangkan. Selain itu, dalam beberapa keadaan yang teruk, keterbelakangan indikator juga boleh membawa risiko tertentu.

Untuk mengurangkan risiko ini, anda boleh menyesuaikan parameter dengan betul, seperti meningkatkan kitaran penunjuk Stochastic, mengurangkan kelancaran, dan sebagainya, untuk terus menapis isyarat palsu. Selain itu, anda juga boleh mempertimbangkan untuk menggabungkannya dengan penunjuk atau bentuk lain, membentuk keadaan penapisan berganda, untuk mengelakkan risiko yang dibawa oleh isyarat palsu.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Tetapan parameter yang dioptimumkan. Anda boleh melakukan ujian terperinci terhadap parameter seperti panjang dan kelenturan Stochastic RSI untuk mencari kombinasi parameter yang terbaik.

  2. Peningkatan mekanisme penangguhan kerugian. Penangguhan bergerak atau penangguhan tunggal boleh ditetapkan untuk mengunci keuntungan dan mengurangkan penarikan balik.

  3. Gabungan dengan penunjuk atau bentuk lain. Gabungan dengan penunjuk kadar turun naik, purata bergerak dan lain-lain boleh dipertimbangkan untuk membentuk keadaan penapisan berganda dan mengurangkan risiko lebih lanjut.

  4. Menyesuaikan kedudukan berdasarkan analisis kitaran besar. Anda boleh menyesuaikan saiz kedudukan setiap dagangan secara dinamik berdasarkan analisis trend dalam tempoh masa yang lebih tinggi.

ringkaskan

Strategi ini pertama-tama mengira indikator Stochastic RSI, kemudian memprosesnya dengan menggunakan penapis super halus Els, dan akhirnya membentuk isyarat perdagangan dengan purata bergerak sendiri, untuk membuat penilaian yang betul mengenai trend. Kelebihan strategi adalah penggunaan gabungan indikator dan penapis, yang dapat menyaring isyarat palsu dengan berkesan, untuk mendapatkan peluang perdagangan yang berkemungkinan tinggi.

Kod sumber strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("ES Stoch RSI Strategy [krypt]", overlay=true, calc_on_order_fills=true, calc_on_every_tick=true, initial_capital=10000, currency='USD')

//Backtest Range
FromMonth = input(defval = 06, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth   = input(defval = 7, title = "To Month", minval = 1)
ToDay     = input(defval = 30, title = "To Day", minval = 1)
ToYear    = input(defval = 2018, title = "To Year", minval = 2014)

PI = 3.14159265359

drop1st(src) =>
    x = na
    x := na(src[1]) ? na : src

xlowest(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xhighest(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xstoch(c, h, l, len) =>
    xlow = xlowest(l, len)
    xhigh = xhighest(h, len) 
    100 * (c - xlow) / (xhigh - xlow)

Stochastic(c, h, l, length) =>
    rawsig = xstoch(c, h, l, length)
    min(max(rawsig, 0.0), 100.0)

xrma(src, len) =>
    sum = na
    sum := (src + (len - 1) * nz(sum[1], src)) / len

xrsi(src, len) =>
    msig = nz(change(src, 1), 0.0)
    up = xrma(max(msig, 0.0), len)
    dn = xrma(max(-msig, 0.0), len)
    rs = up / dn
    100.0 - 100.0 / (1.0 + rs)

EhlersSuperSmoother(src, lower) =>
	a1 = exp(-PI * sqrt(2) / lower)
	coeff2 = 2 * a1 * cos(sqrt(2) * PI / lower)
	coeff3 = -pow(a1, 2)
	coeff1 = (1 - coeff2 - coeff3) / 2
	filt = na
	filt := nz(coeff1 * (src + nz(src[1], src)) + coeff2 * filt[1] + coeff3 * filt[2], src)

smoothK = input(7, minval=1, title="K")
smoothD = input(2, minval=1, title="D")
lengthRSI = input(10, minval=1, title="RSI Length")
lengthStoch = input(3, minval=1, title="Stochastic Length")
showsignals = input(true, title="Buy/Sell Signals")
src = input(close,  title="Source")

ob = 80
os = 20
midpoint = 50

price = log(drop1st(src))
rsi1 = xrsi(price, lengthRSI)
rawsig = Stochastic(rsi1, rsi1, rsi1, lengthStoch)
sig = EhlersSuperSmoother(rawsig, smoothK)
ma = sma(sig, smoothD)

plot(sig, color=#0094ff, title="K", transp=0)
plot(ma, color=#ff6a00, title="D", transp=0)
lineOB = hline(ob, title="Upper Band", color=#c0c0c0)
lineOS = hline(os, title="Lower Band", color=#c0c0c0)
fill(lineOB, lineOS, color=purple, title="Background")

// Buy/Sell Signals

// use curvature information to filter out some false positives
mm1 = change(change(ma, 1), 1)
mm2 = change(change(ma, 2), 2)
ms1 = change(change(sig, 1), 1)
ms2 = change(change(sig, 2), 2)

sellsignals = showsignals and (mm1 + ms1 < 0 and mm2 + ms2 < 0) and crossunder(sig, ma) and sig[1] > ob
buysignals = showsignals and (mm1 + ms1 > 0 and mm2 + ms2 > 0) and crossover(sig, ma) and sig[1] < os

ploff = 4
plot(buysignals ? sig[1] - ploff : na, style=circles, color=#008fff, linewidth=3, title="Buy Signal", transp=0)
plot(sellsignals ? sig[1] + ploff : na, style=circles, color=#ff0000, linewidth=3, title="Sell Signal", transp=0)

longCondition = buysignals
if (longCondition)
    strategy.entry("L", strategy.long, comment="Long", when=(buysignals))

shortCondition = sellsignals
if (shortCondition)
    strategy.entry("S", strategy.short, comment="Short", when=(sellsignals))