
A ideia principal da estratégia é usar o filtro Ehlers SuperSmoother para processar o indicador Stochastic RSI aleatório, filtrando muitos falsos sinais e obtendo um sinal de negociação mais confiável. O princípio básico é primeiro calcular o índice aleatório forte e fraco, depois usá-lo para o processamento de suavização e, finalmente, cruzar com sua própria média móvel para fazer o polinômio.
A estratégia primeiro calcula o RSI do preço de fechamento do registro, em seguida, com base no RSI, calcula o Stochastic, que é um indicador de índice típico relativamente forte. Para filtrar falsos sinais, o Stochastic RSI é processado com o filtro de ultra-slip de Ells, e finalmente a linha Stochastic RSI é cruzada em ouro com sua própria média móvel, fazendo o cruzamento em branco.
A maior vantagem da estratégia é que ela usa o filtro super-smooth de Ells, que pode filtrar efetivamente muitos sinais falsos, tornando os sinais de negociação mais confiáveis. Além disso, o indicador Stochastic RSI em si tem uma boa capacidade de ruptura e rastreamento de tendências. Assim, a estratégia pode identificar corretamente as tendências, abrir uma posição quando for apropriado e fechar uma posição quando for apropriado.
O principal risco desta estratégia é a propensão a falsos sinais em situações de forte oscilação do mercado. O Stochastic RSI produz muitos falsos sinais de alta e baixa quando os preços flutuam de forma acentuada em uma faixa mais estreita, quando a eficácia do filtro ultra-smooth de Ells também é descontada. Além disso, o atraso do indicador pode trazer algum risco em situações de agitação.
Para reduzir esses riscos, pode-se ajustar adequadamente os parâmetros, como aumentar o ciclo do indicador estocástico, reduzir a suavidade, etc., para filtrar ainda mais os sinais falsos. Além disso, pode-se considerar a combinação com outros indicadores ou formas para formar condições de filtragem múltipla, evitando o risco de sinais errados.
A estratégia pode ser melhorada em vários aspectos:
Optimizar a configuração dos parâmetros. Os parâmetros como a duração do indicador Stochastic RSI, a suavização constante e outros podem ser testados minuciosamente para encontrar a melhor combinação de parâmetros.
Aumentar o mecanismo de stop loss. Pode-se definir um stop loss móvel ou um stop loss pendente para bloquear os lucros e reduzir a retirada.
Combinações com outros indicadores ou formas. Pode-se considerar a combinação com indicadores de taxa de flutuação, médias móveis, etc., formando condições de filtragem múltipla, reduzindo ainda mais o risco.
Ajustar posições de acordo com os resultados da análise de grandes períodos. Pode ajustar dinamicamente o tamanho da posição de cada transação de acordo com os resultados da análise de tendências de períodos de tempo mais elevados.
Esta estratégia primeiro calcula o indicador Stochastic RSI, em seguida, usa o filtro ultra-smooth de Ells para processá-lo, e, finalmente, forma um sinal de negociação com sua própria média móvel, permitindo o julgamento correto da tendência. A vantagem da estratégia reside no uso de uma combinação de indicadores e filtros, que podem filtrar efetivamente os falsos sinais e obter oportunidades de negociação de alta probabilidade. O risco vem principalmente da configuração incorreta dos parâmetros e da falta de mecanismos de parada.
/*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))