
La estrategia de seguimiento de la tendencia del MACD es una estrategia de negociación cuantitativa basada en el indicador MACD. La estrategia determina la tendencia del mercado mediante la identificación de las señales de la horquilla dorada y la horquilla muerta del indicador MACD, lo que permite seguir la tendencia del precio de las acciones.
La lógica central de la estrategia de seguimiento de tendencias del MACD es:
Con este mecanismo de seguimiento de tendencias, la estrategia puede capturar el cambio de tendencia en el mercado a tiempo y generar ganancias.
La estrategia de seguimiento de tendencias en el MACD tiene las siguientes ventajas:
Los riesgos de seguir una tendencia en el MACD son:
En relación con los riesgos mencionados, se pueden tomar las siguientes medidas de optimización:
Las estrategias de seguimiento de tendencias del MACD se pueden optimizar en los siguientes aspectos:
Optimización de los parámetros del indicador MACD, reduciendo la tasa de falsedad de señales. Se puede probar MACD con diferentes parámetros de ciclo.
Para aumentar el volumen de transacciones, se puede configurar la condición de volumen de transacciones mínimo.
Configuración de un mecanismo de seguimiento de pérdidas dinámicas. El punto de parada se puede ajustar en tiempo real según la fluctuación.
Optimización de la lógica de determinación de señales para abrir posiciones. Se pueden establecer condiciones de activación de señales más estrictas.
En combinación con un modelo de aprendizaje automático para filtrar señales. Se puede entrenar a los modelos para juzgar la fiabilidad de las señales.
La estrategia de seguimiento de tendencias del MACD es una estrategia cuantitativa más madura en general. La estrategia utiliza el indicador MACD para determinar la dirección de la tendencia del mercado, junto con el riesgo de control del mecanismo de pérdida, para poder seguir eficazmente la tendencia de los precios de las acciones. Pero el indicador MACD en sí mismo también tiene ciertos defectos y es propenso a generar señales falsas.
/*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