Sistema de comercio de integración de impulso de media móvil MACD sin retardo y gráfico de nubes

MACD EMA SMA ATR ICHIMOKU EOM RRR 动量指标 零滞后指标 均线交叉
Fecha de creación: 2025-06-11 09:58:31 Última modificación: 2025-06-11 09:58:31
Copiar: 3 Número de Visitas: 383
2
Seguir
319
Seguidores

Sistema de comercio de integración de impulso de media móvil MACD sin retardo y gráfico de nubes Sistema de comercio de integración de impulso de media móvil MACD sin retardo y gráfico de nubes

Descripción general

El MACD de retraso cero y la integración de la dinámica de la línea uniforme en el gráfico de la nube es una estrategia de negociación cuantitativa diseñada específicamente para entornos de mercados de ritmo rápido, que integra hábilmente tres indicadores técnicos de diferentes características: el MACD de retraso cero ((Zero Lag MACD), la línea de referencia de un gráfico de equilibrio a primera vista ((Kijun-sen) y el indicador de facilidad de movimiento ((Ease of Movement, EOM)). Los tres indicadores trabajan en sinergia entre sí, proporcionando varios niveles de verificación al confirmar la señal de negociación, lo que mejora significativamente la calidad y la fiabilidad de la señal. La estrategia es especialmente adecuada para mercados de gran volatilidad como las criptomonedas, y se destaca en períodos de tiempo bajos (como 5 minutos).

El concepto central de diseño de la estrategia es que la señal de negociación se activa solo si se cumplen múltiples condiciones al mismo tiempo, lo que filtra las oportunidades de negociación de baja calidad, reduce las señales erróneas y permite una sólida gestión del riesgo a través de un stop loss dinámico y un índice de ganancias y pérdidas fijas. Mediante la optimización de parámetros y la selección de condiciones, la estrategia se adapta a diferentes entornos de mercado y ofrece a los operadores oportunidades de negociación de alta probabilidad.

Principio de estrategia

El funcionamiento del MACD de retraso cero y el sistema de negociación de integración de dinámica lineal uniforme en el gráfico de la nube se basa en la sinergia de tres indicadores centrales:

  1. MACD (Versión mejorada 1.2)En comparación con el MACD tradicional, el MACD de retraso cero reduce el retraso de la señal a través de un método de cálculo especial que mejora la sensibilidad a los puntos de inflexión de tendencia. El indicador se utiliza en la estrategia para capturar cambios de movimiento precisos, cuyo proceso de cálculo incluye:

    • Cálculo de retraso cero para las líneas rápida y lenta:zerolagEMA = (2 * ma1) - ma2yzerolagslowMA = (2 * mas1) - mas2
    • Línea MACD: diferencia entre la línea rápida y la línea lenta
    • Línea de señal: Media móvil plana del MACD
    • Gráfico columnar: Diferencia entre las líneas MACD y las líneas de señal
  2. Línea de referencia en el plano de equilibrio (Kijun-sen)Como soporte/resistencia dinámico y filtro de tendencia, la línea de Kijun-sen se utiliza para determinar la dirección dominante del mercado. Su cálculo se basa en el principio del canal de Dongjian, tomando el promedio de los precios más altos y más bajos en un período determinado:

    • baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
  3. Indicador de la facilidad de movilidad: Es un oscilador basado en el volumen de transacciones que mide la dificultad de los cambios en los precios para confirmar el movimiento de los precios. El EOM se calcula con la siguiente fórmula:

    • eom = ta.sma(div * ta.change(hl2) * (high - low) / volume, eom_length)

Las condiciones de entrada de la estrategia combinan las señales de estos tres indicadores:

Condiciones para la admisión

  • La línea de la señal en la línea MACDta.crossover(ZeroLagMACD, signal)
  • La línea MACD está debajo del gráfico columnarZeroLagMACD < hist
  • El precio es más alto que el de Kijun-sen.close > baseLine
  • EOM es mayor que ceroeom > 0

Condiciones de admisión sin cabeza

  • El MACD está en línea.ta.crossunder(ZeroLagMACD, signal)
  • La línea MACD es más alta que el gráfico columnarZeroLagMACD > hist
  • El precio es más bajo que el de Kijun-sen.close < baseLine
  • EOM es menor a ceroeom < 0

En cuanto a la gestión de riesgos, la estrategia utiliza un stop loss dinámico basado en el ATR, con un stop loss de 2.5 veces el ATR actual, y un riesgo fijo de una relación de retorno de 1:1.2, asegurando que cada operación tenga un objetivo de ganancias razonable.

Ventajas estratégicas

  1. Sistema de confirmación múltipleMediante la integración de tres indicadores de diferentes características (trend, momentum y volume de transacción), la estrategia puede filtrar eficazmente las señales falsas y entrar en juego solo cuando se presentan oportunidades de transacción de alta probabilidad, lo que aumenta considerablemente la tasa de éxito de las transacciones.

  2. Reducir el atrasoLa adopción del MACD de cero retraso en lugar del MACD tradicional permite capturar los puntos de inflexión del mercado más temprano, reduciendo los problemas de retraso comunes en los indicadores tradicionales y permitiendo a los operadores acercarse más al punto de entrada ideal.

  3. Altamente adaptableTodos los parámetros de la estrategia se pueden ajustar de forma personalizada en función de diferentes entornos de mercado, variedades de operaciones y períodos de tiempo, lo que lo hace muy adaptable. Los indicadores centrales, incluidos los parámetros de ciclo MACD, el ciclo de Kijun-sen, la longitud de EOM, etc., se pueden optimizar de forma específica.

  4. Mecanismos de gestión de riesgos

    • Diseño de stop loss dinámico (auto-adaptación de la volatilidad basada en el ATR) que asegura que las posiciones de stop loss se ajusten automáticamente a la volatilidad del mercado
    • La relación de riesgo-retorno fijo (RRR) es 1:1.2 y ofrece una expectativa de ganancias consistente.
    • La estrategia sólo abre posiciones cuando se cumplen múltiples condiciones al mismo tiempo, reduciendo significativamente el riesgo de señales falsas
  5. Análisis integral del mercadoLa estrategia toma en cuenta la dinámica de los precios (MACD), la estructura de los precios (Kijun-sen) y la confirmación del volumen de transacciones (EOM), y analiza el mercado desde varias dimensiones para formar un sistema de decisión de transacciones más completo.

  6. Funciones de visualizaciónLa estrategia ofrece una gran variedad de opciones de visualización, incluyendo marcas de señales, indicadores de líneas y paneles de información, para ayudar a los comerciantes a entender y monitorear de forma intuitiva las señales de negociación y el estado actual del mercado.

Riesgo estratégico

  1. Riesgo de señales falsasA pesar de que la estrategia utiliza confirmación de múltiples indicadores, es posible que se produzcan falsas señales en mercados con alta volatilidad o reajuste. Especialmente cuando el mercado cambia de dirección con frecuencia en un corto período de tiempo, la confirmación de múltiples indicadores puede causar una falta de señales de negociación y perder parte de las oportunidades de negociación.

    • Cómo solucionarloSe pueden ajustar los parámetros del indicador en función de la situación del mercado, y puede ser necesario relajar ciertas condiciones o ajustar la sensibilidad del MACD y el EOM durante períodos de alta volatilidad.
  2. Desafíos de optimización de parámetrosLa estrategia tiene varios parámetros que necesitan ser ajustados (parámetros MACD, ciclo de Kijun-sen, longitud de EOM, etc.) y la configuración incorrecta de los parámetros puede causar una adaptación excesiva de los datos históricos y un mal desempeño en el entorno de mercado futuro.

    • Cómo solucionarloUtilizando pruebas de prospectiva y pruebas de robustez para asegurar que los parámetros se mantengan efectivos en diferentes entornos de mercado. Evite la optimización excesiva y busque combinaciones de parámetros que sean estables en varias condiciones de mercado.
  3. Punto de deslizamiento y riesgo de liquidezEn el caso de las transacciones con un ciclo de tiempo bajo, especialmente en mercados con mucha volatilidad como las criptomonedas, es posible que se enfrenten a problemas de deslizamiento y liquidez, lo que lleva a una diferencia entre el precio de ejecución real y el precio calculado por la estrategia.

    • Cómo solucionarloIncorporar simulaciones de puntos de deslizamiento en la retrospectiva; considerar la posibilidad de agregar condiciones de filtración de liquidez a la estrategia; priorizar el comercio en mercados con mayor liquidez.
  4. El riesgo de que se rompa el stop lossEn un mercado de rápida volatilidad, los stop losses basados en ATR pueden no ser capaces de hacer frente a los cambios extremos en los precios, lo que lleva a pérdidas reales superiores a las esperadas.

    • Cómo solucionarloConsidere la posibilidad de agregar mecanismos adicionales de protección contra pérdidas, como el ajuste automático del ATR en condiciones de extrema volatilidad o el establecimiento de límites de pérdidas máximas absolutas.
  5. Dependencia tecnológicaLa estrategia depende en gran medida de los indicadores técnicos, que pueden tener un mal desempeño en el caso de fuertes fluctuaciones en el mercado causadas por cambios fundamentales.

    • Cómo solucionarloEl objetivo de la iniciativa es: reducir el volumen de transacciones o suspenderlas antes de que se publiquen datos o eventos económicos importantes; considerar la integración de filtros fundamentales.

Dirección de optimización de la estrategia

  1. Los parámetros del indicador se adaptan: La estrategia actual utiliza parámetros de indicadores fijos, se puede considerar la posibilidad de implementar un mecanismo de ajuste de los parámetros para optimizar automáticamente los parámetros de MACD, Kijun-sen y EOM en función de la volatilidad del mercado o el ciclo de negociación. Esto permitirá que la estrategia se adapte mejor a las diferentes fases del mercado y mejore la estabilidad general.

    • Parámetros que se pueden ajustar dinámicamente en función de la fluctuación o la intensidad de la tendencia en los últimos N ciclos
    • Estudiar la combinación óptima de parámetros en diferentes estados de mercado (trend, oscilación) y construir mecanismos de cambio
  2. Aumentar la clasificación de los estados del mercadoMediante la adición de un módulo de identificación de estado de mercado, la estrategia puede ajustar las condiciones de negociación y los parámetros de gestión de riesgo en función de si el mercado actual está en tendencia o en estado de agitación. Por ejemplo:

    • Aumentar las condiciones de filtración o reducir la frecuencia de las operaciones en mercados convulsionados
    • En una tendencia clara, se pueden flexibilizar ciertas condiciones de entrada y prolongar el tiempo de tenencia de la posición
    • Considere agregar indicadores de fuerza de tendencia como el ADX para ayudar a identificar el estado del mercado
  3. Optimización de las estrategias de contenciónLas estrategias actuales utilizan un parón fijo de riesgo-recompensa (RRR) de 1: 1.2) y se pueden considerar mecanismos de parón más flexibles, tales como:

    • Estrategia de parada parcial: tras alcanzar un cierto nivel de ganancias, se mueve la parada al precio de los costos para que parte de las ganancias continúen funcionando
    • Paradas dinámicas basadas en el nivel técnico (por ejemplo, soporte/resistencia, nivel de Fibonacci)
    • Utiliza la volatilidad de ATR para establecer objetivos de parada dinámicos y ajustar automáticamente los objetivos de ganancias en diferentes entornos de volatilidad
  4. Integración de modelos de aprendizaje automáticoEn la actualidad, la mayoría de las estrategias de la compañía están diseñadas para ayudar a las empresas a desarrollar sus estrategias de gestión de riesgos.

    • El uso de algoritmos de aprendizaje automático para analizar patrones históricos y predecir la probabilidad de éxito de la señal
    • Sistemas de clasificación de calidad para construir señales de negociación basadas en el rendimiento histórico
    • Modelos de aprendizaje profundo para identificar patrones de mercado más complejos
  5. Agregar un filtro de tiempoEl comportamiento del mercado puede variar en diferentes períodos de tiempo, y el añadido de filtros de tiempo puede evitar que se negocie en períodos de baja eficiencia:

    • Análisis de la tasa de éxito de las transacciones en diferentes períodos de tiempo basado en datos históricos
    • Suspender el comercio en momentos de baja o alta volatilidad
    • Tener en cuenta las características de los períodos de negociación de los diferentes mercados, por ejemplo, optimizar las características de negociación de 24 horas del mercado de criptomonedas

Resumir

El MACD de retraso cero y la integración de la dinámica de la línea de movimiento uniforme en el gráfico de la nube es una estrategia de negociación cuantitativa bien diseñada, que forma un sistema de confirmación de señales de negociación multidimensional mediante la integración de los tres indicadores técnicos MACD, Kijun-sen y EOM de retraso cero. La estrategia utiliza un mecanismo de confirmación múltiple riguroso en la identificación del punto de entrada, combina una relación de stop loss dinámica y un rendimiento de riesgo fijo en la gestión del riesgo, y logra un control total del proceso de negociación.

La ventaja central de la estrategia reside en su reducción de conceptos de diseño atrasados y su mecanismo de trabajo en conjunto de múltiples indicadores, lo que le permite capturar oportunidades de negociación de alta probabilidad en mercados que cambian rápidamente. Al mismo tiempo, la configuración de parámetros completamente personalizable permite al comerciante ajustar con flexibilidad según diferentes entornos de mercado y preferencias de riesgo personales.

Si bien la estrategia presenta algunos riesgos potenciales, como desafíos de optimización de parámetros y riesgo de falsas señales, la solidez y adaptabilidad de la estrategia se pueden mejorar aún más a través de las direcciones de optimización sugeridas, como la autoadaptación de parámetros de indicadores, la clasificación de estados de mercado y la integración de aprendizaje automático.

En general, es un sistema de comercio cuantitativo avanzado en concepto y bien estructurado, adecuado para el uso de los comerciantes con una cierta base de análisis técnico, especialmente para los inversores que buscan señales de comercio de alta calidad en lugar de operaciones de alta frecuencia. A través de ajustes razonables de parámetros y optimización continua, la estrategia tiene el potencial de proporcionar un rendimiento de comercio estable en una variedad de entornos de mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-06-11 00:00:00
end: 2025-06-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(title="Zero Lag MACD + Kijun-sen + EOM Strategy", shorttitle="ZL-KJ-EOM", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ================================================================================
// INPUT PARAMETERS - ALL INDICATOR SETTINGS
// ================================================================================

// === ZERO LAG MACD SETTINGS ===
group_macd = "Zero Lag MACD Enhanced Settings"
fastLength = input.int(12, title="Fast MM period", minval=1, group=group_macd)
slowLength = input.int(26, title="Slow MM period", minval=1, group=group_macd)
signalLength = input.int(9, title="Signal MM period", minval=1, group=group_macd)
MacdEmaLength = input.int(9, title="MACD EMA period", minval=1, group=group_macd)
useEma = input.bool(true, title="Use EMA (otherwise SMA)", group=group_macd)
useOldAlgo = input.bool(false, title="Use Glaz algo (otherwise 'real' original zero lag)", group=group_macd)
showDots = input.bool(true, title="Show symbols to indicate crossing", group=group_macd)
dotsDistance = input.float(1.5, title="Symbols distance factor", minval=0.1, group=group_macd)

// === KIJUN-SEN SETTINGS ===
group_kijun = "Kijun-Sen Settings"
basePeriods = input.int(26, minval=1, title="Kijun-Sen Period", group=group_kijun)

// === EASE OF MOVEMENT SETTINGS ===
group_eom = "Ease of Movement Settings"
eom_length = input.int(14, minval=1, title="EOM Length", group=group_eom)
div = input.int(10000, title="EOM Divisor", minval=1, group=group_eom)

// === RISK MANAGEMENT SETTINGS ===
group_risk = "Risk Management Settings"
atr_period = input.int(14, title="ATR Period", minval=1, group=group_risk)
atr_multiplier = input.float(2.5, title="ATR Multiplier for Stop Loss", minval=0.1, step=0.1, group=group_risk)
risk_reward_ratio = input.float(1.2, title="Risk-to-Reward Ratio", minval=0.1, step=0.1, group=group_risk)

// === DISPLAY SETTINGS ===
group_display = "Display Settings"
show_macd_plot = input.bool(false, title="Show MACD Plot (Separate Pane)", group=group_display)
show_eom_plot = input.bool(false, title="Show EOM Plot (Separate Pane)", group=group_display)
show_kijun_plot = input.bool(true, title="Show Kijun-Sen Line", group=group_display)
show_signals = input.bool(true, title="Show Entry Signals", group=group_display)
show_info_table = input.bool(true, title="Show Info Table", group=group_display)

// ================================================================================
// ZERO LAG MACD ENHANCED VERSION 1.2 (WITH USER INPUTS)
// ================================================================================

source = close

// Fast line
ma1 = useEma ? ta.ema(source, fastLength) : ta.sma(source, fastLength) 
ma2 = useEma ? ta.ema(ma1, fastLength) : ta.sma(ma1, fastLength) 
zerolagEMA = ((2 * ma1) - ma2)

// Slow line
mas1 = useEma ? ta.ema(source, slowLength) : ta.sma(source, slowLength)
mas2 = useEma ? ta.ema(mas1, slowLength) : ta.sma(mas1, slowLength)
zerolagslowMA = ((2 * mas1) - mas2)

// MACD line
ZeroLagMACD = zerolagEMA - zerolagslowMA 

// Signal line
emasig1 = ta.ema(ZeroLagMACD, signalLength)
emasig2 = ta.ema(emasig1, signalLength)
signal = useOldAlgo ? ta.sma(ZeroLagMACD, signalLength) : (2 * emasig1) - emasig2

// MACD Histogram
hist = ZeroLagMACD - signal

// MACD EMA line
macd_ema = ta.ema(ZeroLagMACD, MacdEmaLength)

// MACD plot components (for separate pane if enabled)
upHist = (hist > 0) ? hist : 0
downHist = (hist <= 0) ? hist : 0

// ================================================================================
// KIJUN-SEN INDICATOR (WITH USER INPUTS)
// ================================================================================

donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
baseLine = donchian(basePeriods)

// ================================================================================
// EASE OF MOVEMENT INDICATOR (WITH USER INPUTS)
// ================================================================================

var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
    runtime.error("No volume is provided by the data vendor.")

eom = ta.sma(div * ta.change(hl2) * (high - low) / volume, eom_length)

// ================================================================================
// ATR CALCULATION FOR STOP LOSS
// ================================================================================

atr = ta.atr(atr_period)

// ================================================================================
// ENTRY CONDITIONS
// ================================================================================

// Long Entry Conditions
macd_cross_up = ta.crossover(ZeroLagMACD, signal)
macd_below_hist = ZeroLagMACD < hist  // MACD line below histogram
price_above_kijun = close > baseLine  // Price above Kijun-sen
eom_above_zero = eom > 0  // EOM above zero

long_condition = macd_cross_up and macd_below_hist and price_above_kijun and eom_above_zero

// Short Entry Conditions
macd_cross_down = ta.crossunder(ZeroLagMACD, signal)
macd_above_hist = ZeroLagMACD > hist  // MACD line above histogram
price_below_kijun = close < baseLine  // Price below Kijun-sen
eom_below_zero = eom < 0  // EOM below zero

short_condition = macd_cross_down and macd_above_hist and price_below_kijun and eom_below_zero

// ================================================================================
// STRATEGY EXECUTION
// ================================================================================

// Entry Logic - Enter at next candle open as specified
if long_condition
    strategy.entry("Long", strategy.long, comment="Long Entry")

if short_condition
    strategy.entry("Short", strategy.short, comment="Short Entry")

// Exit Logic (Stop Loss and Take Profit)
if strategy.position_size > 0  // Long position
    stop_loss = strategy.position_avg_price - (atr * atr_multiplier)
    distance_to_sl = strategy.position_avg_price - stop_loss
    take_profit = strategy.position_avg_price + (distance_to_sl * risk_reward_ratio)
    strategy.exit("Long Exit", "Long", stop=stop_loss, limit=take_profit, comment="Long Exit")

if strategy.position_size < 0  // Short position
    stop_loss = strategy.position_avg_price + (atr * atr_multiplier)
    distance_to_sl = stop_loss - strategy.position_avg_price
    take_profit = strategy.position_avg_price - (distance_to_sl * risk_reward_ratio)
    strategy.exit("Short Exit", "Short", stop=stop_loss, limit=take_profit, comment="Short Exit")

// ================================================================================
// PLOTTING INDICATORS
// ================================================================================

// Plot Kijun-sen
plot(show_kijun_plot ? baseLine : na, color=color.new(color.maroon, 0), title="Kijun-Sen", linewidth=2)

// Plot entry signals
plotshape(show_signals and long_condition, title="Long Signal", location=location.belowbar, color=color.new(color.green, 0), style=shape.triangleup, size=size.small, text="LONG")
plotshape(show_signals and short_condition, title="Short Signal", location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.small, text="SHORT")

// Plot stop loss and take profit levels for current position
plot(strategy.position_size > 0 ? strategy.position_avg_price - (atr * atr_multiplier) : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title="Long Stop Loss")
plot(strategy.position_size > 0 ? strategy.position_avg_price + ((strategy.position_avg_price - (strategy.position_avg_price - (atr * atr_multiplier))) * risk_reward_ratio) : na, color=color.new(color.green, 0), style=plot.style_linebr, linewidth=1, title="Long Take Profit")

plot(strategy.position_size < 0 ? strategy.position_avg_price + (atr * atr_multiplier) : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title="Short Stop Loss")
plot(strategy.position_size < 0 ? strategy.position_avg_price - (((strategy.position_avg_price + (atr * atr_multiplier)) - strategy.position_avg_price) * risk_reward_ratio) : na, color=color.new(color.green, 0), style=plot.style_linebr, linewidth=1, title="Short Take Profit")

// ================================================================================
// SEPARATE PANE PLOTS (OPTIONAL)
// ================================================================================

// MACD Plot (separate pane)
plot(show_macd_plot ? upHist : na, color=color.new(color.green, 40), style=plot.style_columns, title='MACD Positive Histogram')
plot(show_macd_plot ? downHist : na, color=color.new(color.purple, 40), style=plot.style_columns, title='MACD Negative Histogram')
plot(show_macd_plot ? ZeroLagMACD : na, color=color.new(color.black, 0), linewidth=2, title='MACD Line')
plot(show_macd_plot ? signal : na, color=color.new(color.gray, 0), linewidth=2, title='Signal Line')
plot(show_macd_plot ? macd_ema : na, color=color.new(color.red, 0), linewidth=2, title='EMA on MACD Line')

// MACD zero line
plot(show_macd_plot ? 0 : na, "MACD Zero Line", color=color.new(color.gray, 50))

// MACD crossover dots - calculate cross condition globally for consistency
macd_signal_cross = ta.cross(ZeroLagMACD, signal)
circleYPosition = signal * dotsDistance
plot(show_macd_plot and showDots and macd_signal_cross ? circleYPosition : na, style=plot.style_circles, linewidth=4, color=hist > 0 ? color.new(color.green, 0) : color.new(color.purple, 0), title='MACD Cross Dots')

// EOM Plot (separate pane)
plot(show_eom_plot ? eom : na, "EOM", color=color.new(#43A047, 0), linewidth=2)
plot(show_eom_plot ? 0 : na, "EOM Zero Line", color=color.new(color.gray, 50))

// ================================================================================
// INFO TABLE
// ================================================================================

var table info_table = table.new(position.top_right, 2, 8, bgcolor=color.new(color.white, 0), border_width=1)
if show_info_table and barstate.islast
    table.cell(info_table, 0, 0, "Position", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 0, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT", 
               text_color=strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : color.black)
    
    table.cell(info_table, 0, 1, "Entry Price", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 1, strategy.position_size != 0 ? str.tostring(strategy.position_avg_price, "#.####") : "N/A", text_color=color.black)
    
    table.cell(info_table, 0, 2, "Current ATR", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 2, str.tostring(atr, "#.####"), text_color=color.black)
    
    table.cell(info_table, 0, 3, "MACD Value", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 3, str.tostring(ZeroLagMACD, "#.####"), text_color=color.black)
    
    table.cell(info_table, 0, 4, "Signal Value", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 4, str.tostring(signal, "#.####"), text_color=color.black)
    
    table.cell(info_table, 0, 5, "EOM Value", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 5, str.tostring(eom, "#.##"), text_color=eom > 0 ? color.green : color.red)
    
    table.cell(info_table, 0, 6, "Price vs Kijun", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 6, close > baseLine ? "ABOVE" : "BELOW", text_color=close > baseLine ? color.green : color.red)
    
    table.cell(info_table, 0, 7, "Last Signal", text_color=color.black, bgcolor=color.new(color.gray, 70))
    table.cell(info_table, 1, 7, long_condition ? "LONG" : short_condition ? "SHORT" : "NONE", 
               text_color=long_condition ? color.green : short_condition ? color.red : color.gray)

// ================================================================================
// ALERTS
// ================================================================================

// Alert conditions
alertcondition(long_condition, title="Long Entry Signal", 
               message="ZL-MACD+KJ+EOM Strategy: Long Entry Signal Triggered\nMACD: {{plot_0}}\nSignal: {{plot_1}}\nEOM: {{plot_2}}\nPrice: {{close}}\nKijun-Sen: {{plot_3}}")

alertcondition(short_condition, title="Short Entry Signal", 
               message="ZL-MACD+KJ+EOM Strategy: Short Entry Signal Triggered\nMACD: {{plot_0}}\nSignal: {{plot_1}}\nEOM: {{plot_2}}\nPrice: {{close}}\nKijun-Sen: {{plot_3}}")

// Position exit alerts
alertcondition(strategy.position_size[1] != 0 and strategy.position_size == 0, title="Position Closed", 
               message="ZL-MACD+KJ+EOM Strategy: Position Closed")