Estrategia de ruptura de impulso con filtro ADX

El autor:¿ Qué pasa?, Fecha: 2024-01-04 17:12:30
Las etiquetas:

img

Resumen general

Esta es una estrategia de negociación a corto plazo que utiliza el indicador ADX para filtrar las señales de ruptura. Se corta cuando el precio se rompe por encima de la banda superior de Bollinger y ADX está cayendo, y se hace largo cuando el precio se rompe por debajo de la banda inferior de Bollinger y ADX está subiendo. La estrategia también establece stop loss y take profit automáticamente para la negociación totalmente automatizada.

Estrategia lógica

El núcleo de esta estrategia es el uso de bandas de Bollinger para señales de ruptura. Las bandas superior e inferior de las bandas de Bollinger representan dos desviaciones estándar del precio, por lo que las rupturas generalmente implican que el precio está entrando en una tendencia fuerte. Además, el indicador ADX se introduce aquí como un filtro para evitar falsas rupturas.

Específicamente, esta estrategia calcula Bandas de Bollinger utilizando 33 períodos de precios de cierre. La banda media es un promedio móvil simple de 33 períodos, y las bandas superior/inferior se colocan a dos desviaciones estándar por encima/por debajo de la banda media. La estrategia señala corto cuando el precio cierra por debajo de la banda superior y el ADX de 8 períodos está por debajo del ADX de 15 períodos. Señala largo cuando el precio cierra por encima de la banda inferior y el ADX de 8 períodos está por encima del ADX de 15 períodos. Las salidas se establecen en 800 puntos de ganancia y 400 puntos de stop loss.

Análisis de ventajas

Como estrategia de ruptura que incorpora filtros de tendencia e impulso, tiene varias ventajas:

  1. El uso de bandas de Bollinger para detectar breakouts se alinea con los hábitos de la mayoría de los operadores.
  2. El filtro ADX adicional ayuda a evitar las pérdidas de las flechas.
  3. La lógica es simple y fácil de entender y optimizar.
  4. El stop loss y take profit automatizado facilita el comercio por algoritmo.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Los parámetros de BB incorrectos pueden generar señales de frecuencia excesiva y aumentar los costes.
  2. Los parámetros ADX incorrectos podrían filtrar señales válidas.
  3. La distancia de parada de pérdida puede ser demasiado amplia, lo que conduce a grandes pérdidas.

Para mitigar estos riesgos, podemos ajustar el parámetro BB para reducir las bandas, ajustar los períodos ADX para evitar el filtrado excesivo y reducir la stop loss para controlar la pérdida de una sola operación.

Direcciones de optimización

Hay espacio para una mayor optimización:

  1. Prueba con diferentes datos de mercado para encontrar el conjunto óptimo de parámetros.
  2. Incorpore otros indicadores como el volumen y la media móvil para filtrar la señal.
  3. Utilice métodos de aprendizaje automático para optimizar los parámetros.
  4. Considere el stop loss dinámico y tome ganancias.

Conclusión

En conclusión, esta es una estrategia de ruptura simple y práctica con filtro. Identificar tendencias con BB y filtrar señales con ADX ayuda a evitar el ruido durante los períodos de rango y capturar oportunidades de tendencia hasta cierto punto.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hizbullah XAUUSD Sniper", overlay=true)

Price = close

Length = input(33)
Mult = input(2)
Basis = sma(Price, Length)
StdDev = Mult * stdev(Price, Length)
Upper = Basis + StdDev
Lower = Basis - StdDev

ADX_Length = input(4)
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
SmoothedTrueRange = sma(TrueRange, ADX_Length)
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length)
SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100
SmoothedADX1 = ema(DX, input(8))
SmoothedADX2 = ema(DX, input(15))

Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2

Take_Profit = input(800)
Stop_Loss = input(400)

strategy.entry("ShortEntry", true, when = Condition1)
strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)


Más.