Estrategia comercial de seguimiento del impulso de tendencia de promedio móvil de períodos múltiples

EMA ATR KC SMA LR
Fecha de creación: 2024-11-12 16:35:41 Última modificación: 2024-11-12 16:35:41
Copiar: 4 Número de Visitas: 640
1
Seguir
1617
Seguidores

Estrategia comercial de seguimiento del impulso de tendencia de promedio móvil de períodos múltiples

Descripción general

Se trata de una estrategia de comercio cuantitativa que combina el seguimiento de la tendencia de las medias periódicas y el análisis de la dinámica. La estrategia se realiza principalmente mediante el análisis de una combinación ordenada de los promedios móviles de los índices de 20, 50, 100 y 200 días (EMA) en combinación con el indicador de dinámica de la línea diaria y de la circunferencia.

Principio de estrategia

La lógica central de la estrategia incluye las siguientes partes clave:

  1. Sistema de alineación EMA: Requiere que el EMA del día 20 esté sobre el EMA del día 50, el EMA del día 50 esté sobre el EMA del día 100 y el EMA del día 100 esté sobre el EMA del día 200, formando una perfecta alineación de múltiples cabezas.
  2. Sistema de confirmación de movimiento: Indicador de movimiento personalizado basado en la regresión lineal calculado en el período de tiempo de la línea diurna y de la circunferencia respectivamente. El indicador de movimiento se mide mediante la regresión lineal del grado de desviación del precio con el eje central del canal de Keltner.
  3. Sistema de reajuste de la entrada: los precios deben ser reajustados hasta el 20% de la entrada especificada por la EMA del día 20, para evitar el seguimiento.
  4. Sistema de gestión de riesgos: establezca objetivos de stop loss y profit con un múltiplo de ATR, el stop loss predeterminado es 1.5 veces el ATR y el profit es 3 veces el ATR.

Ventajas estratégicas

  1. Mecanismo de confirmación múltiple: reduce las señales falsas mediante la confirmación de múltiples condiciones, como la disposición de la línea media, la dinámica de varios ciclos y la reajuste de precios.
  2. Gestión científica del riesgo: adaptación de los objetivos de pérdidas y ganancias a los cambios en la volatilidad del mercado mediante el uso dinámico de ATR.
  3. El seguimiento de tendencias se combina con el impulso: tanto para capturar las grandes tendencias como para aprovechar las mejores oportunidades de entrada en las tendencias.
  4. Personalización: los parámetros de la estrategia se pueden ajustar de manera óptima en función de las diferentes características del mercado.
  5. Análisis multi-periódico: mejora la fiabilidad de la señal mediante la combinación de la línea solar y la circunferencia.

Riesgo estratégico

  1. Retraso en la línea media: la EMA como indicador de retraso puede causar un retraso en el tiempo de entrada. Se recomienda la combinación de otros indicadores líderes.
  2. La estrategia no se aplica a los mercados de oscilación: puede generar frecuentemente falsas señales en los mercados de oscilación horizontal. Se recomienda agregar un filtro de entorno de mercado.
  3. Riesgo de retiro: A pesar de los daños en el ATR, en casos extremos puede haber un retiro mayor. Se puede considerar establecer un límite máximo de retiro.
  4. Sensibilidad de parámetros: los efectos de la estrategia son sensibles a la configuración de los parámetros. Se recomienda realizar pruebas de optimización de parámetros.

Dirección de optimización de la estrategia

  1. Identificación del entorno del mercado: añade un indicador de volatilidad o un indicador de intensidad de la tendencia, utilizando diferentes combinaciones de parámetros en diferentes entornos del mercado.
  2. Optimización de la entrada: se pueden agregar indicadores de oscilación como el RSI para buscar puntos de entrada más precisos en la zona de retracción.
  3. Ajuste de parámetros dinámicos: ajuste automático del multiplicador ATR y el rango de reajuste según la volatilidad del mercado.
  4. Añadir análisis de volumen de transacciones: Confirmar la intensidad de la tendencia a través del volumen de transacciones para mejorar la fiabilidad de la señal.
  5. Introducción al aprendizaje automático: Parámetros de optimización dinámica de algoritmos de aprendizaje automático para mejorar la adaptabilidad de las estrategias.

Resumir

