
Este sistema de seguimiento de tendencias de movimiento de dos líneas equiláneas y inversiones es una estrategia de comercio cuantitativa integral que combina elementos de seguimiento de tendencias y inversiones. Utiliza un promedio móvil de dos períodos diferentes (el 100 y el 500) para determinar la dirección de la tendencia del mercado, mientras que integra varios indicadores técnicos como condiciones de filtración, incluido el RSI (el índice de fuerza y debilidad relativa), el ADX (el índice de dirección promedio) y el ATR (el promedio de la amplitud de la onda real). El sistema permite operaciones en muchas direcciones, tanto en blanco como en blanco, y aplica diferentes reglas de entrada y salida según las diferentes condiciones del mercado.
El principio central de la estrategia es un mecanismo de doble verificación basado en la identificación de tendencias y la confirmación de dinámicas:
Identificación de las tendencias: La estrategia utiliza un promedio móvil de 100 y 500 ciclos (EMA o SMA opcional) para determinar la tendencia del mercado. Cuando el MA100 está por encima del MA500, se considera una tendencia alcista; al contrario, puede ser una tendencia bajista.
Condiciones para la admisión:
Condiciones de admisión sin cabeza:
Gestión de riesgos y estrategias de salida:
Este diseño permite a las estrategias capturar oportunidades de grandes bandas en mercados de tendencia, mientras buscan puntos de inflexión en condiciones de sobreventa.
Altamente adaptableLa estrategia ofrece una gran personalización a través de varios filtros opcionales (RSI, ADX, ATR) que se adaptan a diferentes entornos de mercado y estilos de comerciantes. El usuario puede activar o desactivar estos filtros de manera flexible según la situación actual del mercado.
Transacciones de dos víasA diferencia de un simple seguimiento de tendencias o un sistema de inversión, la estrategia combina dos métodos de negociación, tanto para hacer más en una tendencia alcista como para hacer menos en condiciones extremas de sobreventa, lo que aumenta las oportunidades de ganar.
El juicio de las tendencias inteligentesEl uso de sistemas de doble línea media ((MA100 y MA500) proporciona un juicio de tendencias más fiable y es más capaz de filtrar brechas falsas en comparación con un sistema de línea media simple.
Adaptación a las fluctuaciones dinámicasA través de un filtro ATR, las estrategias pueden adaptarse automáticamente a los cambios en la volatilidad del mercado, evitando el comercio frecuente en entornos de baja volatilidad y reduciendo los costos de transacción innecesarios.
Prevención de la reversión de la persecuciónLa operación aérea tiene un mecanismo de “bloqueo de la subida fuerte” que prohíbe el shorting cuando el MA100 es superior al MA500 por encima del porcentaje establecido, lo que evita el riesgo de contracorriente en una situación de subida fuerte.
Mecanismo de confirmación múltiple: La señal de entrada requiere la confirmación conjunta de varios indicadores técnicos, lo que reduce significativamente la probabilidad de señales falsas y aumenta la solidez de la estrategia.
Mecanismo de salida flexibleLas estrategias están diseñadas con diferentes lógicas de salida para el multi-cabeza y el cabezón, el multi-cabeza puede ser usado como un stop-loss dinámico a través de MA500, mientras que el cabezón tiene un objetivo de parada fijo, que se ajusta a las características de las operaciones en diferentes direcciones.
Sensibilidad de los parámetrosLa estrategia depende de una serie de indicadores técnicos y configuraciones de parámetros, en los que pequeños cambios pueden causar diferencias significativas en los resultados de la medición. En las operaciones reales, los parámetros óptimos pueden cambiar con los cambios en el estado del mercado, con el riesgo de una adaptación excesiva a los datos históricos. La solución es utilizar la optimización progresiva y las pruebas avanzadas para verificar la estabilidad de los parámetros.
Riesgo de retrasoLos indicadores como los promedios móviles son, en esencia, indicadores atrasados, que pueden no ser capaces de capturar los puntos de inflexión a tiempo en un mercado muy volátil, lo que provoca un retraso en la entrada o salida. Se recomienda una reducción adecuada del ciclo de los promedios móviles o el aumento de otros indicadores líderes en mercados altamente volátiles.
Mal desempeño en la transición: En un mercado convulso o en un período de cambio de tendencia, la estrategia puede generar falsas señales frecuentes, lo que lleva a pérdidas continuas. La solución es agregar un mecanismo de identificación del estado del mercado que reduzca automáticamente las posiciones o suspenda la negociación cuando se identifica un mercado convulso.
Riesgos de la gestión de fondosEstrategia de usar el 100% de los fondos de la cuenta de forma predeterminada, además de permitir un alza en la pirámide, que puede enfrentarse a un gran retiro en un escenario desfavorable. Se recomienda ajustar el tamaño de la posición según la capacidad de asumir el riesgo personal y evitar el uso de todos los fondos de la operación.
Riesgo de liquidez: En mercados o momentos de baja liquidez, es posible que se enfrente al riesgo de un aumento de puntos de deslizamiento o de no poder negociar a los precios esperados. Se recomienda la estrategia de operar en pares y momentos de negociación principales con suficiente liquidez.
El riesgo de los cisnes.: El cierre porcentual fijo puede no ejecutarse de manera efectiva en condiciones extremas de mercado, especialmente si los precios se disparan. Se recomienda establecer límites máximos de pérdidas y considerar el uso de derivados para cubrir el riesgo extremo, como opciones.
Introducción a las clasificaciones de estado de mercadoLas estrategias actuales utilizan la misma configuración de parámetros para diferentes estados de mercado (trend, oscilación, alta volatilidad, baja volatilidad). Se puede considerar agregar la función de identificación de estados de mercado y optimizar diferentes combinaciones de parámetros para diferentes estados. La implementación concreta puede dividir los estados de mercado a través de un indicador de fluctuación (como el porcentaje ATR) o un indicador de fuerza de tendencia (como el ADX Threshold).
Optimización de la gestión de fondosLa estrategia actual utiliza fondos de cuenta en proporción fija, que se puede mejorar para la gestión de posiciones dinámicas basadas en la volatilidad, aumentando las posiciones en entornos de baja volatilidad y reduciendo las posiciones en entornos de alta volatilidad para lograr un equilibrio de riesgo. Se puede usar el valor relativo de ATR para ajustar dinámicamente la proporción de fondos en cada operación.
Aumentar el filtro de tiempoAlgunos mercados pueden tener mejores o peores resultados en un periodo de tiempo determinado. Se puede agregar un filtro de tiempo para evitar períodos de mal desempeño en la historia. Esto se puede hacer mediante el análisis del desempeño estratégico en diferentes períodos de tiempo (por ejemplo, las horas de negociación de Asia, Europa y Estados Unidos).
Confirmación del marco temporal múltiple: La estrategia actual solo funciona en un solo marco de tiempo ((3 horas), se puede considerar agregar una confirmación de tendencia en un marco de tiempo más alto, entrar en juego solo cuando la tendencia en el marco de tiempo más alto coincide y aumentar la tasa de ganancias. Por ejemplo, la señal múltiple en el gráfico de 3 horas se ejecuta solo cuando la tendencia en el gráfico de línea de sol es hacia arriba.
Detener y detener el movimientoLa estrategia se adapta mejor a los diferentes entornos de volatilidad. Se puede usar el multiplicador de ATR para configurar los puntos de parada y parada, ampliando automáticamente el rango de parada cuando aumenta la volatilidad.
Integración de los indicadores emocionales: Añadir indicadores de la emoción del mercado como filtros adicionales, como volumen de operaciones, tasas de capital (para contratos a perpetuidad) o primas de futuros, para evitar el comercio de contravalores en estados emocionales extremos. Estos indicadores pueden servir como señales de alerta de que el mercado está demasiado caliente o demasiado frío.
Mejoras en el aprendizaje automático: Utiliza algoritmos de aprendizaje automático para seleccionar dinámicamente la combinación de parámetros óptimos y ajustar automáticamente los parámetros de la estrategia según el estado más reciente del mercado. Esto se puede lograr mediante la optimización de parámetros de la ventana de rodaje o métodos de aprendizaje de fuerza.
El sistema de seguimiento de tendencias de movimiento de dos líneas y el sistema de inversión es una estrategia de comercio cuantitativo de diseño ingenioso que ofrece una mayor adaptabilidad y personalización, al tiempo que mantiene la simplicidad de la estrategia mediante la combinación de un sistema de movimiento de dos líneas, indicadores de movimiento y filtros de fluctuación. El principal beneficio de la estrategia reside en su mecanismo de confirmación múltiple y su sistema de filtración flexible, lo que le permite adaptarse a diferentes entornos de mercado.
Sin embargo, como todas las estrategias de negociación, también enfrenta desafíos como la sensibilidad a los parámetros, el atraso y los cambios en el estado del mercado. Se espera que la solidez y la adaptabilidad de la estrategia se mejoren aún más mediante la introducción de mejoras en direcciones como la clasificación del estado del mercado, la gestión dinámica de fondos, el análisis de múltiples marcos de tiempo y la optimización del aprendizaje automático.
Lo más importante es que el comerciante debe comprender plenamente sus principios y limitaciones al aplicar la estrategia, hacer los ajustes adecuados en función de las preferencias de riesgo personales y la experiencia del mercado, y siempre adherirse a los principios estrictos de gestión de riesgos. No hay una estrategia de negociación perfecta, pero con la optimización continua y la aplicación cuidadosa, este sistema puede convertirse en una poderosa arma en la caja de herramientas del comerciante.
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Momentum Long + Short Strategy (BTC 3H)", overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=1000,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=1,
pyramiding=1)
// ==============================================================================
// === LONG TRADE SETTINGS
// ==============================================================================
enableLongs = input.bool(true, "Enable Long Trades", group="LONG TRADE SETTINGS")
slPercentLong = input.float(3.0, "Long Stop Loss %", minval=0.1, group="LONG TRADE SETTINGS")
useRSIFilter = input.bool(false, "Enable RSI Filter", group="LONG FILTER SETTINGS")
useADXFilter = input.bool(false, "Enable ADX Filter", group="LONG FILTER SETTINGS")
useATRFilter = input.bool(false, "Enable ATR Filter", group="LONG FILTER SETTINGS")
useTrendFilter = input.bool(true, "Require MA100 > MA500", group="LONG FILTER SETTINGS")
smoothType = input.string("EMA", "Smoothing Type", options=["EMA", "SMA"], group="LONG FILTER SETTINGS")
smoothingLength = input.int(100, "Smoothing Length (for filters)", group="LONG FILTER SETTINGS")
rsiLengthLong = input.int(14, "RSI Length", group="RSI FILTER")
adxLength = input.int(14, "ADX Length", group="ADX FILTER")
atrLength = input.int(14, "ATR Length", group="ATR FILTER")
// ==============================================================================
// === SHORT TRADE SETTINGS
// ==============================================================================
enableShorts = input.bool(false, "Enable Short Trades", group="SHORT TRADE SETTINGS")
slPercentShort = input.float(3.0, "Short Stop Loss %", minval=0.1, group="SHORT TRADE SETTINGS")
tpPercentShort = input.float(4.0, "Short Take Profit %", minval=0.1, group="SHORT TRADE SETTINGS")
rsiLengthShort = input.int(14, "RSI Length", group="SHORT FILTER SETTINGS")
rsiThresholdShort = input.float(33, "RSI Threshold", minval=1, maxval=100, group="SHORT FILTER SETTINGS")
bbLength = input.int(20, "Bollinger Band Length", group="SHORT FILTER SETTINGS")
useATRFilterShort = input.bool(true, "Enable ATR Filter (Short)", group="SHORT FILTER SETTINGS")
useStrongUptrendBlock = input.bool(true, "Block Shorts if MA100 > MA500 by (%)", group="SHORT FILTER SETTINGS")
shortTrendGapPct = input.float(2.0, "Threshold (%) for Blocking Shorts", minval=0.1, group="SHORT FILTER SETTINGS")
// ==============================================================================
// === COMMON INDICATORS
// ==============================================================================
ma100 = smoothType == "EMA" ? ta.ema(close, 100) : ta.sma(close, 100)
ma500 = smoothType == "EMA" ? ta.ema(close, 500) : ta.sma(close, 500)
priceAboveMAs = close > ma100 and close > ma500
trendAlignment = not useTrendFilter or ma100 > ma500
plot(ma100, title="MA 100", color=color.orange)
plot(ma500, title="MA 500", color=color.blue)
// ==============================================================================
// === LONG FILTER LOGIC
// ==============================================================================
rsiLong = ta.rsi(close, rsiLengthLong)
rsiSmooth = smoothType == "EMA" ? ta.ema(rsiLong, smoothingLength) : ta.sma(rsiLong, smoothingLength)
rsiPass = not useRSIFilter or rsiLong > rsiSmooth
dmi(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trur
minusDI = 100 * ta.rma(minusDM, len) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
ta.rma(dx, len)
adx = dmi(adxLength)
adxSmooth = smoothType == "EMA" ? ta.ema(adx, smoothingLength) : ta.sma(adx, smoothingLength)
adxPass = not useADXFilter or adx > adxSmooth
atr = ta.atr(atrLength)
atrSmooth = smoothType == "EMA" ? ta.ema(atr, smoothingLength) : ta.sma(atr, smoothingLength)
atrPass = not useATRFilter or atr > atrSmooth
// ==============================================================================
// === SHORT FILTER LOGIC
// ==============================================================================
rsiShort = ta.rsi(close, rsiLengthShort)
bbBasis = ta.sma(close, bbLength)
bbDev = ta.stdev(close, bbLength)
bbLower = bbBasis - bbDev * 2
priceBelowBB = close < bbLower
priceBelowMAs = close < ma100 and close < ma500
rsiOversold = rsiShort < rsiThresholdShort
atrShort = ta.atr(atrLength)
atrShortSmoothed = smoothType == "EMA" ? ta.ema(atrShort, smoothingLength) : ta.sma(atrShort, smoothingLength)
atrShortPass = not useATRFilterShort or atrShort > atrShortSmoothed
emaGapTooWide = (ma100 - ma500) / ma500 * 100 > shortTrendGapPct
strongUptrendBlock = not useStrongUptrendBlock or not emaGapTooWide
// ==============================================================================
// === ENTRY CONDITIONS
// ==============================================================================
longCondition = enableLongs and priceAboveMAs and trendAlignment and rsiPass and adxPass and atrPass
shortCondition = enableShorts and priceBelowMAs and priceBelowBB and rsiOversold and atrShortPass and strongUptrendBlock
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// ==============================================================================
// === EXIT CONDITIONS
// ==============================================================================
longStop = strategy.position_avg_price * (1 - slPercentLong / 100)
strategy.exit("SL Long", from_entry="Long", stop=longStop)
if strategy.position_size > 0 and close < ma500
strategy.close("Long", comment="TP Below MA500")
shortStop = strategy.position_avg_price * (1 + slPercentShort / 100)
shortTP = strategy.position_avg_price * (1 - tpPercentShort / 100)
strategy.exit("SL/TP Short", from_entry="Short", stop=shortStop, limit=shortTP)