Estratégia de ruptura de impulso com filtro ADX

Autora:ChaoZhang, Data: 2024-01-04 17:12:30
Tags:

img

Resumo

Esta é uma estratégia de negociação de curto prazo que utiliza o indicador ADX para filtrar sinais de ruptura. Ele fica curto quando o preço quebra acima da banda superior de Bollinger e o ADX está caindo, e fica longo quando o preço quebra abaixo da banda inferior de Bollinger e o ADX está subindo. A estratégia também define stop loss e take profit automaticamente para negociação totalmente automatizada.

Estratégia lógica

O núcleo desta estratégia é o uso de Bollinger Bands para sinais de ruptura. As bandas superior e inferior de Bollinger Bands representam dois desvios padrão do preço, por isso as rupturas geralmente implicam que o preço está entrando em uma tendência forte. Além disso, o indicador ADX é introduzido aqui como um filtro para evitar falsas rupturas.

Especificamente, esta estratégia calcula as Bandas de Bollinger usando 33 períodos de preços de fechamento. A faixa do meio é uma média móvel simples de 33 períodos, e as bandas superior/inferior são colocadas em dois desvios padrão acima/abaixo da faixa do meio. A estratégia sinaliza curto quando o preço fecha abaixo da faixa superior e o ADX de 8 períodos está abaixo do ADX de 15 períodos. Ele sinaliza longo quando o preço fecha acima da faixa inferior e o ADX de 8 períodos está acima do ADX de 15 períodos. As saídas são definidas em 800 pontos de lucro e 400 pontos de stop loss.

Análise das vantagens

Como uma estratégia de ruptura que incorpora filtros de tendência e impulso, tem várias vantagens:

  1. Usar Bandas de Bollinger para detectar breakouts alinha com os hábitos da maioria dos traders.
  2. O filtro ADX adicional ajuda a evitar perdas de arremessas.
  3. A lógica é simples e fácil de entender e otimizar.
  4. O stop loss automatizado e o take profit facilitam a negociação por algoritmo.

Análise de riscos

Há também alguns riscos com esta estratégia:

  1. Os parâmetros BB inadequados podem gerar sinais com uma frequência excessiva e aumentar os custos.
  2. Parâmetros ADX incorretos podem filtrar sinais válidos.
  3. A distância de stop loss pode ser demasiado larga, levando a grandes perdas.

Para mitigar esses riscos, podemos ajustar o parâmetro BB para reduzir as faixas, ajustar os períodos ADX para evitar filtragem excessiva e reduzir a perda de parada para controlar a perda de uma única negociação.

Orientações de otimização

Há espaço para uma maior otimização:

  1. Teste em diferentes dados de mercado para encontrar o conjunto óptimo de parâmetros.
  2. Incorporar outros indicadores como volume e média móvel para filtragem de sinal.
  3. Utilize métodos de aprendizagem de máquina para otimizar automaticamente parâmetros.
  4. Considere o stop loss dinâmico e tire lucro.

Conclusão

Em conclusão, esta é uma estratégia de ruptura simples e prática com filtro. Identificar tendências com BBs e filtrar sinais com ADX ajuda a evitar ruído durante períodos de alcance e capturar oportunidades de tendência até certo ponto.


/*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)


Mais.