En la carga de los recursos... Cargando...

Estrategia de determinación de la tendencia de la EMA basada en las medias móviles de Hull

El autor:¿ Qué pasa?, Fecha: 2024-11-29 16:35:43
Las etiquetas:HMAEl EMALa WMA

img

Resumen general

Esta estrategia utiliza las propiedades reflectantes de los promedios móviles de Hull (HMA) para determinar las tendencias del mercado. El núcleo de la estrategia consiste en calcular la diferencia entre los promedios móviles de Hull a corto y largo plazo y utilizar esta diferencia reflejada para predecir los movimientos de precios. A través de parámetros porcentuales ajustables, la estrategia puede adaptarse a diferentes marcos de tiempo de negociación, proporcionando señales de determinación de tendencias más precisas.

Principios de estrategia

La estrategia emplea dos promedios móviles de Hull con períodos de 36 y 44 como indicadores básicos. Cálcula la diferencia absoluta entre estos dos promedios móviles y aplica cálculos de reflexión basados en la dirección de la tendencia actual para obtener el valor de reflexión. La estrategia también incorpora promedio móvil ponderado (WMA) para calcular los valores delta, utilizando cruces entre los valores delta y reflexión para identificar los puntos de inflexión de la tendencia.

Ventajas estratégicas

  1. Utiliza las medias móviles de Hull para reducir el retraso típicamente asociado con las medias móviles tradicionales
  2. Incorpora valores de reflexión para una detección más precisa de los puntos de inflexión de la tendencia
  3. Características de los factores de corrección ajustables para una mayor adaptabilidad
  4. Mejora la fiabilidad de la señal mediante cálculos de diferencia absoluta
  5. Integrar mecanismos de control de riesgos, incluidos los ajustes dinámicos de la línea de tendencia
  6. Incluye componentes de visualización para una evaluación intuitiva del estado del mercado

Riesgos estratégicos

  1. Puede generar señales falsas frecuentes en mercados variados
  2. La configuración incorrecta de los parámetros puede dar lugar a señales retrasadas o sensibilidad excesiva
  3. Las líneas de limitación de tendencia pueden no ajustarse lo suficientemente rápido en mercados volátiles
  4. La estrategia se basa en cálculos de datos históricos, lo que puede limitar la respuesta a eventos repentinos del mercado

Direcciones para la optimización de la estrategia

  1. Introducir indicadores de volatilidad para el ajuste del factor de corrección dinámico
  2. Implementar mecanismos de reconocimiento del estado del mercado para la adaptación de parámetros
  3. Desarrollar sistemas de optimización de parámetros autoadaptables
  4. Añadir módulos de análisis de volumen para mejorar la confiabilidad de la señal
  5. Mejorar los mecanismos de control de riesgos con características de stop-loss y gestión de fondos

Resumen de las actividades

Esta estrategia combina de manera innovadora los promedios móviles de Hull con conceptos de valor de reflexión para crear un sistema de seguimiento de tendencias receptivo y adaptativo. Su principal fortaleza radica en capturar con precisión los puntos de inflexión de la tendencia mientras se mantiene la adaptabilidad a través de parámetros ajustables.


/*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



Relacionados

Más.