Este é um sistema clássico de seguimento de tendências. Ele usa cruzamento de média móvel para determinar a direção da tendência e entra quando o preço sai dos canais de Donchian. O parâmetro do canal de Donchian é definido em 50 dias para filtrar o ruído do mercado de curto prazo. As médias móveis são médias móveis exponenciais de 40 dias e 120 dias, que podem capturar melhor as tendências de médio a longo prazo.
A estratégia baseia-se principalmente nos seguintes pontos:
As médias móveis exponenciais de 40 dias e 120 dias são usadas para construir um indicador de determinação de tendência. Quando a linha rápida atravessa acima da linha lenta de baixo, é um sinal de cruz dourada, indicando uma tendência de alta. Quando a linha rápida atravessa abaixo da linha lenta de cima, é um sinal de cruz de morte, indicando uma tendência de queda.
O parâmetro do canal de Donchian é definido em 50 dias para filtrar o ruído do mercado.
O stop loss é definido em 4x ATR abaixo do preço. ATR pode medir efetivamente a volatilidade e o risco do mercado.
As médias móveis exponenciais se encaixam melhor nas tendências de preços atuais, enquanto as médias móveis simples são muito suaves.
O período de canal de 50 dias funciona bem com as médias móveis de 40 dias e 120 dias para filtrar efetivamente falhas.
As vantagens desta estratégia incluem:
A combinação de médias móveis pode determinar efetivamente a direção da tendência do mercado.
O canal de Donchian filtra o ruído e evita perseguir os topos e os fundos.
A definição de stop loss é razoável para controlar as perdas em transações individuais e evitar explosões de contas.
As médias móveis exponenciais se encaixam melhor nas tendências de mudança de preços, permitindo períodos de detenção mais longos que se encaixam na ideia de negociação de tendência.
Os parâmetros da média móvel encontram um equilíbrio entre a sensibilidade de captura da tendência e a estabilidade do filtro de ruído.
Os riscos desta estratégia incluem:
Risco de longo período de detenção: como uma estratégia de tendência, podem ocorrer grandes perdas durante intervalos laterais prolongados ou reversões de tendência.
Risco de Falsa Breakout: Pode haver alguma porcentagem de Falsa Breakouts quando o preço toca perto das bandas do canal, causando negociações desnecessárias.
Parâmetros que definem o risco: as definições das médias móveis e dos canais são subjetivas.
Risco de stop loss demasiado apertado: definir o stop loss demasiado apertado pode resultar em demasiados stop outs, o que afeta a rentabilidade.
Soluções:
A estratégia pode ser otimizada nos seguintes aspectos:
Teste diferentes combinações de médias móveis para encontrar os parâmetros ideais.
Otimizar o período e as configurações do canal para tornar os sinais de ruptura mais eficazes.
Otimizar a estratégia de stop loss. Adotar trailing stops durante os períodos de tendência e paradas fixas após o fim da tendência.
Adicionar indicadores de confirmação como MACD, KD para melhorar a precisão do sinal.
Introduzir estratégias de dimensionamento de posições, pirâmide durante períodos de tendência para otimizar os lucros.
Selecionar combinações de parâmetros de acordo com diferentes características do produto para tornar o sistema mais robusto.
Em geral, este é um sistema típico e simples de tendência. O núcleo está no uso de médias móveis e breakouts de canal. A estratégia de stop loss também é clássica e prática. A estratégia pode funcionar como uma estrutura básica para o desenvolvimento de sistemas quant, e também pode ser diretamente implantada para lucros relativamente estáveis. Uma otimização adicional através de testes pode melhorar a estabilidade e lucratividade do sistema. Em resumo, a estratégia apresenta facilidade de uso e versatilidade, tornando-a adequada como uma estratégia de negociação quantitativa fundamental.
/*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("Long Term Trend Following System", overlay=true, margin_long=0, margin_short=0, pyramiding=4) // Backtest Range // Start = input(defval = timestamp("01 Jan 2017 00:00 +0000"), title = "Backtest Start Date", group = "backtest window") Finish = input(defval = timestamp("01 Jan 2100 00:00 +0000"), title = "Backtest End Date", group = "backtest window") //Moving Averages // len1 = input.int(40, minval=1, title="Length Fast EMA", group="Moving Average Inputs") len2 = input.int(120, minval=1, title="Length Slow EMA", group="Moving Average Inputs") src1 = input(close, title="Source Fast MA") src2 = input(close, title="Source Slow MA") maFast = input.color(color.new(color.red, 0), title = "Color Fast EMA", group = "Moving Average Inputs", inline = "maFast") maSlow = input.color(color.new(color.blue, 0), title = "Color Slow EMA", group = "Moving Average Inputs", inline = "maSlow") fast = ta.ema(src1, len1) slow = ta.ema(src2, len2) plot(fast, color=maFast, title="Fast EMA") plot(slow, color=maSlow, title="Slow EMA") // 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) strategy.initial_capital = 50000 //ATR and Position Size // 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(fast, slow) entrycondition2 = fast > slow sellcondition1 = ta.crossunder(fast, slow) sellcondition2 = slow > fast // Buy and Sell Signals // if (close > h1 and entrycondition2) strategy.entry("long", strategy.long, qty=amount) stoploss = close - atr * 4 strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss) if (sellcondition1 and sellcondition2) strategy.close(id="long") if (close < l1 and sellcondition2) strategy.entry("short", strategy.short, qty=amount) stoploss = close + atr * 4 strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss) if (entrycondition1 and entrycondition2) strategy.close(id="short")