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.
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.
Se trata de una tendencia relativamente sencilla que sigue una estrategia con las siguientes ventajas:
La estrategia también tiene algunos riesgos:
La estrategia se puede optimizar en varios aspectos:
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)