
La idea principal de esta estrategia es usar el filtro Ehlers SuperSmoother para procesar el indicador Stochastic RSI aleatorio, filtrando así muchas falsas señales y obteniendo una señal de negociación más confiable. El principio básico es calcular primero el índice aleatorio de fuerza y debilidad, luego usar el filtro Ehlers SuperSmoother para suavizarlo y finalmente hacer el polinomio de intersección con su propia media móvil.
La estrategia primero calcula el indicador RSI del cierre del registro, y luego calcula el indicador estocástico basado en el RSI, que es típicamente un indicador de índice relativamente fuerte y débil. Para filtrar falsas señales, se procesa el RSI estocástico con un filtro de Ells Superflat, y finalmente la línea RSI estocástica se cruza en oro con su propia media móvil, cruzando en blanco.
La mayor ventaja de esta estrategia es que se utiliza el filtro súper suave de Ells, que puede filtrar eficazmente muchas señales falsas, lo que hace que las señales de negociación sean más confiables. Además, el indicador Stochastic RSI tiene una buena capacidad de ruptura y seguimiento de tendencias.
El principal riesgo de esta estrategia es que es fácil generar señales erróneas cuando el mercado se tambalea mucho. Cuando los precios fluctúan mucho en un rango más estrecho, el indicador RSI estocástico produce muchas falsas señales de alza y bajada, en las que el efecto del filtro supersimplificado de Ells también se descuenta. Además, en algunos casos extremos, el atraso del indicador también puede conllevar un cierto riesgo.
Para reducir estos riesgos, se pueden ajustar adecuadamente los parámetros, como aumentar el ciclo del indicador estocástico, reducir la suavidad, etc., para filtrar aún más las señales falsas. Además, se puede considerar la combinación con otros indicadores o formas para formar condiciones de filtración múltiple y evitar el riesgo de señales falsas.
La estrategia se puede optimizar principalmente en los siguientes aspectos:
Optimización de la configuración de los parámetros. Se puede realizar una prueba minuciosa de parámetros como la longitud del indicador Stochastic RSI, la constante de suavización y encontrar la combinación óptima de parámetros.
Mecanismos de aumento de la pérdida. Se puede establecer una pérdida móvil o una pérdida única para bloquear las ganancias y reducir la retirada.
Combinación con otros indicadores o formas. Se puede considerar la combinación con indicadores de volatilidad, promedios móviles, etc., para crear condiciones de filtración múltiple y reducir aún más el riesgo.
Ajustar posiciones de acuerdo con los resultados del análisis de ciclo grande. Se puede ajustar dinámicamente el tamaño de la posición de cada operación de acuerdo con los resultados del análisis de tendencias de períodos de tiempo más altos.
La estrategia primero calcula el indicador Stochastic RSI, luego lo procesa con el filtro súper suave de Ells, y finalmente forma una señal de negociación con su propio promedio móvil, para lograr un juicio correcto de la tendencia. La ventaja de la estrategia reside en el uso de una combinación de indicadores y filtros, que pueden filtrar eficazmente las señales falsas y obtener oportunidades de negociación de alta probabilidad. El riesgo proviene principalmente de la configuración incorrecta de los parámetros y la falta de mecanismos de detención de pérdidas.
/*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))