O recurso está a ser carregado... Carregamento...

Estratégia de ciclo cibernético de suavização de sinais

Autora:ChaoZhang, Data: 2024-02-19 10:42:34
Tags:

img

Resumo

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.

Princípio da estratégia

  1. Suavizar o sinal de preço original src com suavização de segunda ordem para obter o sinal suavizado.

  2. 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.

  3. 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.

  4. Longo quando o sinal atravessa o sinal [1]; Curto quando o sinal atravessa o sinal [1].

Análise das vantagens

  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.

  2. 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.

  3. 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.

  4. 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.

Análise de riscos

  1. 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.

  2. 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.

  3. 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.

Orientações de otimização

  1. 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.

  2. 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.

  3. 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.

  4. Pode ser combinado com outros modelos de machine learning para obter carteiras de modelos e usar outros modelos para filtrar sinais de negociação.

Resumo

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)

Mais.