Estrategia de trading de reversión de media móvil de tendencia compuesta

MA EMA TEMA DEMA WMA SMA
Fecha de creación: 2025-02-20 17:20:42 Última modificación: 2025-02-27 17:23:21
Copiar: 0 Número de Visitas: 394
2
Seguir
319
Seguidores

Estrategia de trading de reversión de media móvil de tendencia compuesta Estrategia de trading de reversión de media móvil de tendencia compuesta

Descripción general

La estrategia es un sistema de seguimiento de tendencias y inversiones basado en líneas medias compuestas. Identifica las oportunidades de negociación mediante la combinación de promedios móviles de diferentes períodos, combinados con la reacción de los precios a las líneas medias. El núcleo de la estrategia es determinar el momento de negociación observando la relación entre los precios y las líneas medias y la reacción de los precios cuando se retroceden a una determinada desvalorización.

Principio de estrategia

La estrategia utiliza una combinación de varios tipos de medias móviles (EMA, TEMA, DEMA, WMA, SMA) para construir una línea de medias compleja a través de dos períodos diferentes (default 20 y 30) de medias ponderadas o aritméticas. Cuando los precios están por encima de la línea de medias se considera una tendencia alcista y por debajo de la línea de medias se considera una tendencia bajista.

Ventajas estratégicas

  1. El sistema tiene una buena adaptabilidad, soporta varios tipos de líneas medias, y puede elegir la línea media más adecuada según las diferentes características del mercado.
  2. Mediante la combinación de líneas medias, se reducen las señales falsas que puede generar una sola línea media de ciclo.
  3. La estrategia añade el concepto de porcentaje de respuesta, evitando el simple cruce de la línea media en las transacciones y aumentando la fiabilidad de las transacciones.
  4. En caso de que la dirección de la tendencia sea clara, se puede obtener un mejor precio de transacción al esperar el retorno a la entrada.

Riesgo estratégico

  1. En un mercado convulso, las falsas señales pueden ser frecuentes, lo que aumenta el costo de las transacciones.
  2. El retraso de la línea media compuesta puede causar retrasos en el tiempo de entrada y salida.
  3. El porcentaje de respuesta fijo puede requerir ajustes en diferentes entornos de mercado.
  4. En un mercado de rápida conversión de tendencias, puede haber un retiro mayor.

Dirección de optimización de la estrategia

  1. Se pueden introducir indicadores de volatilidad para ajustar dinámicamente el porcentaje de respuesta, lo que hace que las estrategias se adapten mejor a diferentes entornos de mercado.
  2. Se añade un factor de volumen de transacciones para confirmar la efectividad de la reversión de precios.
  3. Considerar la adición de mecanismos de suspensión y detener para controlar mejor el riesgo.
  4. Se puede aumentar el juicio de la intensidad de la tendencia, con una configuración de parámetros más radical en una tendencia fuerte.
  5. Considerar la inclusión en el contexto del mercado y usar diferentes conjuntos de parámetros para diferentes características del mercado.

Resumir

Se trata de una estrategia que combina el seguimiento de tendencias y el concepto de negociación inversa para capturar oportunidades de negociación mediante la combinación de la línea media y el mecanismo de reacción de los precios. La estrategia tiene como ventaja central su flexibilidad y su capacidad para filtrar señales falsas, pero también requiere atención a la optimización de los parámetros en diferentes entornos de mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-10-01 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ultrajante MA Reaction Strategy", overlay=true, initial_capital=10000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// ===== Custom Functions for DEMA and TEMA =====
dema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    2 * ema1 - ema2

tema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    ema3 = ta.ema(ema2, length)
    3 * ema1 - 3 * ema2 + ema3

// ===== Configuration Parameters =====

// MA Type Selection
maType = input.string(title="MA Type", defval="EMA", options=["SMA", "EMA", "WMA", "DEMA", "TEMA"])

// Parameters for composite periods
periodA = input.int(title="Period A", defval=20, minval=1)
periodB = input.int(title="Period B", defval=30, minval=1)
compMethod = input.string(title="Composite Method", defval="Average", options=["Average", "Weighted"])

// Reaction percentage (e.g., 0.5 means 0.5%)
reactionPerc = input.float(title="Reaction %", defval=0.5, step=0.1)

// ===== Composite Period Calculation =====
compPeriod = compMethod == "Average" ? math.round((periodA + periodB) / 2) : math.round((periodA * 0.6 + periodB * 0.4))

// ===== Moving Average Calculation based on selected type =====
ma = switch maType
    "SMA"  => ta.sma(close, compPeriod)
    "EMA"  => ta.ema(close, compPeriod)
    "WMA"  => ta.wma(close, compPeriod)
    "DEMA" => dema(close, compPeriod)
    "TEMA" => tema(close, compPeriod)
    => ta.ema(close, compPeriod)  // Default value

plot(ma, color=color.blue, title="MA")

// ===== Trend Definition =====
trendUp = close > ma
trendDown = close < ma

// ===== Reaction Threshold Calculation =====
// In uptrend: expect the price to retrace to or below a value close to the MA
upThreshold = ma * (1 - reactionPerc / 100)
// In downtrend: expect the price to retrace to or above a value close to the MA
downThreshold = ma * (1 + reactionPerc / 100)

// ===== Quick Reaction Detection =====
// For uptrend: reaction is detected if the low is less than or equal to the threshold and the close recovers and stays above the MA
upReaction = trendUp and (low <= upThreshold) and (close > ma)
// For downtrend: reaction is detected if the high is greater than or equal to the threshold and the close stays below the MA
downReaction = trendDown and (high >= downThreshold) and (close < ma)

// ===== Trade Execution =====
if upReaction
    // Close short position if exists and open long position
    strategy.close("Short", comment="Close Short due to Bullish Reaction")
    strategy.entry("Long", strategy.long, comment="Long Entry due to Bullish Reaction in Uptrend")

if downReaction
    // Close long position if exists and open short position
    strategy.close("Long", comment="Close Long due to Bearish Reaction")
    strategy.entry("Short", strategy.short, comment="Short Entry due to Bearish Reaction in Downtrend")

// ===== Visualization of Reactions on the Chart =====
plotshape(upReaction, title="Bullish Reaction", style=shape.arrowup, location=location.belowbar, color=color.green, size=size.small, text="Long")
plotshape(downReaction, title="Bearish Reaction", style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small, text="Short")