Tendência Seguindo a Estratégia com MACD e Canal Donchian

Autora:ChaoZhang, Data: 2023-11-15 11:37:37
Tags:

img

Resumo

Esta estratégia combina o indicador do Canal de Donchian e o indicador MACD para determinar a tendência. Ele pertence a uma estratégia típica de tendência. Ele vai longo quando o preço quebra a faixa superior e o MACD mostra cruz de ouro, e vai curto quando o preço quebra a faixa inferior e o MACD mostra cruz de morte. O indicador ATR é usado para calcular o stop loss.

Estratégia lógica

  1. Calcular o indicador MACD, incluindo linha rápida, linha lenta e histograma.

  2. Calcule as bandas superior e inferior do Canal de Donchian. A banda superior é o preço mais alto em N dias, a banda inferior é o preço mais baixo em N dias.

  3. Quando o preço quebra a faixa superior, e a linha rápida do MACD cruza acima da linha lenta, vá longo.

  4. Quando o preço quebra a faixa inferior, e a linha rápida do MACD cruza abaixo da linha lenta, vá curto.

  5. Para o cálculo do valor de stop loss para esta estratégia, utilizar o indicador ATR, que é definido como o valor ATR multiplicado por um coeficiente do preço atual.

  6. Feche a posição quando aparecer um sinal de marcha atrás.

Análise das vantagens

Esta estratégia combina indicadores de julgamento de tendência e indicadores de canal, que podem rastrear efetivamente as tendências. O indicador MACD julga a tendência e o impulso dos preços. O canal Donchian julga a direção. O stop loss ATR limita a perda por negócio.

As vantagens são:

  1. A estratégia é simples, com poucos parâmetros, fácil de implementar.

  2. Pode abrir uma posição ao longo da tendência e capturar oportunidades de tendência a tempo.

  3. O ATR controla o risco.

  4. A redução pode ser controlada até certo ponto.

Análise de riscos

Há também alguns riscos:

  1. A configuração incorreta dos parâmetros do canal de Donchian pode causar sinais falsos.

  2. Os parâmetros MACD incorretos podem também levar a sinais atrasados.

  3. Uma configuração de stop loss demasiado ampla pode conduzir a perdas ampliadas.

  4. Uma reversão acentuada do mercado pode levar a grandes perdas.

  5. A estratégia tende a exagerar.

Soluções:

  1. Otimize os parâmetros, selecione os estoques com cuidado.

  2. Stop-loss rigoroso, stop-loss em atraso.

  3. Ajuste o tamanho da posição adequadamente.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros do MACD para melhorar a sensibilidade.

  2. Otimizar o algoritmo de stop loss para aproximá-lo do preço.

  3. Adicionar o mecanismo de dimensionamento de posição de acordo com a força da tendência.

  4. Adicione filtros para evitar sinais falsos.

  5. Adicionar critérios de seleção para os instrumentos de negociação.

  6. Adicionar julgamento do período de negociação.

Resumo

Em resumo, esta é uma estratégia típica de tendência seguinte. Ele combina o Canal Donchian para a direção da tendência e o MACD para a força da tendência. Ele pode seguir a tendência de forma eficaz e controlar o risco. Ao otimizar parâmetros, stop loss, dimensionamento de posição, etc., a estabilidade e lucratividade podem ser melhoradas. A estratégia é adequada para investidores que exigem alta precisão no julgamento da tendência.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
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/
// © Robrecht99

//@version=5
strategy("Trend Following with Donchian Channels and MACD", overlay=false, margin_long=100, margin_short=100, pyramiding=3)

// MACD //
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")

fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
plot(macd, title="MACD", color=col_macd)
plot(signal, title="Signal", color=col_signal)

// Donchian Channels //

Length1 = input.int(title="Length Upper Channel", defval=50, minval=1, group="Donchian Channels Inputs")
Length2 = input.int(title="Length Lower Channel", defval=50, minval=1, group="Donchian Channels Inputs")
h1 = ta.highest(high[1], Length1)
l1 = ta.lowest(low[1], Length2)
fillColor = input.color(color.new(color.purple, 95), title = "Fill Color", group = "Donchian Channels Inputs")
upperColor = input.color(color.new(color.orange, 0), title = " Color Upper Channel", group = "Donchian Channels Inputs", inline = "upper")
lowerColor = input.color(color.new(color.orange, 0), title = " Color Lower Channel", group = "Donchian Channels Inputs", inline = "lower")
u = plot(h1, "Upper", color=upperColor)
l = plot(l1, "Lower", color=upperColor)
fill(u, l, color=fillColor)

//ATR and Position Size //
strategy.initial_capital = 50000
length = input.int(title="ATR Period", defval=14, minval=1, group="ATR Inputs")
risk = input(title="Risk Per Trade", defval=0.01, group="ATR Inputs")
multiplier = input(title="ATR Multiplier", defval=2, group="ATR Inputs")
atr = ta.atr(length)
amount = (risk * strategy.initial_capital / (multiplier * atr))

// Buy and Sell Conditions //

entrycondition1 = ta.crossover(macd, signal)
entrycondition2 = macd > signal
entrycondition3 = macd and signal > hist
sellcondition1 = ta.crossover(signal, macd)
sellcondition2 = signal > macd
sellcondition3 = macd and signal < hist

// Buy and Sell Signals //

if (close > h1 and entrycondition2 and entrycondition3)
    strategy.entry("long", strategy.long, qty=amount)
    stoploss = close - atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (sellcondition1 and sellcondition2 and sellcondition3)
    strategy.close(id="long")

if (close < l1 and sellcondition2 and sellcondition3)
    strategy.entry("short", strategy.short, qty=amount)
    stoploss = close + atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (entrycondition1 and entrycondition2 and entrycondition3)
    strategy.close(id="short")

Mais.