Autora:ChaoZhang, Data: 2024-01-23 11:22:02
Tags:

img

Resumo

Esta estratégia é uma estratégia de negociação automatizada baseada no cruzamento duplo da média móvel do indicador técnico MACD.

Estratégia lógica

A estratégia primeiro calcula as três linhas do indicador MACD: linha rápida, linha lenta e histograma. A linha rápida é uma média móvel mais rápida em um período mais curto, enquanto a linha lenta é uma média móvel mais lenta em um período mais longo. O histograma é a diferença entre as linhas rápidas e lentas. Quando a linha rápida cruza acima da linha lenta, é um sinal de cruz dourada indicando um sinal de compra. Quando a linha rápida cruza abaixo da linha lenta, é um sinal de cruz de morte indicando um sinal de venda.

A estratégia utiliza esta lógica para ir longo em cruzes de ouro e posição próxima em cruzes de morte; ou ir curto em cruzes de morte e posição próxima em cruzes de ouro para seguir automaticamente a tendência.

Vantagens da estratégia

  • Utiliza cruzamento de média móvel dupla para determinar a direção da tendência com precisão e capturar a inversão da tendência
  • O indicador técnico MACD reduz os falsos sinais e melhora a qualidade do sinal
  • Flexibilidade para optar por longos ou curtos ou apenas por longos/cortos
  • Os parâmetros ajustáveis satisfazem os diferentes ambientes de mercado

Riscos da Estratégia

  • O cruzamento de médias móveis duplas tem efeito de atraso, pode perder lucros parciais no início das reversões
  • Indicador MACD propenso a sinais falsos durante a consolidação do mercado
  • Os parâmetros precisam de um ajustamento adequado para evitar a sensibilidade excessiva ou inerte

Mitigação de riscos:

  • Combinar com outros indicadores para filtrar sinais
  • Ajustar os parâmetros para uma frequência de negociação mais baixa
  • Adotar a estratégia apenas quando a tendência for óbvia

Áreas de melhoria

A estratégia pode ser reforçada pelos seguintes aspectos:

  1. Incorporar outros indicadores como KDJ, Bandas de Bollinger etc. para confirmar sinais e filtrar falsos sinais

  2. Melhorar o mecanismo de entrada, por exemplo, adicionar um filtro de fuga para evitar entradas prematuras ou tardias

  3. Otimizar as configurações dos parâmetros, ajustar os períodos de linha rápida e lenta com base em diferentes prazos e regimes de mercado

  4. Adicionar stop loss para controlar a perda de uma única transação

  5. Expandir para outros produtos como forex, criptomoedas etc

Resumo

A estratégia de seguimento de tendência MACD de dupla média móvel utiliza o indicador MACD para determinar a direção da tendência combinada com cruzamento de linhas de sinal para filtrar efetivamente os sinais e capturar inversões de tendência para acompanhamento automatizado da tendência. As vantagens estão em julgamento preciso da tendência, ajuste flexível de parâmetros atendendo aos ambientes de mercado. A gestão de risco é importante para evitar falsos sinais.


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 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/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : 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) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")


Mais.