Estrategia de ruptura de impulso

El autor:¿ Qué pasa?, Fecha: 2024-01-17 13:58:19
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de seguimiento de tendencias que utiliza el indicador de impulso de precios. Juzga la tendencia del mercado calculando el cambio de precio de cierre durante un cierto período y hace entradas largas o cortas correspondientes cuando hay una tendencia de precios persistente hacia arriba o hacia abajo.

Estrategia lógica

El indicador central de esta estrategia es el impulso de los precios.

momentum = close - close[n] 

donde n representa la duración del período de impulso. Cuando el impulso > 0, significa que el precio ha estado aumentando durante el período actual. Cuando el impulso < 0, significa que el precio ha estado cayendo durante el período actual.

La estrategia establece primero un parámetro confirmBars, que representa el número de velas necesarias para el juicio de tendencia antes de ejecutar operaciones. Dentro del rango de backtest, si el impulso > 0 persiste para las velas confirmBars, se realiza una entrada larga. Si el impulso < 0 persiste para las velas confirmBars, se realiza una entrada corta.

La clave del juicio de tendencia de la estrategia radica en contar el número de velas consecutivas donde el impulso es mayor o menor que 0, lo que se logra a través de las variables bcount y discount. Se incrementan en 1 cuando se cumple la condición correspondiente y se restablecen a 0 cuando no se cumple la condición. Cuando el recuento alcanza confirmBars, se ejecuta la operación larga o corta correspondiente.

Ventajas estratégicas

Se trata de una tendencia relativamente sencilla que sigue una estrategia con las siguientes ventajas:

  1. Lógica sencilla que es fácil de entender e implementar
  2. El indicador de impulso es sensible a los cambios de precios y puede captar rápidamente las tendencias
  3. Parámetros personalizables para ajustar la sensibilidad del juicio
  4. Puede utilizarse en diversos entornos de mercado

Riesgos estratégicos

La estrategia también tiene algunos riesgos:

  1. Tendencia a múltiples operaciones oscilantes y a las operaciones excesivas
  2. Se necesita una configuración de parámetros razonable, especialmente confirmBars para filtrar las oscilaciones
  3. No puede hacer frente eficazmente al impacto de eventos repentinos del mercado
  4. Diferencias entre backtest y trading en vivo, datos y optimización de parámetros necesarios

Optimización de la estrategia

La estrategia se puede optimizar en varios aspectos:

  1. Añadir una lógica de stop loss al control por riesgo de negociación
  2. Añadir filtros de ruptura para evitar señales falsas de las oscilaciones de precios
  3. Ajustar los parámetros confirmBars, etc. basados en diferentes productos y entornos de mercado
  4. Incorporar otros indicadores para confirmar las entradas
  5. Utilice métodos de aprendizaje automático para adaptar parámetros y filtros

Resumen de las actividades

En resumen, esta estrategia de ruptura de impulso es una estrategia de tendencia simple y práctica adecuada como una estrategia de negociación de cantidades introductoria. En la aplicación, se necesita atención para controlar la frecuencia del comercio y prevenir el sobrecomercio. Mientras tanto, los parámetros y filtros deben ajustarse y optimizarse en función de los productos reales y los entornos del mercado para que la estrategia logre el máximo rendimiento.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Momentum Strategy [TS Trader]", overlay=true)

confirmBars = input(1)
momentumLength = input(14, title="Momentum Length")

price = close
momentum = close - close[momentumLength]

// === INPUT BACKTEST RANGE ===
fromYear = input.int(2019, title="Backtest Start Year")
fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)
toYear = input.int(2023, title="Backtest End Year")
toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)

startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00)
endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59)

inBacktestRange = true

// === STRATEGY LOGIC ===
bcond = momentum > 0
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars and inBacktestRange)
    strategy.entry("Buy", strategy.long, comment="Long")

scond = momentum < 0
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars and inBacktestRange)
    strategy.entry("Sell", strategy.short, comment="Short")

// Plotting Momentum
plot(momentum, title="Momentum", color=color.purple)


Más.