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


Data de criação: 2023-12-13 16:44:46 última modificação: 2023-12-13 16:44:46
cópia: 0 Cliques: 921
1
focar em
1621
Seguidores

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

Visão geral

A estratégia é uma estratégia de negociação quantitativa composta, baseada em indicadores MACD. Ela usa um conjunto de indicadores MACD, KDJ, etc. para gerar um sinal de negociação através de uma combinação entre os indicadores.

Princípio da estratégia

O indicador central da estratégia é o MACD. O MACD representa a média móvel do índice, um indicador de acompanhamento de tendências. É composto por uma média móvel rápida (EMA) e uma média móvel lenta (EMA). O parâmetro padrão da linha rápida é 12, o parâmetro padrão da linha lenta é 26. A estratégia calcula o diferencial entre as duas linhas de EMA, ou seja, DIF.

A estratégia também introduziu o indicador KDJ. O indicador KDJ inclui os valores K, D e J. O K é um valor aleatório, o D é uma média móvel do valor K e o J é um valor de determinação. O indicador KDJ reflete o estado de sobrecompra e sobrevenda do mercado.

Vantagens estratégicas

A estratégia usa vários indicadores, como MACD e KDJ, para filtrar efetivamente o ruído do mercado e identificar a direção da tendência. O indicador MACD pode capturar mudanças de preços a curto prazo e o indicador KDJ pode confirmar tendências de médio e longo prazo. A combinação dos dois pode equilibrar a relação entre a busca de agilidade e estabilidade.

Além disso, a estratégia adicionou um selector de tempo, que permite escolher o intervalo de tempo para o retorno. Isso oferece maior flexibilidade para avaliar o desempenho da estratégia.

Riscos estratégicos e soluções

  • Quando o mercado está em um período de agitação prolongada, o MACD irá apresentar vários falsos sinais. Nesse caso, os parâmetros da linha EMA podem ser adequadamente ajustados, filtrando parte do ruído.

  • A configuração inadequada dos parâmetros do indicador KDJ também pode afetar os resultados. Pode-se testar vários conjuntos de parâmetros, escolhendo uma combinação de parâmetros mais estável.

  • A escolha de um tempo de retorno incorreto pode sobreestimar ou subestimar o rendimento da estratégia. Deve-se escolher um período de tempo representativo para o teste.

Direção de otimização

A estratégia pode ser otimizada em:

  1. Aumentar o mecanismo de stop loss. Forçar a parada de liquidação quando o preço atinge a linha de stop loss.

  2. Adicionar mais filtros de indicadores. Combinado com outros indicadores, como RSI, Brinks e outros, pode melhorar a precisão do sinal.

  3. Optimizar os parâmetros do indicador. Alterar a combinação dos parâmetros EMA e KDJ para encontrar o melhor parâmetro.

  4. Otimização automática usando tecnologia de aprendizagem de máquina. Treinamento e otimização de parâmetros estratégicos usando redes neurais.

Resumir

A estratégia é uma estratégia quantitativa típica de acompanhamento de tendências, auxiliada pelo controle de supercompra e supervenda. Combina os benefícios de vários indicadores para equilibrar efetivamente a estabilidade e a sensibilidade.

Código-fonte da estratégia
/*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