Estrategia de determinación de tendencia EMA reflexiva basada en la media móvil de Hull

HMA EMA WMA
Fecha de creación: 2024-11-29 16:35:43 Última modificación: 2024-11-29 16:35:43
Copiar: 3 Número de Visitas: 493
1
Seguir
1617
Seguidores

Estrategia de determinación de tendencia EMA reflexiva basada en la media móvil de Hull

Descripción general

La estrategia utiliza las características de reflexión de las medias móviles de Hull (HMA) para determinar las tendencias del mercado. El núcleo de la estrategia es calcular el valor de la diferencia entre las medias móviles de Hull a corto plazo y a largo plazo y, a través del valor de reflexión de esta diferencia, pronosticar el movimiento de los precios. Mediante la configuración de parámetros porcentuales ajustables, la estrategia puede adaptarse a diferentes ciclos de negociación, lo que proporciona una señal de determinación de tendencias más precisa.

Principio de estrategia

La estrategia utiliza dos promedios móviles de Hull de 36 y 44 períodos como indicadores básicos. Se obtiene el valor de reflexión calculando la diferencia absoluta entre estos dos promedios móviles y combinando la dirección de la tendencia actual con el valor de reflexión. La estrategia también introduce una media móvil ponderada (WMA) para calcular el valor del delta, que se utiliza para determinar el punto de inflexión de la tendencia a través de la intersección de este valor del delta con el valor de reflexión.

Ventajas estratégicas

  1. La adopción de las medias móviles de Hull reduce el atraso de las medias móviles tradicionales y mejora la velocidad de respuesta de las estrategias a los cambios en el mercado
  2. Introducción del concepto de reflejo para capturar con mayor precisión los puntos de inflexión de tendencias
  3. Factores de modificación ajustables diseñados para una mayor adaptabilidad de la estrategia
  4. Mejora de la fiabilidad de la señal mediante el cálculo de la diferencia absoluta
  5. Mecanismos de control de riesgo integrados, incluido el ajuste dinámico de las líneas de restricción de tendencia
  6. El sistema incluye componentes de visualización para ayudar a los operadores a intuir el estado del mercado

Riesgo estratégico

  1. Las falsas señales que pueden producirse con frecuencia en los mercados de ordenamiento horizontal
  2. La configuración incorrecta de los parámetros puede causar un signo de retraso o hipersensibilidad
  3. En un mercado muy volátil, las líneas de restricción de tendencia pueden no ajustarse a tiempo.
  4. Las estrategias se basan en datos históricos y pueden no ser lo suficientemente rápidas para reaccionar ante eventos inesperados en el mercado.

Dirección de optimización de la estrategia

  1. Introducción de indicadores de volatilidad, correctores de ajuste dinámico y mejor adaptabilidad de la estrategia a las condiciones del mercado
  2. Aumentar el mecanismo de identificación del estado del mercado, con diferentes configuraciones de parámetros en diferentes entornos del mercado
  3. Desarrollo de sistemas de optimización de parámetros adaptativos que permiten el ajuste dinámico de los parámetros
  4. Aumento de módulos de análisis de tráfico para mejorar la fiabilidad de la señal
  5. Mejora de los mecanismos de control de riesgos y aumento de las funciones de control de pérdidas y gestión de fondos

Resumir

La estrategia combina de manera innovadora el promedio móvil de Hull con el concepto de valor de reflexión para construir un sistema de seguimiento de tendencias que sea sensible y adaptable. La ventaja central de la estrategia reside en su capacidad para capturar con precisión los puntos de inflexión de tendencias, al tiempo que garantiza su aplicabilidad en diferentes entornos de mercado a través de configuraciones de parámetros ajustables. Aunque existen algunos riesgos inherentes, la estrategia tiene potencial de convertirse en una herramienta de negociación estable y confiable mediante la optimización y perfección continuas.

Código Fuente de la Estrategia
/*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