
La estrategia de cruce de SMA de seguimiento dinámico ADX es un sistema de negociación cuantitativo que combina una media móvil simple (SMA) con una señal de cruce de SMA y un filtro de dirección media (ADX). La estrategia confirma la intensidad de la tendencia del mercado a través del indicador ADX, ejecuta las señales de negociación de cruce de SMA solo si hay suficiente dinámica y utiliza un mecanismo de stop loss y stop loss de seguimiento dinámico para proteger las ganancias y limitar el riesgo.
La lógica central de la estrategia se basa en los siguientes componentes clave:
Señales de cruce SMA: Utiliza una media móvil simple a corto plazo (de 3 ciclos por defecto) que produce una señal de plus cuando el precio cruza la SMA hacia arriba y una señal de falta cuando el precio cruza la SMA hacia abajo.
El filtro ADXEl indicador ADX calculado manualmente (el ciclo por defecto es 15) confirma que el mercado tiene suficiente fuerza de tendencia para ejecutar una operación solo cuando el ADX es mayor que el umbral establecido (el 15 por defecto). Esto filtra eficazmente las falsas señales en los mercados de temblor.
Gestión de riesgos dinámicos:
Administración de sesiones: Obligar a todos los tenedores a cerrar sus posiciones en la hora de cierre de la sesión de negociación designada (el tiempo predeterminado es las 16:00) para evitar el riesgo de pasar la noche.
Señales en tiempo real: Cuando se activa la señal de negociación, se genera un mensaje de alerta en formato JSON que contiene la dirección de la operación, el precio de entrada, el precio de parada y el precio de parada.
Función de protección contra replanteo: Proporciona la función reso_no_repaint para asegurar que el indicador no se vuelva a pintar, lo que mejora la fiabilidad de la política.
Mecanismo de reconocimiento de tendenciasLa combinación de la estrategia de cruce SMA y la de ADX permite identificar las tendencias fuertes y reducir las señales erróneas en los mercados convulsionados. La estrategia de cruce SMA aumenta la probabilidad de éxito de la operación en comparación con la estrategia de cruce SMA.
Gestión de riesgos flexible: Proporciona medidas completas de control de riesgo, incluyendo paradas fijas, paradas de objetivo y paradas de seguimiento, permitiendo a los comerciantes ajustar los parámetros de acuerdo con sus preferencias de riesgo.
Funciones de administración de sesiones: Automáticamente cancelar posiciones al final de la jornada de negociación, evitando el riesgo de la noche a la mañana, especialmente para los comerciantes del día o los comerciantes que desean evitar el riesgo de noticias y eventos económicos importantes.
Sistema de alerta en tiempo real: Proporciona alertas en formato JSON estructurado para su integración en sistemas de transacciones automatizadas o mecanismos de notificación.
Sencillo y eficaz: La lógica de la estrategia es clara, con pocos parámetros, fácil de entender y ajustar, adecuada para comerciantes de todos los niveles.
Diseño anti-rediseño: Asegura la fiabilidad de la política en el entorno de disco real mediante la función de prevención de rediseño.
Volatilidad de las SMA a corto plazo: El SMA de 3 ciclos utilizado por defecto puede ser demasiado sensible y puede generar demasiadas señales de negociación en mercados de alta volatilidad, aumentando los costos de negociación y pudiendo provocar pérdidas continuas. La solución es ajustar la longitud del SMA en función de las diferentes condiciones de mercado y marcos de tiempo.
Gestión de riesgos de puntaje fijoLa estrategia utiliza puntos fijos en lugar de porcentajes o ATR para establecer el stop loss, lo que puede no ser lo suficientemente flexible en diferentes entornos de volatilidad. El stop loss en mercados de alta volatilidad puede ser demasiado pequeño y el stop loss en mercados de baja volatilidad puede ser demasiado grande.
ADX tardío: ADX es un indicador atrasado, que puede dar una señal de confirmación solo después de que la tendencia se haya establecido, lo que lleva a una entrada tardía. Esto se puede mejorar optimizando los parámetros de ADX o combinando con otros indicadores líderes.
Falta de distinción de estado de mercado: La estrategia no distingue entre diferentes estados de mercado (como tendencias, fluctuaciones intermitentes) y utiliza la misma lógica de negociación en todos los entornos de mercado, lo que puede conducir a un mal desempeño en mercados no tendenciales.
Limitaciones de un solo marco de tiempoLa estrategia se basa en un análisis de un solo marco de tiempo, la falta de confirmación de varios marcos de tiempo, y puede perderse importantes cambios de mercado en el contexto de tendencias más grandes.
Mejoras en la gestión de riesgos dinámicos: Sustitución de los puntos fijos de la parada de pérdidas por un sistema de gestión de riesgo dinámico basado en el ATR (la amplitud de fluctuación real promedio), lo que permite que la estrategia se adapte a diferentes entornos de volatilidad del mercado. Por ejemplo, se puede configurar la parada de pérdidas en 1.5 veces el ATR y la parada en 3 veces el ATR.
Análisis de marcos de tiempo múltiples: Agregar confirmación de tendencias en marcos de tiempo más altos, solo comerciar en la dirección de la tendencia más grande, para mejorar la tasa de éxito. Se puede agregar un SMA de período más largo como filtro de tendencia.
Identificación del estado del mercadoIntroducción de mecanismos de clasificación del estado del mercado, como indicadores de volatilidad o de intensidad de tendencia, para aplicar diferentes parámetros de estrategia o lógica de negociación en diferentes entornos de mercado.
Optimización de ingresoConsidere agregar indicadores adicionales de confirmación de entrada, como el RSI (índice de fortaleza relativa) o la banda de Brin, para mejorar la calidad de la señal de entrada. También puede implementar una estrategia de construcción de almacenes en serie para reducir el riesgo de entrada en un solo punto.
Parámetros de adaptación: Implementa un mecanismo de auto-adaptación de parámetros que ajusta automáticamente la longitud de SMA, el límite de ADX y los parámetros de gestión de riesgo en función de la acción reciente del mercado, lo que permite que la estrategia se adapte a las condiciones cambiantes del mercado.
El filtro del tiempo: Agregar filtros de tiempo de negociación para evitar momentos de baja liquidez o periodos de alta volatilidad en las noticias, reduciendo el riesgo de puntos de deslizamiento y movimientos anormales.
La estrategia de cruce de SMA de seguimiento dinámico ADX es un sistema de negociación completo que combina análisis técnico y gestión de riesgos. Al combinar la simple señal de cruce de SMA con la confirmación de tendencias de ADX, la estrategia permite identificar con mayor precisión las oportunidades de negociación favorables. El mecanismo de stop loss dinámico y el stop loss de seguimiento ofrecen un buen control de riesgo, mientras que la función de administración de sesiones reduce aún más el riesgo de la noche a la mañana.
A pesar de algunas limitaciones, como la gestión de riesgos de puntos fijos y el análisis de un solo marco de tiempo, estos problemas pueden resolverse a través de las direcciones de optimización propuestas en este artículo. La estrategia tiene el potencial de ser un sistema de negociación más robusto y adaptable mediante la introducción de mejoras como la gestión de riesgos dinámicos basados en ATR, el análisis de marcos múltiples y la identificación del estado del mercado.
En última instancia, el éxito de la estrategia depende de la adaptabilidad de los operadores a los parámetros y a los mercados y a los marcos de tiempo específicos. Se recomienda realizar una adecuada retroalimentación y simulación de operaciones antes de la negociación en vivo para verificar el rendimiento de la estrategia en diferentes condiciones de mercado.
/*backtest
start: 2024-08-04 00:00:00
end: 2025-08-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("safa bot alert", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
smaLength = input.int(3, title="SMA Length")
tpPoints = input.float(80, title="Take Profit (Points)")
slPoints = input.float(35, title="Stop Loss (Points)")
trailPoints = input.float(15, title="Trailing Stop (Points)")
sessionCloseHour = input.int(16, "Session Close Hour (24h)")
sessionCloseMinute = input.int(0, "Session Close Minute")
// === ADX INPUTS ===
adxLength = input.int(15, title="ADX Length")
adxThreshold = input.float(15, title="Minimum ADX to Trade")
// === INDICATORS ===
sma = ta.sma(close, smaLength)
plot(sma, title="3 SMA", color=color.orange)
// === MANUAL ADX CALCULATION ===
upMove = high - high[1]
downMove = low[1] - low
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
trur = ta.rma(ta.tr, adxLength)
plusDI = 100 * ta.rma(plusDM, adxLength) / trur
minusDI = 100 * ta.rma(minusDM, adxLength) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)
plot(adx, title="ADX", color=color.blue)
// === ENTRY CONDITIONS ===
longCondition = ta.crossover(close, sma) and adx > adxThreshold
shortCondition = ta.crossunder(close, sma) and adx > adxThreshold
// === STRATEGY EXECUTION ===
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Exit", from_entry="Long", limit=close + tpPoints, stop=close - slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"BUY","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close - slPoints) +
',"TP":' + str.tostring(close + tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Exit", from_entry="Short", limit=close - tpPoints, stop=close + slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"SELL","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close + slPoints) +
',"TP":' + str.tostring(close - tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
// === FORCE EXIT AT SESSION CLOSE ===
sessionCloseTime = (hour == sessionCloseHour and minute == sessionCloseMinute)
if (sessionCloseTime)
strategy.close_all(comment="Session Close")
// === NO-REPAINT FUNCTION ===
reso_no_repaint(exp, use, res) =>
use ? request.security(syminfo.tickerid, res, exp[1], lookahead=barmerge.lookahead_off, gaps=barmerge.gaps_on)[0] : exp