Tendência de seguir uma estratégia baseada na média móvel e no MACD

Autora:ChaoZhang, Data: 2023-11-15 15:58:19
Tags:

img

Resumo

Esta estratégia combina médias móveis e o indicador MACD para determinar tendências e gerar sinais de negociação. Ela pertence a uma estratégia típica de tendência seguinte. Ela usa duas médias móveis ZLSMA de diferentes prazos para determinar a direção da tendência e cruzamento MACD para gerar sinais de compra e venda específicos. Isso permite que ela capture efetivamente as tendências de médio a longo prazo, evitando ser enganada pelo ruído do mercado de curto prazo.

Estratégia lógica

A estratégia consiste nos seguintes componentes principais:

  1. ZLSMA rápido e ZLSMA lento: A comparação das médias móveis ZLSMA de diferentes prazos determina a direção geral da tendência. A linha rápida consiste em ZLSMA de 32 períodos e a linha lenta consiste em ZLSMA de 400 períodos. Quando a linha rápida cruza acima da linha lenta, é um sinal de alta e vice-versa.

  2. Indicador MACD: O MACD é calculado subtraindo a linha lenta (EMA de 26 períodos) da linha rápida (EMA de 12 períodos). A linha de sinal é uma EMA de 9 períodos do MACD. Quando o MACD cruza acima da linha de sinal, é um sinal de compra, e quando o MACD cruza abaixo da linha de sinal, é um sinal de venda.

  3. Sinais de negociação: Os sinais de compra e venda são gerados apenas quando a direção da tendência ZLSMA se alinha com os sinais de cruzamento do MACD. Especificamente, vá longo quando a tendência de alta coincide com a cruz de ouro do MACD e vá curto quando a tendência de baixa coincide com a cruz de morte do MACD.

  4. Stop loss e take profit: A estratégia não inclui atualmente a lógica stop loss e take profit, que precisa de mais otimização.

A combinação da utilização de médias móveis para determinar a tendência principal e do MACD para cronometrar a entrada pode filtrar efetivamente falsas rupturas e evitar ser enganado pelo ruído do mercado a curto prazo.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Captura de tendências: o uso de médias móveis de diferentes prazos para determinar a direção da tendência permite negociar com a tendência e capturar as tendências de médio a longo prazo de forma eficaz.

  2. Filtragem do ruído: a aplicação do indicador MACD ajuda a filtrar o ruído do mercado a curto prazo e a evitar ser enganado por mercados de pequena amplitude.

  3. Parâmetros personalizáveis: os períodos de média móvel e os parâmetros MACD são personalizáveis e podem ser otimizados para diferentes mercados.

  4. Fácil de aplicar: todos os indicadores utilizados são indicadores técnicos comuns.

  5. Risco controlado: com um stop loss e take profit claros, o risco e a recompensa de cada negociação podem ser controlados.

Análise de riscos

Os principais riscos desta estratégia são:

  1. Determinação errada da tendência: se a tendência principal for determinada incorretamente, todas as negociações podem resultar em perdas.

  2. Optimização inadequada dos parâmetros: os parâmetros da média móvel e do MACD devem ser minuciosamente testados e otimizados, caso contrário os resultados podem ser insatisfatórios.

  3. Ausência de stop loss: atualmente não existe nenhum stop loss, o que representa o risco de perdas excessivamente grandes.

  4. Potencial de lucro limitado: como uma estratégia de tendência, o potencial de lucro de cada negócio é limitado, exigindo um volume elevado para aumentar a lucratividade.

  5. Frequência elevada de negociação: um ajustamento inadequado dos parâmetros pode resultar em uma frequência excessiva de negociação, aumentando os custos de transação e o deslizamento.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Adicionar mecanismo de stop loss: definir pontos de stop loss adequados para controlar estritamente a perda máxima por negociação.

  2. Otimizar parâmetros: testar e otimizar para encontrar a combinação ideal de média móvel e parâmetros MACD.

  3. Menor frequência de negociação: ajustar os parâmetros para garantir que os sinais de negociação só são gerados quando a tendência é pronunciada.

  4. Incorporar outros fatores: podem ser adicionados fatores como mudanças de volume para confirmar tendências e sinais.

  5. Melhorar o tempo de entrada: melhorar ainda mais o uso do MACD para aumentar a precisão de entrada.

  6. Tornar universalmente aplicável: Otimizar os parâmetros para tornar a estratégia amplamente aplicável em diferentes produtos, ampliando a aplicabilidade.

Conclusão

Em conclusão, esta estratégia capta efetivamente as tendências de médio a longo prazo através de uma combinação simples, mas eficaz, de médias móveis e MACD, tornando-se uma base sólida de estratégia de negociação quantitativa.


/*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)



Mais.