
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.
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.
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.
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.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Tetapan parameter yang dioptimumkan. Anda boleh melakukan ujian terperinci terhadap parameter seperti panjang dan kelenturan Stochastic RSI untuk mencari kombinasi parameter yang terbaik.
Peningkatan mekanisme penangguhan kerugian. Penangguhan bergerak atau penangguhan tunggal boleh ditetapkan untuk mengunci keuntungan dan mengurangkan penarikan balik.
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.
Menyesuaikan kedudukan berdasarkan analisis kitaran besar. Anda boleh menyesuaikan saiz kedudukan setiap dagangan secara dinamik berdasarkan analisis trend dalam tempoh masa yang lebih tinggi.
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.
/*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))