Estratégia de negociação quantitativa baseada em média móvel e indicadores MACD


Data de criação: 2023-11-15 15:58:19 última modificação: 2023-11-15 15:58:19
cópia: 1 Cliques: 846
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa baseada em média móvel e indicadores MACD

Visão geral

A estratégia combina a linha média e o MACD para determinar a tendência e emitir sinais de negociação, e é uma estratégia típica de acompanhamento de tendências. Ela usa a linha média ZLSMA de dois períodos diferentes para determinar a direção da tendência, e combina a linha de cruzamento de MACD para emitir sinais de compra e venda específicos, para capturar efetivamente as tendências de linha média e longa e evitar ser enganado pelo ruído do mercado de curto prazo.

Princípio da estratégia

A estratégia é composta por:

  1. A média ZLSMA rápida e a média ZLSMA lenta: Comparando a média ZLSMA de diferentes períodos, determine a direção da tendência geral. A linha rápida é composta por 32 ZLSMA de períodos e a linha lenta por 400 ZLSMA de períodos.

  2. Indicador MACD: a linha rápida ((EMA de 12 dias) menos a linha lenta ((EMA de 26 dias) dá o MACD de diferença de desvio, e a linha de sinal recebe o EMA de 9 dias. Quando o MACD atravessa a linha de sinal, é um sinal de compra e o sinal de venda é um sinal de venda.

  3. Sinais de negociação: apenas quando a forma ZLSMA e o sinal MACD estão em sincronia, é emitido um sinal de compra ou venda. Ou seja, a tendência de cabeça mais a forquilha do ouro MACD é comprada e a tendência de cabeça vazia é vendida quando a forquilha do MACD está morta.

  4. Stop Loss Stop: Esta estratégia não foi adicionada à lógica de Stop Loss Stop, e precisa ser melhorada posteriormente.

A combinação acima usa a linha média para avaliar a tendência, a MACD para avaliar o momento de entrada, pode filtrar efetivamente as falsas rupturas e evitar ser enganado pelo ruído do mercado de curto prazo.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Captura de tendências: a direção da tendência pode ser julgada através de diferentes combinações de linhas médias periódicas, e pode ser efetivamente capturada de forma alternada.

  2. Filtração de ruído: A aplicação do indicador MACD pode filtrar o ruído do mercado de curto prazo, evitando ser enganado por oscilações de pequeno alcance.

  3. Parâmetros ajustáveis: o ciclo da linha média e os parâmetros MACD podem ser personalizados e podem ser otimizados para diferentes mercados.

  4. Facilidade de implementação: Os indicadores são indicadores técnicos comuns, a lógica do conjunto é simples e clara, fácil de entender e implementar.

  5. Risco controlado: Uma estratégia de stop loss e stop loss clara permite controlar o risco e a taxa de ganho de cada transação.

Análise de Riscos

A estratégia também apresenta os seguintes riscos:

  1. Falha de julgamento da grande tendência: Se a direção da grande tendência for errada, todas as negociações podem perder.

  2. Optimização de parâmetros inadequada: os parâmetros de linha média e os parâmetros MACD devem ser testados e otimizados em detalhes, caso contrário, o resultado pode ser ruim.

  3. A falta de um mecanismo de stop loss: não há um ponto de stop loss definido e existe um risco de perda excessiva.

  4. Espaço de ganho limitado: Como estratégia de acompanhamento de tendências, o espaço de ganho de cada transação é limitado e é necessário quantificar para obter maiores ganhos.

  5. Frequência de transação excessiva: a configuração inadequada dos parâmetros pode levar a uma frequência de transação excessiva, aumentando os custos de transação e os custos de deslizamento.

Direção de otimização

A estratégia pode ser melhorada em alguns aspectos:

  1. Adesão ao mecanismo de stop loss: estabelecer um ponto de stop loss razoável e controlar rigorosamente a perda máxima de uma única transação.

  2. Parâmetros de otimização: encontrar a melhor combinação de linha média e parâmetros MACD por meio de ressonância e otimização.

  3. Reduzir a frequência de negociação: ajustar os parâmetros para garantir que os sinais de negociação sejam emitidos apenas quando a tendência é mais evidente.

  4. Combinação com outros fatores: outros fatores, como mudanças no volume de transações, podem ser adicionados para confirmar tendências e sinais.

  5. Otimizar o tempo de admissão: otimizar ainda mais a aplicação dos indicadores MACD para melhorar a precisão da admissão.

  6. Multivariedade: Optimização de parâmetros para que a estratégia possa ser amplamente aplicada a diferentes variedades, ampliando o alcance.

Resumir

Em geral, a estratégia capta as tendências de linha média e longa por meio de uma combinação simples e eficaz de indicadores de linha média e MACD, o que pode ser usado como estratégia básica para a negociação quantitativa. No entanto, é necessário otimizar ainda mais os parâmetros, controlar o risco e combinar outros fatores para obter um efeito de negociação mais estável.

Código-fonte da estratégia
/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-10 05:00:00
period: 1m
basePeriod: 1m
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/
// © veryfid

//@version=5
strategy("Stratégie ZLSMA Bruno", shorttitle="Stratégie ZLSMA Bruno", overlay=false)

source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

//res = useCurrentRes ? period : resCustom

fastLength = input(12), 
slowLength=input(26)
signalLength=input(9)

fastMA = ta.ema(source, fastLength)
slowMA = ta.ema(source, slowLength)

macd = fastMA - slowMA
signal = ta.sma(macd, signalLength)
hist = macd - signal

outMacD =  macd
outSignal = signal
outHist =  hist

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

//plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? color.lime : color.red : color.red
//signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
//plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
//plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
//plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and ta.cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=plot.style_circles, linewidth=4, color=macd_color)
hline(0, '0 Line', linestyle=hline.style_solid, linewidth=2, color=color.white)

// Paramètres de la ZLSMA
length = input(32, title="Longueur")
offset = input(0, title="Décalage")
src = input(close, title="Source")
lsma = ta.linreg(src, length, offset)
lsma2 = ta.linreg(lsma, length, offset)
eq = lsma - lsma2
zlsma = lsma + eq

length_slow = input(400, title="Longueur")
offset_slow = input(0, title="Décalage")
lsma_slow = ta.linreg(src, length_slow, offset_slow)
lsma2_slow = ta.linreg(lsma_slow, length_slow, offset_slow)
eq_slow = lsma_slow - lsma2_slow
zlsma_slow = lsma_slow + eq_slow

// Paramètres de la sensibilité
sensitivity = input(0.5, title="Sensibilité")

// Règles de trading
longCondition = zlsma < zlsma_slow and  zlsma_slow < zlsma_slow[1] and zlsma > zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime//ta.crossover(zlsma, close) and ta.crossover(zlsma, zlsma[1]) // Croisement vers le haut
shortCondition = zlsma > zlsma_slow and  zlsma_slow > zlsma_slow[1] and zlsma < zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime   //ta.crossunder(zlsma, close) and ta.crossunder(zlsma, zlsma[1]) // Croisement vers le bas

// Entrée en position
strategy.entry("Achat", strategy.long, when=longCondition)
strategy.entry("Vente", strategy.short, when=shortCondition)
botifySignalZLSMA = longCondition ? 1 : shortCondition ? -1 : 0
plot(botifySignalZLSMA, title='Botify_signal', display=display.none)
// Sortie de position
strategy.close("Achat", when=ta.crossunder(zlsma, close)) // Close the "Achat" position
strategy.close("Vente", when=ta.crossover(zlsma, close)) // Close the "Vente" position


// Tracé de la courbe ZLSMA
plot(zlsma, color=color.yellow, linewidth=3)
plot(zlsma_slow, color=color.red, linewidth=3)