Стратегия определения тренда Reflective EMA на основе скользящей средней Халла

HMA EMA WMA
Дата создания: 2024-11-29 16:35:43 Последнее изменение: 2024-11-29 16:35:43
Копировать: 3 Количество просмотров: 493
1
Подписаться
1617
Подписчики

Стратегия определения тренда Reflective EMA на основе скользящей средней Халла

Обзор

Стратегия определяет тенденции рынка, используя отраженные свойства Hull Moving Averages (HMA). В основе стратегии лежит вычисление разницы между краткосрочными и долгосрочными Hull Moving Averages и прогнозирование движения цены с помощью отражения этой разницы. Посредством настройки настраиваемых процентных параметров стратегия может адаптироваться к различным торговым циклам, что обеспечивает более точный сигнал для определения тенденции.

Стратегический принцип

В качестве базовых показателей используются две Hull Moving Averages с 36-ми и 44-ми циклами. Считается абсолютная дифференциация между этими двумя движущимися средними, и в сочетании с текущим трендовым направлением производится рефлексионный расчет на дифференциацию, в результате чего получается рефлексионное значение. Также в стратегии вводится весовое движущееся среднее ((WMA) для вычисления дельты, чтобы определить переломную точку в тренде с помощью пересечения этой дельты с рефлексионным значением.

Стратегические преимущества

  1. Использование Hull Moving Averages снижает задержку традиционных движущихся средних и повышает оперативность стратегии в ответ на изменения рынка
  2. Введение концепции рефлексионных значений позволяет более точно отслеживать переломные моменты тренда.
  3. Дизайн корректирующих факторов, позволяющих повысить адаптивность стратегии
  4. Повышение надежности сигнала с помощью расчета абсолютного разрыва
  5. Интегрированные механизмы управления рисками, включая динамическую корректировку линий ограничения тренда
  6. Система содержит визуализационный компонент, который позволяет трейдерам оценивать состояние рынка

Стратегический риск

  1. Частые ложные сигналы, которые могут возникнуть на горизонтальном рынке
  2. Неправильная настройка параметров может привести к задержке или чрезмерной чувствительности сигнала
  3. В условиях резкой колебательности рынка ограничительная линия может не быть скорректирована вовремя.
  4. Стратегия, основанная на исторических данных, может не реагировать достаточно быстро на неожиданные события на рынке

Направление оптимизации стратегии

  1. Внедрение показателей волатильности, динамических корректирующих факторов, повышение адаптивности стратегии к состоянию рынка
  2. Добавление механизма идентификации состояния рынка с использованием различных параметров в различных рыночных условиях
  3. Разработка адаптивной системы оптимизации параметров для динамической корректировки параметров
  4. Добавление модуля анализа объема перевода, повышение надежности сигнала
  5. Совершенствование механизмов управления рисками, увеличение функций по ликвидации убытков и управления капиталом

Подвести итог

Стратегия, инновационно объединяя Hull Moving Average с концепцией рефлекса, создает реактивную, адаптивную систему отслеживания тенденций. Основная преимущество стратегии заключается в ее способности точно улавливать переломные моменты тенденций, а также обеспечивать ее применимость в различных рыночных условиях с помощью регулируемых параметров. Несмотря на некоторые присущие ей риски, стратегия может стать стабильным и надежным инструментом торговли с помощью постоянной оптимизации и совершенствования.

Исходный код стратегии
/*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