Estratégia do Ciclo Cibernético Estocástico de Ehlers

Autora:ChaoZhang, Data: 2024-01-17 16:03:30
Tags:

img

Resumo

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.

Estratégia lógica

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.

Vantagens da estratégia

Esta estratégia combina indicadores estocásticos e indicadores de ciclo para integrar as vantagens de ambos.

As principais vantagens são:

  1. Os indicadores de ciclo podem identificar padrões cíclicos, os indicadores estocásticos fornecem oportunidades de negociação
  2. Design de indicador duplo pode efetivamente filtrar falsos sinais
  3. Parâmetros personalizáveis adequados a diferentes ambientes de mercado

Riscos da Estratégia

Os principais riscos desta estratégia são:

  1. A configuração inadequada dos parâmetros pode conduzir a negociações frequentes, aumento dos custos de negociação e custos de deslizamento
  2. Não é capaz de lidar eficazmente com mercados com violentas flutuações de preços, o que pode conduzir a grandes perdas
  3. Os indicadores do ciclo dependem fortemente da fixação da curva, a fixação inadequada pode gerar sinais errados

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.

Orientações de otimização

Esta estratégia pode também ser otimizada nos seguintes aspectos:

  1. Combinar com outros indicadores técnicos de filtragem de sinais, tais como Bandas de Bollinger, RSI, etc., para reduzir os falsos sinais
  2. Adicionar mecanismos de saída adaptativos, ajustar dinamicamente os pontos de stop loss de acordo com a volatilidade do mercado
  3. Usar métodos de aprendizagem de máquina para otimizar automaticamente parâmetros para se adaptar dinamicamente ao mercado
  4. Otimizar a utilização do capital através de alavancagem, composição e outros meios

Conclusão

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)

Mais.