
Основная идея этой стратегии заключается в том, чтобы использовать фильтр Ehlers SuperSmoother для обработки случайных показателей Stochastic RSI, чтобы отфильтровать много фальшивых сигналов и получить более надежные торговые сигналы. Основная идея заключается в том, чтобы сначала рассчитать случайные показатели RSI, затем обработать их с помощью фильтра Ehlers SuperSmoother для их сглаживания и, наконец, перекрестить их со своей собственной подвижной средней.
Эта стратегия сначала рассчитывает RSI по цене закрытия журнала, затем на основе RSI вычисляет Stochastic, который является типичным относительно сильным и слабым индексом. Чтобы отфильтровать ложные сигналы, используется фильтр Эльза Эльза для обработки Stochastic RSI, и в конечном итоге линия Stochastic RSI совершает золотой крест с собственной движущейся средней, и крест становится пустым. Таким образом, ключевые моменты этой стратегии: 1) вычисляет Stochastic RSI; 2) использует фильтр Эльза Эльза для обработки; 3) образует торговый сигнал с движущейся средней.
Самым большим преимуществом этой стратегии является использование сверхгладкого фильтра Эрса, который эффективно отфильтровывает множество ложных сигналов, что делает торговые сигналы более надежными. Кроме того, Stochastic RSI сам по себе обладает хорошей прорывной и трендовой способностью. Поэтому стратегия может правильно идентифицировать тенденции, строить позиции в подходящее время и плавное положение в подходящее время.
Основная опасность этой стратегии заключается в том, что при значительных рыночных колебаниях может возникнуть ошибочный сигнал. Стохастический RSI создает множество ложных сигналов вверх и вниз, когда цена сильно колеблется в узком диапазоне, в то время как эффект фильтра Эльса сверхгладкий также дисконтируется. Кроме того, в некоторых экстремальных ситуациях отсталость индикатора также может представлять определенный риск.
Чтобы снизить эти риски, можно соответствующим образом скорректировать параметры, такие как увеличение цикла стохастического индикатора, уменьшение плавности и т. Д., Чтобы дополнительно отфильтровать фальшивые сигналы. Кроме того, можно также рассмотреть комбинацию с другими показателями или формами, чтобы сформировать многочисленные условия фильтрации, чтобы избежать риска, связанного с ошибочными сигналами.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация параметров. Можно тщательно протестировать параметры, такие как длина и плавные константы Stochastic RSI, чтобы найти оптимальную комбинацию параметров.
Увеличение механизма остановки убытков. Можно установить движущийся стоп или привязанный стоп для блокировки прибыли и снижения отвода.
Комбинации с другими показателями или формами. Можно рассмотреть комбинации с показателями волатильности, движущимися средними и т. Д., Чтобы создать многочисленные фильтрующие условия, чтобы еще больше снизить риск.
Позиции могут быть скорректированы в соответствии с результатами анализа большого цикла. Размер позиции может быть динамически скорректирован для каждой сделки в соответствии с результатами анализа тенденций более высоких временных периодов.
Эта стратегия сначала рассчитывает показатель Stochastic RSI, затем обрабатывает его с помощью сверхгладкого фильтра Эрса, и, наконец, формирует торговый сигнал со своей собственной движущейся средней, чтобы правильно судить о тенденции. Преимущество стратегии заключается в использовании комбинации показателей и фильтров, которые могут эффективно отфильтровывать фальшивые сигналы и получать высоковероятные торговые возможности.
/*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))