Esta estratégia calcula o sinal de preço suavizado com base na teoria do ciclo cibernético proposta por Ehlers para projetar uma estratégia de negociação com sinais de negociação suavizados.
Suavizar o sinal de preço original src com suavização de segunda ordem para obter o sinal suavizado.
Calcular o ciclo do indicador cíclico com base no sinal suavizado. Ciclo:= (1 - 0,5alfa) (1 - .5 alfa)(liso - 2suave[1] + suave[2]) + 2(1 - alfa)Ciclo[1] - (1 - alfa)(1 - alfa) * ciclo[2]
onde α é o parâmetro de suavização.
Suavizar exponencialmente o indicador cíclico com suavização de primeira ordem para obter o sinal de sinal de negociação final. sinal:= alfa2Ciclo + (1 - alfa2)nz ((sinal[1])
onde α2 é o parâmetro de suavização de primeira ordem.
Longo quando o sinal atravessa o sinal [1]; Curto quando o sinal atravessa o sinal [1].
A suavização de segunda ordem do sinal de preço pode efetivamente filtrar o ruído de alta frequência e tornar os sinais de negociação mais confiáveis.
A aplicação da teoria do ciclo cibernético de Ehlers pode determinar com mais precisão o ponto de virada das tendências do mercado.
A suavização exponencial de primeira ordem filtra parte do ruído no indicador cíclico para produzir sinais de negociação mais confiáveis.
Todo o processo da estratégia é razoável e científico, com grande espaço de otimização de parâmetros e excelente desempenho real.
Tal como acontece com outras estratégias de indicadores técnicos, esta estratégia também é relativamente sensível ao risco sistémico de mercado, podendo incorrer em grandes perdas em caso de eventos de cisne negro.
Devido ao processo de cálculo complexo, a configuração inadequada dos parâmetros pode causar atrasos no cálculo, afetando assim o desempenho real. Os parâmetros precisam ser cuidadosamente testados para garantir configurações científicas e razoáveis.
O processamento suavizado também leva a sinais de negociação atrasados, que podem não conseguir capturar pontos de virada do mercado a tempo, perdendo assim oportunidades.
Diferentes tipos de algoritmos de suavização podem ser testados, como suavização exponencial de primeira ordem, suavização da média móvel, etc., para encontrar o esquema de suavização ideal.
Pode ser introduzido um mecanismo adaptativo de ajuste de parâmetros para ajustar dinamicamente os parâmetros com base nas condições de mercado, a fim de melhorar a robustez da estratégia.
As estratégias de stop loss e take profit podem ser concebidas para reduzir o risco de perda única e bloquear os lucros ao mesmo tempo.
Pode ser combinado com outros modelos de machine learning para obter carteiras de modelos e usar outros modelos para filtrar sinais de negociação.
Esta estratégia projeta um sinal de negociação suavizando a estratégia de negociação do ciclo cibernético de Ehlers através da suavização do sinal de preço e do cálculo do indicador do ciclo cibernético de Ehlers. Pode efetivamente filtrar o ruído e gerar sinais de negociação mais confiáveis. Ao mesmo tempo, o espaço de parâmetros é grande e o desempenho real é bom. Ao introduzir mecanismos adaptativos, estratégias de stop loss e otimização de outros, a estabilidade e eficácia da estratégia podem ser ainda melhoradas.
/*backtest start: 2024-01-19 00:00:00 end: 2024-02-18 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers 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 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] alpha2 = 1 / (lag + 1) signal = na signal := alpha2 * cycle + (1 - alpha2) * nz(signal[1]) 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)