Estratégia de determinação de tendência EMA reflexiva com base na média móvel de Hull

HMA EMA WMA
Data de criação: 2024-11-29 16:35:43 última modificação: 2024-11-29 16:35:43
cópia: 3 Cliques: 493
1
focar em
1617
Seguidores

Estratégia de determinação de tendência EMA reflexiva com base na média móvel de Hull

Visão geral

A estratégia usa a característica de reflexão da média móvel de Hull (HMA) para determinar a tendência do mercado. O núcleo da estratégia é calcular o valor da diferença entre a média móvel de Hull de curto prazo e a média móvel de Hull de longo prazo e, através do valor de reflexão dessa diferença, prever a movimentação dos preços. Ao definir parâmetros percentuais ajustáveis, a estratégia é capaz de se adaptar a diferentes ciclos de negociação, fornecendo um sinal de determinação de tendência mais preciso.

Princípio da estratégia

A estratégia utiliza duas médias móveis de Hull de 36 e 44 períodos como indicadores básicos. A estratégia também introduz a média móvel ponderada (WMA) para calcular o valor do delta e determinar o ponto de inflexão da tendência através do cruzamento deste valor do delta com o valor do reflexo. Durante o julgamento da tendência, a estratégia configura um fator de correção ajustável para controlar a sensibilidade para a reversão da tendência.

Vantagens estratégicas

  1. A adoção da média móvel de Hull reduziu o atraso das médias móveis tradicionais e aumentou a velocidade de resposta da estratégia às mudanças no mercado
  2. A introdução do conceito de reflexão permite capturar com mais precisão os pontos de mudança de tendência
  3. Fator de correção ajustável concebido para uma maior adaptabilidade da estratégia
  4. Melhoria da fiabilidade do sinal através do cálculo da diferença absoluta
  5. Mecanismos de controle de risco integrados, incluindo o ajuste dinâmico das linhas de restrição de tendência
  6. Componentes de visualização do sistema, que permitem aos traders avaliar o estado do mercado

Risco estratégico

  1. Falsos sinais podem ser frequentes em mercados de classificação horizontal
  2. Parâmetros de configuração incorreta pode causar sinal de atraso ou hipersensibilidade
  3. A linha de restrição de tendência pode não ser ajustada em tempo hábil em um mercado altamente volátil.
  4. A estratégia baseia-se em dados históricos e pode não ser rápida o suficiente para reagir a surpresas no mercado

Direção de otimização da estratégia

  1. Introdução de indicadores de volatilidade, ajustamento dinâmico de correção de fatores e melhoria da capacidade de adaptação da estratégia às condições do mercado
  2. Aumentar o mecanismo de identificação do estado do mercado, com diferentes configurações de parâmetros em diferentes cenários de mercado
  3. Desenvolver um sistema de otimização de parâmetros adaptativos, que permita o ajuste dinâmico dos parâmetros
  4. Aumento do módulo de análise de volume de transação para aumentar a confiabilidade do sinal
  5. Melhorar os mecanismos de controlo de riscos e aumentar as funções de controlo de perdas e gestão de fundos

Resumir

A estratégia combina inovadoramente a média móvel de Hull com o conceito de reflexão para construir um sistema de acompanhamento de tendências sensível e adaptável. A principal vantagem da estratégia é a sua capacidade de capturar com precisão os pontos de inflexão da tendência, garantindo a aplicação da estratégia em diferentes ambientes de mercado através de configurações de parâmetros ajustáveis. Embora haja alguns riscos inerentes, a estratégia tem potencial de se tornar uma ferramenta de negociação estável e confiável com otimização e aperfeiçoamento contínuos.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Reflected EMA Difference (RED)", shorttitle="RED [by MarcosPna]", overlay=true) //mv30
// Análisis de Riesgo
// Risk Analysis
media_delta = ta.wma(2 * ta.wma(close, 8 / 2) - ta.wma(close, 8), math.floor(math.sqrt(8)))

// Calcular EMAs
// Calculate EMAs
ema_corta_delta = ta.hma(close, 36)
ema_larga_delta = ta.hma(close, 44)

// Calcular la diferencia entre las EMAs
// Calculate the difference between EMAs
diferencia_delta_ema = math.abs(ema_corta_delta - ema_larga_delta)

// Calcular el valor reflejado basado en la posición de la EMA corta
// Compute the reflected value based on the position of the short EMA
valor_reflejado_delta = ema_corta_delta + (ema_corta_delta > ema_larga_delta ? diferencia_delta_ema : -diferencia_delta_ema)

