Estratégia de acompanhamento da tendência do MACD de dupla média móvel Golden Cross Dead Cross

Autora:ChaoZhang, Data: 22-12-2023 14:17:34
Tags:

img

Resumo

Esta estratégia julga a tendência do preço através do cálculo da média móvel rápida, média móvel lenta e indicador MACD, e constrói os sinais de negociação de cruz de ouro e cruz morta.

Estratégia lógica

Esta estratégia baseia-se principalmente em três indicadores.

Em primeiro lugar, ele calcula a média móvel rápida e duas médias móveis lentas. Quando o MA rápido ultrapassa os dois MA lentos, um sinal de compra é gerado. Quando o MA rápido ultrapassa os dois MA lentos, um sinal de venda é gerado. Isso julga a relação entre as tendências de curto e longo prazo para realizar a negociação de cruz de ouro e cruz morta.

Em segundo lugar, ele calcula o indicador MACD, incluindo a linha MACD, linha de sinal e histograma. Quando o histograma MACD > 0, é um indicador de alta; quando o histograma MACD < 0, é um indicador de baixa. Isso ajuda a julgar a confiabilidade dos sinais de cruz de ouro e cruz morta.

Por fim, incorpora os mecanismos de take profit, stop loss e trailing stop loss.

Vantagens

As vantagens desta estratégia incluem:

  1. Cruz de ouro, cruz morta combinada com o MACD julgam de forma confiável a tendência dos preços.
  2. Os pontos de stop loss evitam perdas ampliadas.
  3. Trailing stop loss move-se automaticamente para bloquear os lucros continuamente e maximizar os lucros da tendência.
  4. Configurações de parâmetros flexíveis como períodos de média móvel personalizados.

Riscos

Há também alguns riscos:

  1. Os choques de preços podem desencadear pontos de stop loss.
  2. A execução a longo prazo do trailing stop loss requer um acompanhamento contínuo e um ajuste oportuno.
  3. As configurações incorretas dos parâmetros podem conduzir a transações excessivas ou perdidas.

As soluções são:

  1. Estabelecer pontos de stop loss adequados para evitar stop loss desnecessários.
  2. Verificar e otimizar regularmente as definições dos parâmetros.
  3. Intervenção manual e controlo do estado.

Orientações de otimização

A estratégia pode também ser otimizada a partir dos seguintes aspectos:

  1. Adicione mais indicadores como o RSI para tornar os sinais mais confiáveis.
  2. Otimizar os parâmetros da média móvel para os diferentes instrumentos de negociação.
  3. Adicione algoritmos de parada de trailers dinâmicos para fazer com que os pontos de parada mudem com o mercado.
  4. Adicionar módulos de dimensionamento de posições e gestão de riscos.

Resumo

Em resumo, esta é uma estratégia simples, mas eficaz, que usa a cruz de ouro, cruz morta e MACD para julgar a tendência e realizar o stop loss. As vantagens são o rastreamento da tendência e o bloqueio de lucros com alta personalização. É uma estratégia de otimização de parâmetros universal adequada para diferentes instrumentos de negociação. Ainda há alguns riscos e espaço de otimização, mas em geral é uma estratégia de negociação confiável e prática.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy('The Puria Method', shorttitle = 'Puria',overlay = true)

//=== GENERAL INPUTS ===

// short ma
maFastSource   = input(defval = close, title = "Fast MA Source")
maFastLength   = input(defval = 5, title = "Fast MA Period", minval = 1)

// long ma 1
maSlow1Source   = input(defval = low, title = "Slow MA1 Source")
maSlow1Length   = input(defval = 85, title = "Slow MA Period", minval = 1)

// long ma 2
maSlow2Source   = input(defval = low, title = "Slow MA2 Source")
maSlow2Length   = input(defval = 75, title = "Slow MA Period", minval = 1)

//macd
macdFastLength   = input(defval = 12, title = "Fast MACD Period", minval = 1)
macdSlowLength   = input(defval = 26, title = "Slow MACD Period", minval = 1)
macdSmaLength   = input(defval = 9, title = "SMA MACD Period", minval = 1)

// the risk management inputs
inpTakeProfit   = input(defval = 30, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 10, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 5, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
maFast = ema(maFastSource, maFastLength)
maSlow1 = wma(maSlow1Source, maSlow1Length)
maSlow2 = wma(maSlow2Source, maSlow2Length)
[_, signal, histLine] = macd(close, macdFastLength, macdSlowLength, macdSmaLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow1 = plot(maSlow1, title = "Slow MA1", color = red, linewidth = 2, style = line, transp = 50)
slow2 = plot(maSlow2, title = "Slow MA2", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
signalUp = crossover(maFast, maSlow1) and crossover(maFast, maSlow2) and histLine > 0
signalDown = crossunder(maFast, maSlow1) and crossunder(maFast, maSlow2) and histLine < 0

// ===STRATEGY===
strategy.entry(id = "Long", long = true, when = signalUp) 
strategy.entry(id = "Short", long = false, when = signalDown)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

Mais.