Estratégia MACD Golden Cross e Death Cross

Autora:ChaoZhang, Data: 2024-04-26 12:08:24
Tags:MACDEMADIFDEA

img

Resumo

Esta estratégia usa o cruzamento da linha DIF e da linha DEA no indicador MACD para gerar sinais de negociação. Quando a linha DIF cruza acima da linha DEA, ela gera um sinal longo; quando a linha DIF cruza abaixo da linha DEA, ela gera um sinal curto. Os resultados de backtesting desta estratégia mostram que no par de negociação BTCUSDT, a taxa de ganho é de cerca de 40%, e o retorno anualizado é de 1,05. No entanto, isso fará com que o número de ativos mantidos aumente continuamente, então não pode ser usado como uma estratégia de arbitragem independente.

Princípio da estratégia

  1. Calcular a média móvel exponencial rápida (EMA) e a média móvel exponencial lenta (EMA).
  2. Calcular a linha DIF, que é a diferença entre a EMA rápida e a EMA lenta.
  3. Calcular a linha DEA, que é a EMA da linha DIF.
  4. Calcular o histograma MACD, que é a diferença entre a linha DIF e a linha DEA.
  5. Quando a linha DIF cruzar acima da linha DEA, gerar um sinal longo e abrir uma posição longa.
  6. Quando a linha DIF cruzar abaixo da linha DEA, gerar um sinal curto, fechar a posição longa e abrir uma posição curta.
  7. Quando o sinal de cruzamento oposto aparecer novamente, fechar a posição atual e abrir uma posição na direção oposta.

Vantagens da estratégia

  1. Esta estratégia utiliza o indicador MACD amplamente utilizado, que é fácil de compreender e implementar.
  2. A lógica da estratégia é clara, e os sinais de negociação são explícitos.
  3. É adequado para mercados de tendências e pode acompanhar as principais tendências do mercado.

Riscos estratégicos

  1. A taxa de ganhos desta estratégia é baixa, apenas 40%, o que significa que 60% dos negócios podem estar perdendo.
  2. Esta estratégia fará com que o número de activos detidos aumente continuamente, o que pode trazer uma exposição adicional ao risco.
  3. Em um mercado flutuante, esta estratégia pode gerar sinais de negociação frequentes, levando a altos custos de negociação.
  4. Esta estratégia não considera a gestão de riscos, como a gestão de stop-loss e de posições, que podem conduzir a perdas significativas.

Orientações para a otimização da estratégia

  1. Introduzir filtros de tendência, tais como médias móveis de longo prazo, para evitar a negociação em mercados flutuantes.
  2. Otimizar os parâmetros do indicador MACD, tais como o período da EMA rápida, EMA lenta e linha de sinal, para se adaptarem às diferentes condições do mercado.
  3. Para efeitos de controlo das perdas potenciais, acrescentar medidas de gestão de risco, tais como stop-loss e gestão de posições.
  4. Combinar com outros indicadores técnicos ou análise fundamental para melhorar a fiabilidade dos sinais de negociação.

Resumo

A estratégia MACD de cruz de ouro e cruz de morte é uma estratégia de negociação simples e fácil de entender que é adequada para mercados de tendências. No entanto, a taxa de vitória desta estratégia é baixa e não possui medidas de gerenciamento de risco, por isso precisa de otimização e melhoria adicionais. Ao introduzir filtros de tendência, otimizar parâmetros, adicionar gerenciamento de risco e combinar com outros métodos de análise, o desempenho e a confiabilidade desta estratégia podem ser melhorados.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// @description 该策略使用 MACD DIF 线与 EDA 线产生金叉与死叉时进行入场与出场操作, 回测后发现胜率约 40%, BTCUSDT 年化利率 1.05, 同时会导致持有的资产数量不断上升, 无法作为一个独立的套利策略进行使用.

strategy("MACD 金叉策略", overlay=true)

fastLength = input(12, "快线长度")
slowLength = input(26, "慢线长度")
MACDLength = input(9, "MACD 均线长度")

deltaIncreaseOver0 = input(color.green,'MACD 柱在 0 线以上增长')
deltaIncreaseUnder0 = input(color.rgb(153, 230, 156),'MACD 柱在 0 线以下增长')

deltaDecreaseOver0 = input(color.orange,'MACD 柱在 0 线以上下跌')
deltaDecreaseUnder0 = input(color.red,'MACD 柱在 0 线以下下跌')

buySellEnabled = input(true, '是否显示入场与出场信号')

// @variable 做多轮数
var longRound = 0
// @variable 做空轮数
var shortRound = 0

DIF = ta.ema(close, fastLength) - ta.ema(close, slowLength) // 快慢均线差值
EDA = ta.ema(DIF, MACDLength) // DIF 线的 EMA 均线
delta = DIF - EDA // MACD 柱高度

// plot(0, 'Zero', color.black)
plot(DIF,'DIF', color.yellow)
plot(EDA, "EDA", color.purple)

isDeltaIncreasing = delta[1] < delta
isDeltaOver0 = delta > 0
deltaColor = isDeltaIncreasing ? (isDeltaOver0? deltaIncreaseOver0: deltaIncreaseUnder0) :( isDeltaOver0? deltaDecreaseOver0: deltaDecreaseUnder0)
plot(delta, "Delta", deltaColor, style = plot.style_columns)

isDeltaV = delta > delta[1] and delta[2] > delta[1]
isDeltaA = delta < delta[1] and delta[2] < delta[1]

longBuy(round) =>
	entry = str.format("做多买入 {0}",round)
	// log.info(str.format("{0} {1}",entry,close))
	strategy.entry(entry, strategy.long, comment=entry)

longSell(round) =>
	entry = str.format("做多买入 {0}",round)
	exit = str.format("做多卖出 {0}",round)
	// log.info(str.format("{0} {1}",exit,close))
	strategy.close(entry, comment=exit)		

shortSell(round) =>
	entry = str.format("做空卖出 {0}",round)
	// log.info(str.format("{0} {1}",entry,close))
	strategy.entry(entry, strategy.short, comment= entry) 

shortBuy(round) =>
	entry = str.format("做空卖出 {0}",round)
	exit = str.format("做空买入 {0}",round)
	// log.info(str.format("{0} {1}",exit,close))
	strategy.close(entry, comment=exit)		

if (buySellEnabled) 
	if (ta.crossunder(DIF, EDA))
		longSell(longRound)
	if (ta.crossover(DIF, EDA))
		longRound := longRound + 1
		longBuy(longRound)

		
		

Relacionados

Mais.