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

Autora:ChaoZhang, Data: 2024-02-02 11:32:48
Tags:

img

Resumo

O núcleo desta estratégia baseia-se no indicador desenvolvido no artigo Trading the Trend publicado por Andrew Abraham na revista TASC em setembro de 1998.

Estratégia lógica

A estratégia primeiro calcula a média móvel ponderada de 21 dias da faixa média verdadeira (ATR) como faixa de volatilidade da linha de base. Em seguida, calcula os preços mais altos e mais baixos nos últimos 21 dias. Comparando o preço de fechamento atual com os limites superior e inferior da faixa de base, ele julga se o preço rompe o canal para determinar a direção da tendência.

Especificamente, o limite superior do canal é definido como o preço mais alto nos últimos 21 dias menos 3 vezes o ATR da linha de base, e o limite inferior do canal é o preço mais baixo nos últimos 21 dias mais 3 vezes o ATR da linha de base.

Ao mesmo tempo em que determina a direção da tendência, esta estratégia também introduz o indicador MACD para filtragem.

Vantagens

Esta estratégia combina a determinação de tendências e a filtragem de indicadores, o que permite identificar eficazmente a direcção da tendência do mercado a médio e longo prazos, sem ser induzido em erro pelas flutuações a curto prazo.

  1. Utilização do canal de preços para determinar tendências e identificar com precisão a direção a longo prazo
  2. O intervalo de volatilidade dinâmica de referência adapta-se às alterações do mercado
  3. A filtragem do MACD fornece apoio adicional à decisão para evitar a falta de pontos de compra
  4. Os parâmetros configuráveis oferecem flexibilidade no ajuste do estilo da estratégia

Riscos

A estratégia apresenta também alguns riscos, principalmente nos seguintes aspectos:

  1. Risco de ruptura do canal de preços
  2. Risco de erros de sinalização do MACD
  3. Configuração inadequada dos parâmetros pode causar instabilidade da estratégia

Estes riscos podem ser reduzidos através da otimização dos parâmetros, do dimensionamento rigoroso das posições e da suspensão oportuna das perdas.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos principais:

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

Teste diferentes combinações de comprimento ou multiplicador para encontrar a combinação de parâmetros que produz o maior retorno com base no backtest.

  1. Adicionar filtragem com outros indicadores

Teste que incorpore RSI, KDJ e outros indicadores para filtrar os sinais e melhorar a rentabilidade.

  1. Ajuste dinâmico dos parâmetros

Adaptar os parâmetros de forma dinâmica com base nas condições do mercado, tais como alargar adequadamente a gama de canais quando a tendência for forte ou restringir a gama quando o mercado estiver mais limitado à gama.

Resumo

Em resumo, esta é uma estratégia geral de tendência robusta. Combinando a determinação da tendência do canal de preços e a filtragem MACD, ele pode identificar efetivamente tendências de médio e longo prazo e gerar retornos constantes. Com otimização de parâmetros, gerenciamento de risco e ajustes apropriados, essa estratégia pode se tornar parte integrante de um sistema de negociação.


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




Mais.