
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.
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.
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:
A estratégia também apresenta riscos, principalmente em relação a:
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.
A estratégia pode ser melhorada em vários aspectos:
É 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.
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.
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.
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.
/*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)