Zero-Lag-MACD- und Cloud-Chart-Momentum-Integrationshandelssystem mit gleitendem Durchschnitt

MACD EMA SMA ATR ICHIMOKU EOM RRR 动量指标 零滞后指标 均线交叉
Erstellungsdatum: 2025-06-11 09:58:31 zuletzt geändert: 2025-06-11 09:58:31
Kopie: 3 Klicks: 383
2
konzentrieren Sie sich auf
319
Anhänger

Zero-Lag-MACD- und Cloud-Chart-Momentum-Integrationshandelssystem mit gleitendem Durchschnitt Zero-Lag-MACD- und Cloud-Chart-Momentum-Integrationshandelssystem mit gleitendem Durchschnitt

Überblick

Das MACD-Zero-Lager-Integrationssystem ist eine quantitative Trading-Strategie, die speziell für schnelllebige Marktumgebungen entwickelt wurde. Die Strategie integriert geschickt drei verschiedene technische Indikatoren: den MACD-Zero-Lager (Zero Lag MACD), die Benchmark für das Gleichgewicht des ersten Diagramms (Kijun-sen) und den Ease of Movement (EOM). Die drei Indikatoren arbeiten in Synergie miteinander und bieten mehrere Ebenen der Bestätigung bei der Bestätigung von Handelssignalen, was die Signalqualität und -zuverlässigkeit erheblich verbessert. Die Strategie eignet sich besonders für große, volatile Märkte wie Kryptowährungen und zeichnet sich in niedrigen Zeiträumen (z. B. 5 Minuten) aus.

Die Kernkonzeption der Strategie besteht darin, dass Handelssignale nur ausgelöst werden, wenn mehrere Bedingungen gleichzeitig erfüllt sind, wodurch minderwertige Handelsmöglichkeiten herausgefiltert, Fehlsignale reduziert und ein robustes Risikomanagement durch dynamische Stop-Loss- und Fixed-Loss-Ratio ermöglicht wird. Durch die Optimierung von Parametern und die Filterung von Bedingungen kann die Strategie an unterschiedliche Marktumgebungen angepasst werden und bietet Händlern hohe Wahrscheinlichkeiten.

Strategieprinzip

Die Integration von Zero Lag MACD und Cloud Graph Linear Dynamics Trading System basiert auf der Synergie von drei Kernindikatoren:

  1. MACD (Verbesserungsversion 1.2)Der Indikator wird verwendet, um exakte Dynamikänderungen in der Strategie zu erfassen. Die Berechnung beinhaltet:

    • Berechnung der Nullverzögerung bei schnellen und langsamen Linien:zerolagEMA = (2 * ma1) - ma2UndzerolagslowMA = (2 * mas1) - mas2
    • MACD-Linie: Differenz zwischen der schnellen und der langsamen Linie
    • Signallinie: Glatter Moving Average der MACD
    • Die Differenz zwischen MACD- und Signallinien
  2. Gleichgewichtsdiagramm ReferenzlinieDie Kijun-sen-Linie dient als dynamischer Filter für Unterstützung/Widerstand und Trends. Sie basiert auf dem Dongjian-Kanalprinzip und berechnet die durchschnittlichen Höchst- und Tiefstpreise innerhalb eines bestimmten Zeitraums:

    • baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
  3. Mobile Convenience Index (EOM) (EOM) ist ein Indikator für die MobilfunkfreundlichkeitDer EOM wird durch folgende Formel berechnet:

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

Die Eintrittsbedingungen für die Strategie kombinieren die Signale dieser drei Indikatoren:

Mehrere Eintrittsbedingungen

  • Die MACD-Linie durchläuft die Signallinie.ta.crossover(ZeroLagMACD, signal)
  • MACD-Linie unterhalb des PfeilersZeroLagMACD < hist
  • Die Preise sind höher als bei Kijun-sen.close > baseLine
  • EOM größer als 0eom > 0

Eintrittsbedingungen

  • MACD unter der Linie durch die Signallinieta.crossunder(ZeroLagMACD, signal)
  • Die MACD-Linie ist höher als der Pylon.ZeroLagMACD > hist
  • Der Preis ist niedriger als bei Kijun-sen.close < baseLine
  • EOM kleiner als 0eom < 0

In Bezug auf das Risikomanagement verwendet die Strategie einen dynamischen Stop-Loss basierend auf der ATR, mit einer Stop-Loss-Distanz von 2,5-mal der aktuellen ATR und einem festen Risiko-Rendite-Verhältnis von 1:1,2, um sicherzustellen, dass für jeden Handel ein angemessenes Gewinnziel festgelegt wird.

