Estratégia de negociação quantitativa composta baseada no MACD

Autora:ChaoZhang, Data: 2023-12-13 16:44:46
Tags:

img

Resumo

Esta é uma estratégia de negociação quantitativa composta baseada no indicador MACD. Ele combina múltiplos indicadores como MACD e KDJ para gerar sinais de negociação através da combinação de indicadores.

Princípio da estratégia

O indicador central desta estratégia é o MACD. O MACD significa Moving Average Convergence Divergence, que é um indicador de tendência. Ele consiste em uma média móvel rápida (EMA) e uma média móvel lenta (EMA). Os parâmetros padrão são 12 para a linha rápida e 26 para a linha lenta. A estratégia calcula a diferença entre as duas linhas EMA, chamada DIF. Em seguida, uma EMA de 9 dias é calculada no DIF para obter o indicador DEA. Quando o DIF cruza acima do DEA, um sinal de compra é gerado. Quando cruza abaixo, um sinal de venda é gerado.

A estratégia também incorpora o indicador KDJ. O indicador KDJ inclui o valor K, o valor D e o valor J. Entre eles, o valor K refere-se ao valor aleatório, o valor D é a média móvel do valor K e o valor J refere-se ao valor determinístico. O indicador KDJ reflete os níveis de sobrecompra e sobrevenda no mercado. Quando o valor J é maior que 100, representa condições de sobrecompra. Quando menor que 10, representa condições de sobrevenda. A estratégia combina o indicador KDJ para evitar gerar sinais errados em pontos de virada do mercado.

Vantagens da estratégia

A estratégia combina múltiplos indicadores, como MACD e KDJ, que podem efetivamente filtrar o ruído do mercado e identificar direções de tendência. O indicador MACD pode capturar mudanças de preço de curto prazo em tempo hábil, enquanto o indicador KDJ pode confirmar tendências de médio e longo prazo. A combinação dos dois pode equilibrar a busca de agilidade e estabilidade.

Além disso, a estratégia incorpora um selector de intervalos de tempo, o que proporciona uma maior flexibilidade na avaliação do desempenho da estratégia.

Riscos e soluções

  • Quando o mercado flutua por um período prolongado, o MACD terá vários sinais falsos. Neste ponto, podemos ajustar adequadamente os parâmetros das linhas EMA para filtrar algum ruído.

  • Podemos testar vários grupos de parâmetros e selecionar uma combinação de parâmetros mais estável.

  • A selecção inadequada do prazo de backtest irá sobreestimar ou subestimar a rentabilidade da estratégia.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Quando o preço desencadear a linha de stop loss, ele forçará uma saída da posição para fins de stop loss.

  2. Incorporar mais filtros de indicadores, combinando indicadores como RSI e Bandas de Bollinger para melhorar a precisão do sinal.

  3. Otimizar os parâmetros do indicador.

  4. Usar técnicas de aprendizagem de máquina para otimizar automaticamente. Usar redes neurais para treinamento de parâmetros e otimização.

Conclusão

Esta é uma estratégia quantitativa típica que segue principalmente a tendência, complementada por controle de sobrecompra e sobrevenda. Combina as vantagens de vários indicadores e equilibra efetivamente a estabilidade e sensibilidade. Através de otimização e ajuste contínuos, a aplicabilidade da estratégia pode ser expandida para obter lucros constantes a longo prazo.


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="New Renaissance", shorttitle="New Renaissance", overlay=true,initial_capital=10000)

source = close

fastlength=input(12, minval=1)
slowlength=input(26,minval=1)
signallength=input(9,minval=1)

// === Defining the MACD oscillator
fastMA=ema(source,fastlength)
slowMA=ema(source,slowlength)
MACD=fastMA-slowMA
signal=sma(MACD,signallength)
delta=MACD-signal

// === Buy and Sell Signals ===
buy=crossover(MACD, signal)
sell=crossunder(MACD, signal)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2018, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2020, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                   // exit long when "within window of time" AND crossunder      

Mais.