
La estrategia de captura de señales de tendencia MACD doble y la estrategia de filtrado de la cuantificación es una estrategia de comercio cuantitativa basada en el indicador de dispersión de la media móvil (MACD) en dos marcos de tiempo diferentes. La estrategia capta oportunidades de comercio en el mercado mediante la combinación de señales de tendencia a corto y largo plazo, filtra eficazmente el ruido del mercado y mejora la precisión de las señales de comercio. La estrategia se implementa en la plataforma TradingView, es independiente de la superposición de gráficos de precios y se aplica a una variedad de mercados financieros, que incluyen acciones, futuros y divisas.
El núcleo de la estrategia consiste en utilizar dos indicadores MACD: MACD1 (en el corto plazo) y MACD2 (en el largo plazo). El MACD1 tiene una longitud rápida predeterminada de 34, una longitud lenta de 144, y una señal de deslizamiento de 9, para detectar cambios en las tendencias a corto plazo; el MACD2 tiene una longitud rápida predeterminada de 100, una longitud lenta de 200, y una señal de deslizamiento de 50, para evaluar la dirección de las tendencias a largo plazo.
El principio central de la estrategia de doble MACD es identificar tendencias en el mercado y generar señales de negociación a través de indicadores MACD en dos marcos de tiempo diferentes. El código de la estrategia primero calcula los dos indicadores MACD y sus parámetros relacionados:
MACD1 (indicador a corto plazo):
MACD2 (indicador a largo plazo):
La lógica de las transacciones es clara y rigurosa:
Hay varias condiciones:
Condiciones para el vacío:
La estrategia también incluye medidas de gestión de riesgos, configuración de parámetros de stop loss y stop loss ajustables, con stop loss por defecto del 1% (mínimo 0.1%) y stop loss del 1.5% (mínimo 0.1%), basado en el cálculo de la dinámica de los precios de entrada. Las operaciones se procesan al cierre de la línea K para garantizar la estabilidad de la señal.
La estrategia dual MACD muestra ventajas en varios aspectos a través de un análisis profundo del código:
Mecanismo de confirmación de doble tendencia: mediante la combinación de MACD a corto plazo y MACD a largo plazo, la estrategia puede filtrar eficazmente el ruido del mercado, reducir las señales falsas y mejorar la precisión de las operaciones. La estrategia solo generará señales de negociación cuando las señales a corto plazo y a largo plazo coinciden.
Configuración de parámetros flexible: las políticas permiten al usuario personalizar los parámetros MACD (longitud rápida, longitud lenta y suavidad de la señal) y los métodos de cálculo (SMA o EMA), lo que permite que las políticas se adapten a diferentes entornos de mercado y preferencias de los usuarios.
Intuitiva retroalimentación visual: la estrategia muestra la intensidad de la tendencia de forma intuitiva a través de cambios dinámicos en el color (la tendencia ascendente es de color verde oscuro, la tendencia descendente es de color rojo oscuro) para ayudar a los operadores a comprender mejor la situación del mercado.
Una buena gestión de riesgos: Parámetros de stop loss y stop-loss ajustables incorporados, que protegen la seguridad de los fondos y bloquean las ganancias. Estos parámetros se pueden ajustar según la volatilidad del mercado y la capacidad de asumir el riesgo personal.
Función de alerta en tiempo real: La estrategia proporciona alertas de entrada de señales de sobreventa y baja para facilitar la supervisión y automatización de las operaciones en tiempo real, lo que permite a los operadores aprovechar las oportunidades de mercado a tiempo.
Amplia aplicabilidad: Las estrategias se aplican a una variedad de mercados financieros, incluidos acciones, futuros y divisas, lo que las convierte en herramientas prácticas para múltiples escenarios de negociación.
A pesar de que la estrategia de doble MACD está bien diseñada, existen algunos riesgos potenciales:
Riesgo de reversión de la tendencia: en un mercado muy volátil, la tendencia puede revertirse rápidamente, lo que lleva a la pérdida de la estrategia. Incluso con la configuración de stop loss, en condiciones extremas de mercado, el precio de parada real puede deslizarse gravemente.
Sensibilidad a los parámetros: la estrategia depende en gran medida de la configuración de los parámetros MACD. Los parámetros inadecuados pueden causar demasiadas señales falsas o perder oportunidades de negociación importantes. Los usuarios deben optimizar cuidadosamente los parámetros según el mercado y el marco de tiempo específicos.
Problemas de atraso: El MACD es esencialmente un indicador de atraso, calculado sobre la base de datos históricos de precios. En un mercado de cambios rápidos, la señal puede llegar demasiado tarde, perder el punto de entrada óptimo o causar pérdidas innecesarias.
Mal desempeño en los mercados horizontales: la estrategia funciona mejor en mercados de fuerte tendencia, pero puede generar falsas señales frecuentes en mercados horizontales ordenados o sin dirección, lo que genera pequeñas pérdidas en serie.
Riesgo de gestión de fondos: El uso del 100% de los fondos de la cuenta para operar por defecto puede conducir a un exceso de apalancamiento y mala gestión de fondos. Los operadores deben considerar reducir la proporción de fondos por transacción para administrar mejor el riesgo.
Para reducir estos riesgos, los comerciantes deben considerar: la verificación cruzada en combinación con otros indicadores técnicos; la retroalimentación periódica y la optimización de los parámetros de la estrategia; ajustar la asignación de fondos según las condiciones del mercado; intervenciones manuales en condiciones extremas del mercado; y establecer una razonable relación riesgo/retorno.
A través de un análisis profundo del código, las siguientes son posibles direcciones de optimización:
Aumentar las condiciones de filtración: Se pueden agregar indicadores técnicos adicionales (como el índice de fuerza relativa RSI o las bandas de Brin) como filtros para reducir las señales falsas. Por ejemplo, solo se puede operar cuando el RSI indica que el mercado no está sobrecomprado / sobrevendido.
Parámetros de autoadaptación: Realizar un ajuste de autoadaptación de los parámetros MACD, que se ajustan automáticamente según la volatilidad del mercado. En mercados de alta volatilidad, se puede aumentar la longitud de la velocidad rápida y lenta para reducir el ruido; en mercados de baja volatilidad, se puede reducir el parámetro para aumentar la sensibilidad.
Mejorar las estrategias de stop loss: lograr un stop loss dinámico basado en la volatilidad, como un stop loss basado en el ATR (la media de la amplitud de fluctuación real) en lugar de un porcentaje fijo. Esto hará que el stop loss sea más adecuado para las condiciones actuales del mercado.
Añadir un mecanismo de liquidación parcial: permite la liquidación parcial cuando se alcanza un objetivo de ganancias específico, bloqueando una parte de las ganancias y permitiendo que las posiciones restantes sigan siendo rentables.
Filtrado de horas de negociación: Añade un filtro de horas de negociación para evitar el comercio en momentos de alta volatilidad o baja liquidez, como el cierre y cierre del mercado.
Optimización de la gestión de fondos: Implementa la gestión de fondos basada en los criterios de Kelly o en un modelo de riesgo de proporción fija, ajustando el tamaño de la posición de forma dinámica en función de la probabilidad de ganancia y el riesgo/retorno.
Combinar varios períodos de tiempo: Además de los dos MACD actuales, considere agregar un tercer MACD más largo para proporcionar una perspectiva más completa del mercado.
Clasificación de estados de mercado: agregar una lógica de clasificación de estados de mercado (por ejemplo, mercado de tendencia vs mercado horizontal) y ajustar las estrategias y parámetros de negociación según los diferentes estados de mercado.
Estas optimizaciones pueden mejorar la solidez y la adaptabilidad de las estrategias, permitiendo que se mantengan en buen estado en diferentes condiciones de mercado.
La estrategia de captura de señales de tendencia MACD doble y la estrategia de cuantificación de filtros crean un sistema de seguimiento de tendencias potente mediante la combinación ingeniosa de indicadores MACD a corto y largo plazo. La ventaja central de la estrategia reside en su estricto mecanismo de doble confirmación, que reduce eficazmente las señales falsas y mejora la precisión de las operaciones.
A pesar de la existencia de riesgos tales como el cambio de tendencia, la sensibilidad de los parámetros y el mal desempeño del mercado de la bolsa, estos riesgos pueden ser controlados de manera efectiva mediante medidas de gestión de riesgos y estrategias de optimización adecuadas. La dirección de optimización futura puede incluir la adición de condiciones de filtración adicionales, la realización de parámetros de adaptación, la mejora de las estrategias de detención de pérdidas y la optimización de la gestión de fondos.
En general, la estrategia doble MACD ofrece un marco sólido para los comerciantes de cuantificación, especialmente para los comerciantes de tendencias a corto y medio plazo. Al combinar las herramientas clásicas de análisis técnico con reglas de negociación flexibles, la estrategia ofrece un sistema de negociación sólido para los comerciantes que buscan rendimientos consistentes.
/*backtest
start: 2024-03-25 00:00:00
end: 2025-03-24 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy(title="Dual MACD Strategy [Jason Kasei]", shorttitle="DualMACD", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, process_orders_on_close=true, initial_capital=10000)
// --- 输入参数 ---
// MACD1 参数
macd1_fast_length = input.int(title="MACD1 Fast Length", defval=34)
macd1_slow_length = input.int(title="MACD1 Slow Length", defval=144)
macd1_signal_length = input.int(title="MACD1 Signal Smoothing", minval=1, maxval=50, defval=9)
macd1_sma_source = input.string(title="MACD1 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd1_sma_signal = input.string(title="MACD1 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// MACD2 参数
macd2_fast_length = input.int(title="MACD2 Fast Length", defval=100)
macd2_slow_length = input.int(title="MACD2 Slow Length", defval=200)
macd2_signal_length = input.int(title="MACD2 Signal Smoothing", minval=1, maxval=50, defval=50)
macd2_sma_source = input.string(title="MACD2 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd2_sma_signal = input.string(title="MACD2 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// 止损止盈参数
stop_loss_pct = input.float(title="Stop Loss %", defval=1.0, minval=0.1, step=0.1)
take_profit_pct = input.float(title="Take Profit %", defval=1.5, minval=0.1, step=0.1)
// --- 计算 MACD1 ---
src = close
macd1_fast_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_fast_length) : ta.ema(src, macd1_fast_length)
macd1_slow_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_slow_length) : ta.ema(src, macd1_slow_length)
macd1 = macd1_fast_ma - macd1_slow_ma
macd1_signal = macd1_sma_signal == "SMA" ? ta.sma(macd1, macd1_signal_length) : ta.ema(macd1, macd1_signal_length)
macd1_hist = macd1 - macd1_signal
// --- 计算 MACD2 ---
macd2_fast_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_fast_length) : ta.ema(src, macd2_fast_length)
macd2_slow_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_slow_length) : ta.ema(src, macd2_slow_length)
macd2 = macd2_fast_ma - macd2_slow_ma
macd2_signal = macd2_sma_signal == "SMA" ? ta.sma(macd2, macd2_signal_length) : ta.ema(macd2, macd2_signal_length)
macd2_hist = macd2 - macd2_signal
// --- 绘制 MACD1 和 MACD2
hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(macd1_hist, title="MACD1 Histogram", style=plot.style_line, color=(macd1_hist >= 0 ? (macd1_hist[1] < macd1_hist ? #26A69A : #B2DFDB) : (macd1_hist[1] < macd1_hist ? #FFCDD2 : #FF5252)))
plot(macd2_hist, title="MACD2 Histogram", style=plot.style_histogram, color=(macd2_hist >= 0 ? (macd2_hist[1] < macd2_hist ? #26A69A : #B2DFDB) : (macd2_hist[1] < macd2_hist ? #FFCDD2 : #FF5252)))
// --- 交易条件 ---
is_deep_green_macd2 = ta.cross(macd2_hist, 0) and macd2_hist > 0 and macd2_hist[1] < macd2_hist
is_deep_red_macd2 = ta.cross(macd2_hist, 0) and macd2_hist < 0 and macd2_hist[1] > macd2_hist
// 检测 MACD1 hist 穿越零轴
macd1_cross_up = macd1_hist > 0
macd1_cross_down = macd1_hist < 0
// 做多条件
long_condition = macd1_cross_up and macd2_hist > 0 and is_deep_green_macd2
// 做空条件
short_condition = macd1_cross_down and macd2_hist < 0 and is_deep_red_macd2
// --- 交易逻辑 ---
if long_condition
strategy.entry("Long", strategy.long)
stop_loss_long = strategy.position_avg_price * (1 - stop_loss_pct / 100)
take_profit_long = strategy.position_avg_price * (1 + take_profit_pct / 100)
strategy.exit("Long Exit", "Long", stop=stop_loss_long, limit=take_profit_long)
if short_condition
strategy.entry("Short", strategy.short)
stop_loss_short = strategy.position_avg_price * (1 + stop_loss_pct / 100)
take_profit_short = strategy.position_avg_price * (1 - take_profit_pct / 100)
strategy.exit("Short Exit", "Short", stop=stop_loss_short, limit=take_profit_short)
// --- 警报条件 ---
alertcondition(long_condition, title="Long Entry", message="Dual MACD Strategy: Long Entry Signal")
alertcondition(short_condition, title="Short Entry", message="Dual MACD Strategy: Short Entry Signal")