Estratégia de ruptura do impulso

Autora:ChaoZhang, Data: 2024-01-17 13:58:19
Tags:

img

Resumo

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.

Estratégia lógica

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.

Vantagens da estratégia

Trata-se de uma tendência relativamente simples que segue uma estratégia com as seguintes vantagens:

  1. Lógica simples que é fácil de entender e implementar
  2. O indicador de dinâmica é sensível às alterações de preços e pode captar rapidamente as tendências
  3. Parâmetros personalizáveis para ajustar a sensibilidade do julgamento
  4. Pode ser utilizado em vários ambientes de mercado

Riscos estratégicos

A estratégia apresenta também alguns riscos:

  1. Capacidade para executar transações de oscilação múltipla e transações de excesso
  2. É necessária uma configuração razoável dos parâmetros, especialmente confirmBars para filtrar oscilações
  3. Não pode lidar eficazmente com o impacto de eventos súbitos no mercado
  4. Diferenças entre backtest e negociação ao vivo, dados e otimização de parâmetros necessários

Optimização da Estratégia

A estratégia pode ser otimizada em vários aspectos:

  1. Adicionar a lógica de stop loss ao controlo por risco de negociação
  2. Adicionar filtros de ruptura para evitar sinais falsos de oscilações de preços
  3. Ajustar confirmBars etc parâmetros com base em diferentes produtos e ambientes de mercado
  4. Incorporar outros indicadores para confirmar as entradas
  5. Usar métodos de aprendizagem de máquina para adaptar parâmetros e filtros

Resumo

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)


Mais.