Stratégie de détermination de tendance EMA réfléchissante basée sur la moyenne mobile de Hull

HMA EMA WMA
Date de création: 2024-11-29 16:35:43 Dernière modification: 2024-11-29 16:35:43
Copier: 1 Nombre de clics: 113
1
Suivre
1166
Abonnés

Stratégie de détermination de tendance EMA réfléchissante basée sur la moyenne mobile de Hull

Aperçu

La stratégie utilise les caractéristiques de réflexion des moyennes mobiles de Hull (HMA) pour déterminer les tendances du marché. Le cœur de la stratégie est de calculer la différence entre les moyennes mobiles de Hull à court terme et à long terme, et de prévoir les mouvements de prix à partir de la réflexion de cette différence. En définissant des paramètres de pourcentage ajustables, la stratégie est capable de s’adapter à différents cycles de négociation, offrant ainsi un signal de jugement de tendance plus précis.

Principe de stratégie

La stratégie utilise deux moyennes mobiles de Hull de 36 et 44 cycles comme indicateur de base. En calculant la différence absolue entre ces deux moyennes mobiles, et en combinant la direction de la tendance actuelle pour effectuer un calcul de réflexion sur la différence, on obtient la valeur de réflexion. La stratégie introduit également une moyenne mobile pondérée (WMA) pour calculer la valeur de delta et déterminer le point de basculement de la tendance par la croisement de cette valeur de delta avec la valeur de réflexion.

Avantages stratégiques

  1. L’adoption d’une moyenne mobile Hull réduit le retard des moyennes mobiles traditionnelles et améliore la rapidité avec laquelle la stratégie répond aux changements du marché
  2. L’introduction de la notion de réflexion permet de saisir plus précisément les points de basculement des tendances
  3. Des facteurs de correction modifiables ont été conçus pour rendre la stratégie plus adaptable.
  4. Augmentation de la fiabilité du signal par le calcul de la différence absolue
  5. Mise en place de mécanismes de contrôle des risques intégrés, y compris l’ajustement dynamique des lignes de limite de tendance
  6. Le système est doté d’un composant de visualisation qui permet aux traders de juger de façon intuitive de l’état du marché.

Risque stratégique

  1. Les faux signaux peuvent être fréquents dans les marchés de stockage horizontal.
  2. Une mauvaise configuration des paramètres peut entraîner un retard ou une sursensibilité du signal
  3. Les lignes de freinage peuvent ne pas être ajustées en temps opportun dans des marchés très volatils
  4. Les stratégies reposent sur des données historiques et peuvent ne pas être assez rapides pour réagir aux événements inattendus du marché.

Orientation de l’optimisation de la stratégie

  1. Introduction d’indicateurs de volatilité, de facteurs de correction d’ajustement dynamique et d’amélioration de la capacité d’adaptation des stratégies aux conditions du marché
  2. Ajout d’un mécanisme d’identification de l’état du marché, avec différents paramètres dans différents environnements de marché
  3. Développer un système d’optimisation des paramètres adaptatifs permettant un ajustement dynamique des paramètres
  4. Ajout de modules d’analyse de trafic pour améliorer la fiabilité du signal
  5. Amélioration des mécanismes de contrôle des risques et augmentation des fonctions de gestion des pertes et des fonds

Résumer

La stratégie a été créée en combinant de manière innovante les moyennes mobiles de Hull avec la notion de réflexion pour construire un système de suivi de tendance réactif et adaptable. Le principal avantage de la stratégie réside dans sa capacité à capturer avec précision les points de basculement de la tendance, tout en garantissant son applicabilité dans différents environnements de marché grâce à des paramètres réglables. Bien qu’il existe des risques inhérents, la stratégie est susceptible de devenir un outil de négociation stable et fiable grâce à une optimisation et une amélioration continues.

Code source de la stratégie
/*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