Esta estratégia é uma estratégia de tendência que utiliza o indicador de dinâmica de preços. julga a tendência do mercado calculando a mudança de preço de fechamento durante um determinado período e faz entradas longas ou curtas correspondentes quando há uma tendência de preço persistente para cima ou para baixo.
O principal indicador desta estratégia é o ímpeto dos preços.
momentum = close - close[n]
onde n representa a duração do período de impulso. Quando o impulso > 0, significa que o preço aumentou durante o período atual. Quando o impulso < 0, significa que o preço caiu durante o período atual.
A estratégia define primeiro um parâmetro confirmBars, que representa o número de velas necessárias para o julgamento da tendência antes da execução de negociações. Dentro do intervalo de backtest, se o impulso > 0 persistir para velas confirmBars, uma entrada longa é feita. Se o impulso < 0 persistir para velas confirmBars, uma entrada curta é feita.
A chave para o julgamento da tendência da estratégia reside na contagem do número de velas consecutivas em que o momento é maior ou menor que 0, o que é realizado através das variáveis bcount e discount. Eles são incrementados em 1 quando a condição correspondente é atendida e redefinidos para 0 quando a condição não é atendida. Quando a contagem atinge confirmBars, o comércio longo ou curto correspondente é executado.
Trata-se de uma tendência relativamente simples que segue uma estratégia com as seguintes vantagens:
A estratégia apresenta também alguns riscos:
A estratégia pode ser otimizada em vários aspectos:
Em resumo, esta estratégia de ruptura de momento é uma estratégia simples e prática de tendência adequada como uma estratégia de negociação quantitativa introdutória.
/*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)