La Estrategia del Ciclo Cibernético Estocástico de Ehlers es una estrategia de negociación cuantitativa que genera señales comerciales utilizando el indicador del ciclo estocástico de Ehlers.
Esta estrategia primero construye un indicador de ciclo suavizado, luego construye un valor de indicador estocástico basado en ese indicador.
Específicamente, el indicador de ciclo suavizado se calcula como:
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
Este indicador combina el precio actual y los precios de los 3 períodos anteriores para construir una señal de ciclo suavizada.
A partir de este indicador suavizado, se puede calcular el ciclo estocástico:
cycle := (1 - .5 * alpha) * (1 - .5 * alpha) *
(smooth - 2 * smooth[1] + smooth[2]) +
2 * (1 - alpha) * cycle[1] -
(1 - alpha) * (1 - alpha) * cycle[2]
Esta fórmula de cálculo contiene la diferencia de segundo orden de la señal periódica suavizada y los valores de los dos ciclos anteriores. α es un factor de suavizado que ajusta el peso de los valores de ciclo nuevos y viejos.
Por último, se calcula un valor de valor aleatorio de 0-1001 basado en este indicador de ciclo. Y la señal de valor de la señal se construye en base al promedio móvil de valor de 10 días1. Las señales comerciales se emiten cuando la línea de promedio móvil de la señal cruza hacia arriba o hacia abajo.
Esta estrategia combina indicadores estocásticos e indicadores de ciclo para integrar las ventajas de ambos.
Las principales ventajas son:
Los principales riesgos de esta estrategia son:
Los riesgos pueden controlarse optimizando la configuración de los parámetros, estableciendo puntos de stop loss, combinando otros indicadores de filtrado, etc.
Esta estrategia también puede optimizarse en los siguientes aspectos:
La Estrategia de Ciclo Cibernético Estocástico de Ehlers integra las ventajas de los indicadores estocásticos y del ciclo a través del diseño de señal dual para controlar eficazmente los riesgos y puede lograr buenos rendimientos en mercados con una fuerte ciclicidad.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers Stochastic Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1) src = input(hl2, title = "Source") alpha = input(.07, title = "Alpha") lag = input(9, title = "Lag") smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6 len = input(8, title = "Stochastic len") cycle = na if na(cycle[7]) cycle := (src - 2 * src[1] + src[2]) / 4 else cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2] value1 = stoch(cycle, cycle, cycle, len) / 100 value2 = 2 * ((4 * value1 + 3 * value1[1] + 2 * value1[2] + value1[3]) / 10 - 0.5) signal = value2 oppositeTrade = input(true) barsSinceEntry = 0 barsSinceEntry := nz(barsSinceEntry[1]) + 1 if strategy.position_size == 0 barsSinceEntry := 0 if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1])) strategy.entry("Long", strategy.long) barsSinceEntry := 0 if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1])) strategy.entry("Short", strategy.short) barsSinceEntry := 0 if strategy.openprofit < 0 and barsSinceEntry > 8 strategy.close_all() barsSinceEntry := 0 plot(0, title="ZeroLine", color=gray) plotSrc = signal cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue) triggerPlot = plot(plotSrc[1], title = "Trigger", color = green) fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)