Reflektierende EMA-Trendbestimmungsstrategie basierend auf dem gleitenden Hull-Durchschnitt

HMA EMA WMA
Erstellungsdatum: 2024-11-29 16:35:43 zuletzt geändert: 2024-11-29 16:35:43
Kopie: 3 Klicks: 493
1
konzentrieren Sie sich auf
1617
Anhänger

Reflektierende EMA-Trendbestimmungsstrategie basierend auf dem gleitenden Hull-Durchschnitt

Überblick

Der Kern der Strategie ist die Berechnung der Differenz zwischen dem kurzfristigen und dem langfristigen Hull Moving Average und die Vorhersage der Kursentwicklung durch die Reflexion dieser Differenz. Durch die Einstellung von anpassbaren Prozentparametern kann die Strategie an unterschiedliche Handelszyklen angepasst werden, was zu einem präziseren Trendentscheidungssignal führt.

Strategieprinzip

Die Strategie verwendet zwei Hull Moving Averages mit 36 und 44 Perioden als Basisindikator. Durch die Berechnung der absoluten Differenz zwischen diesen beiden Moving Averages und die Reflexion der Differenz in Verbindung mit der aktuellen Trendrichtung wird der Reflexionswert ermittelt. Die Strategie führt auch einen gewogenen Moving Average (WMA) ein, um den Delta zu berechnen, um den Trendwendepunkt durch die Kreuzung dieses Delta mit dem Reflexionswert zu bestimmen.

Strategische Vorteile

  1. Die Verwendung von Hull-Moving Averages reduziert die Rückständigkeit von herkömmlichen Moving Averages und verbessert die Reaktion der Strategie auf Marktveränderungen
  2. Einführung des Reflexwertkonzepts, um Trendwendepunkte genauer zu erfassen
  3. Anpassbare Modifikationsfaktoren wurden entwickelt, um die Strategie anpassungsfähig zu machen
  4. Signalzuverlässigkeit erhöht durch Berechnung der absoluten Differenz
  5. Integrierte Risikokontrollmechanismen, einschließlich der dynamischen Anpassung der Trendbegrenzungslinie
  6. Das System verfügt über eine eigene Visualisierungskomponente, die es dem Händler ermöglicht, die Marktlage intuitiv zu beurteilen

Strategisches Risiko

  1. Häufige Falschsignale in der Querkorrektur
  2. Fehlgelegte Parameter können zu Signalverzögerungen oder Überempfindlichkeit führen
  3. In stark schwankenden Märkten kann es sein, dass die Trendgrenze nicht rechtzeitig angepasst wird.
  4. Die Strategie basiert auf historischen Daten und kann nicht schnell genug reagieren, wenn es zu Marktveränderungen kommt.

Richtung der Strategieoptimierung

  1. Einführung von Volatilitätsindikatoren, dynamischen Korrekturfaktoren und Verbesserung der Anpassungsfähigkeit der Strategie an die Marktlage
  2. Erhöhung der Marktsituationserkennungsmechanismen, mit unterschiedlichen Parameter-Einstellungen für unterschiedliche Marktumgebungen
  3. Entwicklung von Adaptive-Parameter-Optimierungssystemen, um die dynamische Anpassung von Parametern zu ermöglichen
  4. Erhöhung der Signalzuverlässigkeit durch die Erhöhung des Moduls zur Analyse der Transaktionsmenge
  5. Verbesserung der Risikokontrollmechanismen und Erweiterung der Stop-Loss- und Geldmanagement-Funktionen

Zusammenfassen

Die Strategie kombiniert innovativ die Hull Moving Average mit dem Reflexionswert-Konzept, um ein reaktionsscharfes und anpassungsfähiges Trend-Tracking-System zu erstellen. Die Kernvorteile der Strategie liegen in ihrer Fähigkeit, Trendwendepunkte genau zu erfassen, während die Anwendbarkeit der Strategie in verschiedenen Marktumgebungen durch ein anpassbares Parameter-Set gewährleistet wird. Obwohl es einige inhärente Risiken gibt, bietet die Strategie die Möglichkeit, durch kontinuierliche Optimierung und Verbesserung zu einem stabilen und zuverlässigen Handelsinstrument zu werden.

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