A estratégia MACD Trend Following é uma estratégia quantitativa de negociação baseada no indicador MACD. Esta estratégia identifica sinais de cruz de ouro e cruz de morte do MACD para determinar tendências de mercado e rastrear tendências de preços.
A lógica central da estratégia MACD Trend Following é:
Através deste mecanismo de acompanhamento de tendências, a estratégia pode capturar oportunamente as tendências do mercado e obter lucros.
A estratégia MACD Trend Following tem as seguintes vantagens:
A estratégia MACD Trend Following também apresenta os seguintes riscos:
Para enfrentar os riscos acima referidos, podem ser adoptadas as seguintes medidas de otimização:
A estratégia de seguimento da tendência do MACD pode ser otimizada nos seguintes aspectos:
Otimizar os parâmetros do indicador MACD para reduzir a taxa de sinal falso.
Adicionar outros indicadores como volume de negociação para filtrar sinais.
Configure um mecanismo de stop loss dinâmico e os pontos de stop loss podem ser ajustados dinamicamente com base na volatilidade.
Otimizar a lógica de determinação do sinal para a abertura de posições.
Incorporar modelos de aprendizagem de máquina para filtrar sinais. Os modelos podem ser treinados para julgar a confiabilidade dos sinais.
Em geral, o MACD Trend Following Strategy é uma estratégia quantitativa relativamente madura. Utiliza o indicador MACD para determinar as direções da tendência do mercado e controla os riscos com o mecanismo de stop loss, que pode rastrear efetivamente as tendências de preços.
/*backtest start: 2023-11-10 00:00:00 end: 2023-12-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MACD Cross Strategy", overlay=true) // Get MACD values [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9) var float entryLongPrice = na var float entryShortPrice = na var float highestLongProfit = 0 var float highestShortProfit = 0 var float highestMACD = 0 var float lowestMACD = 0 var bool haveOpenedLong = false var bool haveOpenedShort = false var float stoploss = 0.04 // To be adjust for different investment var float minProfit = 0.05 // To be adjust for different investment if macdLine > 0 lowestMACD := 0 highestMACD := math.max(highestMACD, macdLine) haveOpenedShort := false else highestMACD := 0 lowestMACD := math.min(lowestMACD, macdLine) haveOpenedLong := false // Enter long position when MACD line crosses above the signal line if ta.crossover(macdLine, signalLine) and macdLine < highestMACD and macdLine > 0 and haveOpenedLong == false strategy.entry("Long", strategy.long) strategy.exit("Exit Long", from_entry = "Long", stop=close*(1 - stoploss)) entryLongPrice := close haveOpenedLong := true if ta.crossunder(macdLine, signalLine) and macdLine > lowestMACD and macdLine < 0 and haveOpenedShort == false strategy.entry("Short", strategy.short) strategy.exit("Exit Short", from_entry = "Short", stop=close*(1 + stoploss)) entryShortPrice := close haveOpenedShort := true // log.info("entryLongPrice:{0}", entryLongPrice) if strategy.position_size > 0 profit = close - entryLongPrice log.info("profit:{0}", profit) if profit > 0 highestLongProfit := math.max(highestLongProfit, profit) if profit / entryLongPrice > minProfit and highestLongProfit * 0.8 > profit strategy.close("Long") highestLongProfit := 0 if strategy.position_size < 0 profit = entryShortPrice - close if profit > 0 highestShortProfit := math.max(highestShortProfit, profit) log.info("highestShortProfit={0}, profit={1}", highestShortProfit, profit) if profit / entryShortPrice > minProfit and highestShortProfit * 0.8 > profit strategy.close("Short") highestShortProfit := 0