Strategische Vorteile

  1. MehrfachbestätigungDurch die Integration von drei Indikatoren mit unterschiedlichen Eigenschaften (Trend, Dynamik und Transaktionsvolumen) ist die Strategie in der Lage, gefälschte Signale effektiv zu filtern und nur dann einzugreifen, wenn eine hohe Wahrscheinlichkeit für einen Handel besteht, was die Erfolgsrate des Handels erheblich erhöht.

  2. Verringerung der RückständeDer Einsatz von Null-Lager-MACDs anstelle von herkömmlichen MACDs ermöglicht es, Marktwendepunkte früher zu erfassen, die häufigen Lagerprobleme herkömmlicher Indikatoren zu reduzieren und Händler näher an den idealen Einstiegspunkten zu bringen.

  3. Äußerst anpassungsfähigAlle Parameter in der Strategie können an unterschiedliche Marktumgebungen, Handelsarten und Zeiträume angepasst werden, was eine hohe Anpassungsfähigkeit ermöglicht. Kernindikatoren wie MACD-Zyklusparameter, Kijun-sen-Zyklus, EOM-Länge usw. können gezielt optimiert werden.

  4. Gute Risikomanagementsysteme

    • Dynamische Stop-Design (Selbstadaptierung der ATR-basierten Volatilität) sorgt dafür, dass die Stop-Position automatisch an die Marktvolatilität angepasst werden kann
    • Das Fixed-Risk-Return-Ratio (RRR) von 1:1:2 liefert eine einheitliche Gewinnprognose
    • Die Strategie eröffnet nur Positionen, wenn mehrere Bedingungen gleichzeitig erfüllt sind, was das Risiko für falsche Signale erheblich reduziert
  5. Umfassende Analyse des MarktesDie Strategie berücksichtigt gleichzeitig die Preisdynamik (MACD), die Preisstruktur (Kijun-sen) und die Bestätigung des Umsatzes (EOM) und analysiert den Markt in mehreren Dimensionen, um ein umfassenderes Handelsentscheidungssystem zu bilden.

  6. VisualisierungDie Strategie bietet eine Vielzahl von Visualisierungsoptionen, darunter Signalmarkierungen, Anzeige von Kennzahlen und Informationstafeln, die dem Händler helfen, Handelssignale und die aktuelle Marktlage intuitiv zu verstehen und zu überwachen.

Strategisches Risiko

  1. Gefahr von FalschmeldungenTrotz der Verwendung von mehreren Indikatoren kann es zu Fehlsignalen kommen, insbesondere wenn der Markt in kurzer Zeit häufig seine Richtung ändert. Die Bestätigung von mehreren Indikatoren kann zu wenig Handelssignalen führen und einige Handelsmöglichkeiten verpassen.

    • Die LösungDie Indikatorparameter können je nach Marktsituation angepasst werden. Es kann erforderlich sein, bestimmte Bedingungen zu lockern oder die MACD- und EOM-Sensitivität während hoher Schwankungen anzupassen.
  2. Herausforderungen bei der Optimierung von ParameternDie Strategie hat mehrere Parameter, die angepasst werden müssen (MACD-Parameter, Kijun-sen-Zyklus, EOM-Längen usw.), und eine falsche Parameter-Einstellung kann zu übermäßiger Anpassung der historischen Daten führen, die in einem zukünftigen Marktumfeld schlechter abschneiden.

    • Die LösungEs werden folgende Bereiche untersucht: Vorwärts- und Stabilitätsprüfungen, um sicherzustellen, dass die Parameter in unterschiedlichen Marktumgebungen wirksam bleiben; Vermeidung von Überoptimierungen, um nach einer Kombination von Parametern zu suchen, die unter verschiedenen Marktbedingungen stabil sind.
  3. Schlupfpunkte und LiquiditätsrisikenEs kann zu Problemen mit Slippage und Liquidität kommen, was zu einer Abweichung zwischen dem tatsächlichen Ausführungspreis und dem Preis, der für die Strategie berechnet wurde, führt.

    • Die LösungEinbeziehung von Schlupfpunktsimulationen in die Rückmeldung; Erwägung der Erhöhung der Liquiditätsfilterbedingungen in der Strategie; Vorrang bei der Auswahl von Märkten mit höherer Liquidität.
  4. Die Gefahr, durch den Schadenstopp zu kommen.In einem schnell schwankenden Markt kann ein Stop-Loss auf ATR-Basis nicht mit extremen Preisbewegungen umgehen, wodurch die tatsächlichen Verluste über den Erwartungen liegen.

    • Die LösungErwägen Sie zusätzliche Stop-Loss-Schutzmechanismen, z. B. die automatische Anpassung des ATR-Multiplikators bei extremen Schwankungen oder die Einstellung eines absoluten Maximalverlustlimits.
  5. Technologische AbhängigkeitDie Strategie hängt stark von technischen Indikatoren ab, die bei starken Marktschwankungen durch grundlegende Veränderungen schlecht abschneiden können.

    • Die LösungDas Unternehmen hat sich dazu entschlossen, die Handelsvolumen zu reduzieren oder zu unterbrechen, bevor wichtige wirtschaftliche Daten oder Ereignisse veröffentlicht werden.

