O recurso está a ser carregado... Carregamento...

Estratégia de determinação da tendência da EMA refletida baseada em médias móveis do Hull

Autora:ChaoZhang, Data: 2024-11-29 16:35:43
Tags:HMAEMAWMA

img

Resumo

Esta estratégia utiliza as propriedades refletivas das médias móveis de Hull (HMA) para determinar as tendências do mercado. O núcleo da estratégia envolve o cálculo da diferença entre as médias móveis de Hull de curto e longo prazo e o uso dessa diferença refletida para prever os movimentos dos preços. Através de parâmetros percentuais ajustáveis, a estratégia pode se adaptar a diferentes prazos de negociação, fornecendo sinais de determinação de tendência mais precisos.

Princípios de estratégia

A estratégia emprega duas médias móveis Hull com períodos de 36 e 44 como indicadores de base. Ela calcula a diferença absoluta entre essas duas médias móveis e aplica cálculos de reflexão com base na direção da tendência atual para obter o valor de reflexão. A estratégia também incorpora a média móvel ponderada (WMA) para calcular os valores delta, usando cruzamento entre os valores delta e reflexão para identificar pontos de virada da tendência. Durante a determinação da tendência, a estratégia usa um fator de correção ajustável para controlar a sensibilidade de reversão da tendência.

Vantagens da estratégia

  1. Utiliza as médias móveis Hull para reduzir o atraso normalmente associado às médias móveis tradicionais
  2. Incorpora valores de reflexão para uma detecção mais precisa dos pontos de virada da tendência
  3. Características de fatores de correcção ajustáveis para uma maior adaptabilidade
  4. Melhora a fiabilidade do sinal através de cálculos de diferença absoluta
  5. Integra mecanismos de controlo de riscos, incluindo ajustamentos dinâmicos da linha de tendência
  6. Inclui componentes de visualização para avaliação intuitiva do estado do mercado

Riscos estratégicos

  1. Pode gerar sinais falsos frequentes em mercados variados
  2. Configurações incorretas dos parâmetros podem provocar sinais atrasados ou sensibilidade excessiva
  3. As linhas de limitação da tendência podem não se ajustar suficientemente rapidamente em mercados voláteis
  4. A estratégia baseia-se em cálculos de dados históricos, limitando potencialmente a resposta a eventos repentinos do mercado

Orientações para a otimização da estratégia

  1. Introduzir indicadores de volatilidade para o ajustamento do fator de correcção dinâmico
  2. Implementar mecanismos de reconhecimento do estado de mercado para adaptação de parâmetros
  3. Desenvolver sistemas de otimização de parâmetros auto-adaptáveis
  4. Adicionar módulos de análise de volume para melhorar a confiabilidade do sinal
  5. Melhorar os mecanismos de controlo do risco com características de stop loss e gestão de fundos

Resumo

Esta estratégia combina de forma inovadora as médias móveis de Hull com conceitos de valor de reflexão para criar um sistema de tendência de seguimento responsivo e adaptável.


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

Mais.