
Esta estratégia, combinando a teoria dos indicadores circulares de Ehlers com a análise de sinais de preços que foram processados de forma suave, desenha uma estratégia de negociação de Ehlers circular que suaviza os sinais de negociação. Esta estratégia pode filtrar eficazmente o ruído do mercado e produzir sinais de negociação mais confiáveis.
O sinal de preço original src é processado em suavização de segunda fase, obtendo um sinal de suavização suave.
O indicador de ciclo é calculado com base no sinal de suavização. O método de cálculo é: cycle := (1 - .5 alpha) (1 - .5 alpha) (smooth - 2 smooth[1] + smooth[2]) + 2 (1 - alpha) cycle[1] - (1 - alpha) (1 - alpha) * cycle[2]
onde α é o parâmetro de suavização ≠ .
onde α2 é o parâmetro de suavização de um grau.
A suavização de segundo grau dos sinais de preços pode filtrar eficazmente o ruído de alta frequência, tornando os sinais de negociação mais confiáveis.
Aplicando a teoria dos indicadores de ciclo de Ells, é possível determinar com mais precisão os pontos de conversão das tendências do mercado.
O índice de primeira fase limpa o ruído dos indicadores circulares, produzindo um sinal de negociação mais confiável.
Todo o processo de estratégia é racional, científico, o espaço de otimização de parâmetros é grande, o desempenho do disco é excelente.
Como outras estratégias de indicadores técnicos, a estratégia é sensível ao risco sistemático do mercado. Em caso de um grande evento de black swan, pode ocorrer um grande prejuízo.
Uma vez que o processo de cálculo é mais complexo, a configuração inadequada dos parâmetros pode causar atrasos no cálculo, afetando a eficácia do disco rígido. É necessário testar cuidadosamente para garantir que a configuração dos parâmetros seja cientificamente razoável.
O processamento de smoothing também pode levar a um atraso no sinal de negociação, podendo não ser capaz de capturar os pontos de inflexão do mercado a tempo, perdendo assim a oportunidade. A configuração dos parâmetros de smoothing deve ser balanceada.
Pode-se testar diferentes tipos de algoritmos de suavização, como suavização de um grau, suavização de linha média, etc., para encontrar a solução de suavização ideal.
Pode-se introduzir um mecanismo de regulação de parâmetros adaptativos, que ajusta dinamicamente os parâmetros de acordo com a situação do mercado, aumentando a robustez da estratégia.
Pode-se desenhar estratégias de stop loss e stop-loss para reduzir o risco de perdas individuais e, ao mesmo tempo, bloquear os lucros.
Modelos de aprendizagem de máquina que podem ser combinados com outros modelos para implementar combinações de modelos e usar outros modelos para filtrar sinais de transação.
Esta estratégia usa a suavidade dos sinais de preço e o cálculo do indicador do ciclo de Els para projetar uma estratégia de negociação do ciclo de Els para suavizar os sinais de negociação. Esta estratégia pode filtrar o ruído de forma eficaz e produzir sinais de negociação mais confiáveis.
/*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)