Richtung der Strategieoptimierung

  1. Indikatorparameter passen sich anDie aktuelle Strategie verwendet festgelegte Kennzahlenparameter, wobei ein Anpassungsmechanismus für die Parameter in Betracht gezogen werden kann, um die MACD-, Kijun-sen- und EOM-Parameter automatisch anhand von Marktvolatilität oder des Handelszyklus zu optimieren. Dies ermöglicht es der Strategie, sich besser an verschiedene Marktphasen anzupassen und die Gesamtstabilität zu verbessern.

    • Parameter, die sich dynamisch an die Schwankungen oder an die Trendstärke der letzten N-Zyklen anpassen lassen
    • Die optimale Kombination von Parametern unter verschiedenen Marktbedingungen (Trends, Schwankungen) untersuchen und einen Wechselmechanismus erstellen
  2. Marktstaatliche Klassifizierung hinzugefügtDie Strategie kann die Handelsbedingungen und die Risikomanagementparameter anpassen, je nachdem, ob der aktuelle Markt im Trend oder im Schwanken ist.

    • Erhöhung der Filterbedingungen oder Verringerung der Handelsfrequenz in einem wackligen Markt
    • Einige Eingangsbedingungen können bei klaren Trends gelockert werden, während die Haltedauer verlängert wird
    • Erwägen Sie, Trendstärken wie ADX hinzuzufügen, um den Marktzustand zu erkennen
  3. Optimierung der Anti-Epidemie-StrategieDerzeitige Strategien verwenden ein festes Risiko-Rendite-Verhältnis (RRR) von 1: 1.2) und können eine flexiblere Stop-Stop-Mechanik in Betracht ziehen, wie:

    • Teilstop-Strategie: Verlagerung des Stop-Losses auf den Kostenpreis nach Erreichen eines bestimmten Gewinns, um einen Teil des Gewinns weiter zu betreiben
    • Dynamische Stopps basierend auf technischen Ebenen (z. B. Unterstützungs-/Widerstandswerte, Fibonacci-Levels)
    • Dynamische Stop-Loss-Ziele mit ATR-Schwankungen und automatische Anpassung der Gewinnziele bei unterschiedlichen Schwankungen
  4. Integration von Modellen für maschinelles LernenDas ist eine sehr wichtige Frage, die wir uns stellen müssen.

    • Analyse von historischen Mustern mit Hilfe von Machine-Learning-Algorithmen, um die Erfolgswahrscheinlichkeit von Signalen vorherzusagen
    • Qualitätsklassifizierungssysteme, die Handelssignale basierend auf der historischen Performance erstellen
    • Mit Hilfe von Deep-Learning-Modellen werden komplexere Marktmuster identifiziert
  5. Hinzufügen eines ZeitfiltersDie Markte können sich in unterschiedlichen Zeitabschnitten unterschiedlich verhalten, und die Hinzufügung von Zeitfiltern kann dazu beitragen, den Handel in unwirksamen Zeitabschnitten zu vermeiden.

    • Erfolgsraten von Transaktionen in verschiedenen Zeitabschnitten anhand von historischen Daten
    • Unterbrechung von Geschäften bei zu geringer oder zu hoher Volatilität
    • Berücksichtigung der Handelszeitmerkmale verschiedener Märkte, z. B. Optimierung für die 24-Stunden-Handelsmerkmale des Kryptowährungsmarktes

Zusammenfassen

Das MACD-System ist eine gut entwickelte quantitative Handelsstrategie, die die drei technischen Indikatoren MACD, Kijun-sen und EOM in einem mehrdimensionalen Signalbestätigungssystem integriert. Die Strategie verwendet eine strenge Mehrfachbestätigungsmechanik für die Identifizierung des Einstiegspunktes und kombiniert dynamische Stop-Loss- und Fixed-Risk-Return-Verhältnisse für das Risikomanagement, um die vollständige Kontrolle des Handelsprozesses zu erreichen.

Die Kernstärke der Strategie liegt in der Reduzierung von Rückstand und der Zusammenarbeit von mehreren Indikatoren, die es ermöglichen, hochprobable Handelschancen in einem schnelllebigen Markt zu erfassen. Die vollständig anpassbaren Parameter-Einstellungen ermöglichen den Händlern eine flexible Anpassung an verschiedene Marktumgebungen und persönliche Risikopräferenzen.

Obwohl die Strategie mit potenziellen Risiken verbunden ist, wie z. B. die Herausforderung der Parameteroptimierung und die Gefahr von Falschsignalen, kann die Robustheit und Anpassungsfähigkeit der Strategie durch empfohlene Optimierungsrichtungen wie die Anpassung der Kennzahlenparameter, die Klassifizierung der Marktsituationen und die Integration von Machine Learning weiter verbessert werden.

Insgesamt handelt es sich um ein konzeptionell fortschrittliches, strukturiertes, quantitatives Handelssystem, das für Händler mit einer gewissen Basis in der technischen Analyse geeignet ist, insbesondere für Investoren, die nach hochwertigen Handelssignalen und nicht nach Hochfrequenzhandel suchen. Durch angemessene Parameteranpassungen und kontinuierliche Optimierung hat die Strategie das Potenzial, eine stabile Handelsperformance in verschiedenen Marktumgebungen zu bieten.

Strategiequellcode
/*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")