A Estratégia de Ciclo Cibernético Estocástico de Ehlers é uma estratégia de negociação quantitativa que gera sinais de negociação usando o indicador de ciclo estocástico de Ehlers.
Esta estratégia primeiro constrói um indicador de ciclo suavizado, em seguida, constrói um valor de indicador estocástico com base nesse indicador.
Especificamente, o indicador do ciclo suavizado é calculado como:
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
Este indicador combina o preço atual e os preços dos três períodos anteriores para construir um sinal de ciclo suavizado.
Com base neste indicador suavizado, o ciclo estocástico pode ser calculado:
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 contém a diferença de segunda ordem do sinal periódico suavizado e os valores dos dois ciclos anteriores.
Finalmente, um valor de valor aleatório de 0-1001 é calculado com base neste indicador de ciclo. E o sinal de valor de sinal é construído com base na média móvel de 10 dias de valor1. Os sinais de negociação são emitidos quando a linha média móvel do sinal cruza para cima ou para baixo.
Esta estratégia combina indicadores estocásticos e indicadores de ciclo para integrar as vantagens de ambos.
As principais vantagens são:
Os principais riscos desta estratégia são:
Os riscos podem ser controlados através da otimização das definições dos parâmetros, do estabelecimento de pontos de stop loss, da combinação de outros indicadores de filtragem, etc.
Esta estratégia pode também ser otimizada nos seguintes aspectos:
A Estratégia de Ciclo Cibernético Estocástico de Ehlers integra as vantagens dos indicadores estocásticos e do ciclo através de um design de sinal duplo para controlar efetivamente os riscos e pode alcançar bons retornos em mercados com forte ciclicidade.
/*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)