Es una estrategia de seguimiento de tendencias diseñada de manera racional y lógica. El uso de múltiples indicadores técnicos en combinación garantiza la estabilidad de la estrategia y proporciona un buen mecanismo de gestión de riesgos. La estrategia es altamente personalizable y puede optimizarse según las diferentes características del mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Swing Trading with EMA Alignment and Custom Momentum", overlay=true)

// User inputs for customization
atrLength = input.int(14, title="ATR Length", minval=1)
atrMultiplierSL = input.float(1.5, title="Stop-Loss Multiplier (ATR)", minval=0.1)   // Stop-loss at 1.5x ATR
atrMultiplierTP = input.float(3.0, title="Take-Profit Multiplier (ATR)", minval=0.1)   // Take-profit at 3x ATR
pullbackRangePercent = input.float(1.0, title="Pullback Range (%)", minval=0.1) // 1% range for pullback around 20 EMA
lengthKC = input.int(20, title="Length for Keltner Channels (Momentum Calculation)", minval=1)

// EMA settings
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// ATR calculation
atrValue = ta.atr(atrLength)

// Custom Momentum Calculation based on Linear Regression for Daily Timeframe
highestHighKC = ta.highest(high, lengthKC)
lowestLowKC = ta.lowest(low, lengthKC)
smaCloseKC = ta.sma(close, lengthKC)

// Manually calculate the average of highest high and lowest low
averageKC = (highestHighKC + lowestLowKC) / 2

// Calculate daily momentum using linear regression
dailyMomentum = ta.linreg(close - (averageKC + smaCloseKC) / 2, lengthKC, 0) // Custom daily momentum calculation

// Fetch weekly data for momentum calculation using request.security()
[weeklyHigh, weeklyLow, weeklyClose] = request.security(syminfo.tickerid, "W", [high, low, close])

// Calculate weekly momentum using linear regression on weekly timeframe
weeklyHighestHighKC = ta.highest(weeklyHigh, lengthKC)
weeklyLowestLowKC = ta.lowest(weeklyLow, lengthKC)
weeklySmaCloseKC = ta.sma(weeklyClose, lengthKC)
weeklyAverageKC = (weeklyHighestHighKC + weeklyLowestLowKC) / 2

weeklyMomentum = ta.linreg(weeklyClose - (weeklyAverageKC + weeklySmaCloseKC) / 2, lengthKC, 0) // Custom weekly momentum calculation

// EMA alignment condition (20 EMA > 50 EMA > 100 EMA > 200 EMA)
emaAligned = ema20 > ema50 and ema50 > ema100 and ema100 > ema200

// Momentum increasing condition (daily and weekly momentum is positive and increasing)
dailyMomentumIncreasing = dailyMomentum > 0 and dailyMomentum > dailyMomentum[1] //and dailyMomentum[1] > dailyMomentum[2]
weeklyMomentumIncreasing = weeklyMomentum > 0 and weeklyMomentum > weeklyMomentum[1] //and weeklyMomentum[1] > weeklyMomentum[2]

// Redefine Pullback condition: price within 1% range of the 20 EMA
upperPullbackRange = ema20 * (1 + pullbackRangePercent / 100)
lowerPullbackRange = ema20 * (1 - pullbackRangePercent / 100)
pullbackToEma20 = (close <= upperPullbackRange) and (close >= lowerPullbackRange)

// Entry condition: EMA alignment and momentum increasing on both daily and weekly timeframes
longCondition = emaAligned and dailyMomentumIncreasing and weeklyMomentumIncreasing and pullbackToEma20

// Initialize stop loss and take profit levels as float variables
var float longStopLevel = na
var float longTakeProfitLevel = na

// Calculate stop loss and take profit levels based on ATR
if (longCondition)
    longStopLevel := close - (atrMultiplierSL * atrValue)  // Stop loss at 1.5x ATR below the entry price
    longTakeProfitLevel := close + (atrMultiplierTP * atrValue) // Take profit at 3x ATR above the entry price

// Strategy execution
if (longCondition)
    strategy.entry("Long", strategy.long)

// Exit conditions: Stop-loss at 1.5x ATR and take-profit at 3x ATR
if (strategy.position_size > 0)
    strategy.exit("Take Profit/Stop Loss", "Long", stop=longStopLevel, limit=longTakeProfitLevel)