Estratégia de negociação de tendências com base no indicador MACD


Data de criação: 2024-02-02 11:32:48 última modificação: 2024-02-02 11:32:48
cópia: 3 Cliques: 642
1
focar em
1617
Seguidores

Estratégia de negociação de tendências com base no indicador MACD

Visão geral

O núcleo da estratégia é baseado em um indicador desenvolvido por Andrew Abraham em um artigo publicado em setembro de 1998 na coluna TASC da revista de tendências de negociação de Forex. O indicador usa o alcance real médio de flutuação e o canal de preço para determinar a direção da tendência do mercado e, em combinação com o indicador MACD, filtra os sinais de negociação com o objetivo de capturar a tendência da linha média.

Princípio da estratégia

A estratégia primeiro calcula uma média móvel ponderada de 21 dias de média real de variação (ATR) como uma base de variação. Em seguida, calcula os preços mais altos e mais baixos dos últimos 21 dias, comparando o preço de fechamento atual da linha K com o limite superior e inferior da base de variação, para determinar se o preço quebrou o canal e, assim, determinar a direção da tendência.

Especificamente, a definição de um limite superior de canal é o preço máximo dos últimos 21 dias menos 3 vezes o ATR de referência, e um limite inferior de canal é o preço mínimo dos últimos 21 dias mais 3 vezes o ATR de referência. Quando o preço de fechamento é superior ao limite superior do canal, é considerado uma tendência de baixa; Quando o preço de fechamento é inferior ao limite inferior do canal, é considerado uma tendência de baixa.

Ao mesmo tempo em que determina a direção da tendência, a estratégia também introduz filtros no indicador MACD. O MACD só gera um sinal de compra quando a coluna é positiva, evitando perder o ponto de compra.

Vantagens estratégicas

Esta estratégia, combinada com o julgamento de tendências e filtragem de indicadores, permite determinar com eficácia a direção da tendência de linha longa no mercado, evitando ser enganado pelas flutuações de curto prazo do mercado. As vantagens específicas são as seguintes:

  1. Usando o canal de preço para determinar a tendência, determinar com precisão a direção da tendência da linha longa
  2. A variabilidade do intervalo de referência pode ser ajustada dinamicamente para se adaptar às mudanças do mercado
  3. Filtragem de indicadores MACD para aumentar a base de decisão e evitar a perda de pontos de compra
  4. Parâmetros configuráveis, estilo de política flexível

Risco estratégico

A estratégia também apresenta riscos, principalmente em relação a:

  1. O risco de ruptura do canal de preços não é totalmente evitável
  2. Indicadores MACD podem gerar sinais enganosos
  3. Parâmetros mal definidos podem causar instabilidade na estratégia

Para isso, pode-se reduzir o risco por meio de configuração de parâmetros de otimização, dimensionamento de posição rigoroso e parada de prejuízo oportuna.

Direção de otimização da estratégia

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

  1. Teste diferentes combinações de parâmetros para encontrar o melhor parâmetro

É possível testar diferentes combinações de parâmetros de comprimento ou multiplicadores para encontrar a combinação de parâmetros que produz a melhor taxa de retorno com base nos dados de ressonância.

  1. Combinação com outros indicadores de filtragem

Pode ser testado em combinação com RSI, KDJ e outros indicadores para filtrar o sinal e ver se pode aumentar a taxa de retorno.

  1. Parâmetros de ajuste dinâmico

Os parâmetros podem ser ajustados dinamicamente de acordo com a situação do mercado, como a ampliação apropriada da faixa de canais quando a tendência é evidente e a restrição apropriada da faixa de canais em caso de turbulência.

Resumir

A estratégia é, em geral, uma estratégia de acompanhamento de tendências relativamente robusta. Combinando o método de determinação da direção da tendência do canal de preços com o método de filtragem do MACD, pode determinar efetivamente as tendências de linha longa no mercado e gerar ganhos estáveis. Com otimização de parâmetros, gerenciamento de risco e correção adequada, a estratégia pode ser uma parte importante do sistema de negociação quantitativa.

Código-fonte da estratégia
/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © melihtuna

//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)

// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
        iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos =	iff(close > ret, 1,
	    iff(close < ret, -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true

strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)