// Suavizar el valor reflejado
// Smooth the reflected value
periodo_suavizado_delta = input.int(2, title="Periodo extendido")
ema_suavizada_delta = ta.hma(valor_reflejado_delta, periodo_suavizado_delta)

// Ploteo de las EMAs y la línea reflejada
// Plot EMAs and the reflected line
plot(valor_reflejado_delta, title="Reflected EMA Difference (RED)", color=valor_reflejado_delta > ema_suavizada_delta ? color.rgb(253, 25, 238, 30) : color.rgb(183, 255, 30), linewidth=2, style=plot.style_line)

// Parámetros ajustables para la reversión de tendencia
// Adjustable parameters for trend reversal
factor_correccion_delta = input.float(title='Porcentaje de cambio', minval=0, maxval=100, step=0.1, defval=0.04)
tasa_correccion_delta = factor_correccion_delta * 0.01

// Variables para la reversión de tendencia
// Variables for trend reversal
var int direccion_delta_tendencia = 0
var float precio_maximo_delta = na
var float precio_minimo_delta = na
var float limite_tendencia_delta = na

// Inicializar precio máximo y mínimo con el primer valor de la EMA suavizada reflejada
// Initialize peak and trough prices with the first value of the smoothed reflected EMA
if na(precio_maximo_delta)
    precio_maximo_delta := ema_suavizada_delta
if na(precio_minimo_delta)
    precio_minimo_delta := ema_suavizada_delta

// Lógica de reversión de tendencia con la EMA suavizada reflejada
// Trend reversal logic with the smoothed reflected EMA
if direccion_delta_tendencia >= 0
    if ema_suavizada_delta > precio_maximo_delta
        precio_maximo_delta := ema_suavizada_delta
    limite_tendencia_delta := precio_maximo_delta - (precio_maximo_delta * tasa_correccion_delta)
    if ema_suavizada_delta <= limite_tendencia_delta
        direccion_delta_tendencia := -1
        precio_minimo_delta := ema_suavizada_delta
        strategy.entry("Venta", strategy.short)
else
    if ema_suavizada_delta < precio_minimo_delta
        precio_minimo_delta := ema_suavizada_delta
    limite_tendencia_delta := precio_minimo_delta + (precio_minimo_delta * tasa_correccion_delta)
    if ema_suavizada_delta >= limite_tendencia_delta
        direccion_delta_tendencia := 1
        precio_maximo_delta := ema_suavizada_delta
        strategy.entry("Compra", strategy.long)

// Ploteo y señales
// Plotting and signals
indice_delta_ascendente = plot(direccion_delta_tendencia == 1 ? limite_tendencia_delta : na, title="Aumento de valor", style=plot.style_linebr, linewidth=3, color=color.new(color.green, 0))
senal_compra_delta = direccion_delta_tendencia == 1 and direccion_delta_tendencia[1] == -1
plotshape(senal_compra_delta ? limite_tendencia_delta : na, title="Estilo señal alcista", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))

indice_delta_descendente = plot(direccion_delta_tendencia == 1 ? na : limite_tendencia_delta, title="Disminución de valor", style=plot.style_linebr, linewidth=3, color=color.new(color.red, 0))
senal_venta_delta = direccion_delta_tendencia == -1 and direccion_delta_tendencia[1] == 1
plotshape(senal_venta_delta ? limite_tendencia_delta : na, title="Estilo señal bajista", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))

// Variables para manejo de cajas
// Variables for box management
var box caja_tendencia_delta = na

// Condición: Cruce de HullMA hacia abajo
// Condition: HullMA crosses below reflected EMA value
cruce_bajista_delta = ta.crossunder(media_delta, valor_reflejado_delta)

// Condición: Cruce de HullMA hacia arriba
// Condition: HullMA crosses above reflected EMA value
cruce_alcista_delta = ta.crossover(media_delta, valor_reflejado_delta)

// Dibujar caja cuando HullMA cruza hacia abajo el valor reflejado de EMA
// Draw a box when HullMA crosses below the reflected EMA value
// if (cruce_bajista_delta) and direccion_delta_tendencia == 1
//     caja_tendencia_delta := box.new(left=bar_index, top=high, right=bar_index, bottom=low, text = "Critical Areas", text_color = color.white, border_width=2, border_color=color.rgb(254, 213, 31), bgcolor=color.new(color.red, 90))

// Cerrar caja cuando HullMA cruza hacia arriba el valor reflejado de EMA
// Close the box when HullMA crosses above the reflected EMA value
// if (cruce_alcista_delta and not na(caja_tendencia_delta))
//     box.set_right(caja_tendencia_delta, bar_index)
//     caja_tendencia_delta := na  // Remove the reference to create a new box at the next cross down