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.
Calcular o indicador MACD, incluindo linha rápida, linha lenta e histograma.
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.
Quando o preço quebra a faixa superior, e a linha rápida do MACD cruza acima da linha lenta, vá longo.
Quando o preço quebra a faixa inferior, e a linha rápida do MACD cruza abaixo da linha lenta, vá curto.
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.
Feche a posição quando aparecer um sinal de marcha atrás.
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:
A estratégia é simples, com poucos parâmetros, fácil de implementar.
Pode abrir uma posição ao longo da tendência e capturar oportunidades de tendência a tempo.
O ATR controla o risco.
A redução pode ser controlada até certo ponto.
Há também alguns riscos:
A configuração incorreta dos parâmetros do canal de Donchian pode causar sinais falsos.
Os parâmetros MACD incorretos podem também levar a sinais atrasados.
Uma configuração de stop loss demasiado ampla pode conduzir a perdas ampliadas.
Uma reversão acentuada do mercado pode levar a grandes perdas.
A estratégia tende a exagerar.
Soluções:
Otimize os parâmetros, selecione os estoques com cuidado.
Stop-loss rigoroso, stop-loss em atraso.
Ajuste o tamanho da posição adequadamente.
A estratégia pode ser otimizada nos seguintes aspectos:
Otimizar os parâmetros do MACD para melhorar a sensibilidade.
Otimizar o algoritmo de stop loss para aproximá-lo do preço.
Adicionar o mecanismo de dimensionamento de posição de acordo com a força da tendência.
Adicione filtros para evitar sinais falsos.
Adicionar critérios de seleção para os instrumentos de negociação.
Adicionar julgamento do período de negociação.
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")