
शून्य-अंतराल MACD और क्लाउड चार्ट समान गतिशीलता एकीकरण ट्रेडिंग सिस्टम एक मात्रात्मक ट्रेडिंग रणनीति है जिसे विशेष रूप से तेजी से चलने वाले बाजार के वातावरण के लिए डिज़ाइन किया गया है, जो तीन अलग-अलग विशेषताओं वाले तकनीकी संकेतकों को एक साथ जोड़ती हैः शून्य-अंतराल MACD ((Zero Lag MACD), पहली नजर में संतुलित चार्ट का एक बेंचमार्क ((Kijun-sen) और गतिशीलता की सुविधा सूचक ((Ease of Movement, EOM) । ये तीन संकेत एक दूसरे के साथ काम करते हैं और ट्रेडिंग सिग्नल की पुष्टि करते समय कई स्तरों का प्रमाण प्रदान करते हैं, जिससे सिग्नल की गुणवत्ता और विश्वसनीयता में उल्लेखनीय सुधार होता है। यह रणनीति विशेष रूप से क्रिप्टोकरेंसी जैसे बड़े अस्थिर बाजारों के लिए उपयुक्त है, और कम समय अवधि (जैसे 5 मिनट) में उत्कृष्ट प्रदर्शन करती है।
इस रणनीति का मुख्य डिजाइन विचार यह है कि ट्रेडिंग सिग्नल केवल तभी ट्रिगर किए जाते हैं जब कई शर्तें एक साथ पूरी होती हैं, जिससे कम गुणवत्ता वाले ट्रेडिंग अवसरों को फ़िल्टर किया जाता है, झूठे संकेतों को कम किया जाता है, और गतिशील स्टॉप लॉस और फिक्स्ड स्ट्राइक लॉस रेट के माध्यम से मजबूत जोखिम प्रबंधन प्राप्त किया जाता है। पैरामीटर अनुकूलन और शर्तों की छानबीन के माध्यम से, यह रणनीति विभिन्न बाजार स्थितियों के अनुकूल है, जो व्यापारियों को उच्च संभावना वाले ट्रेडिंग अवसर प्रदान करती है।
शून्य-विलंबता MACD और क्लाउड चार्ट सम-रेखीय गतिशीलता एकीकरण ट्रेडिंग सिस्टम के संचालन के लिए तीन मुख्य संकेतकों के बीच समन्वय पर आधारित हैः
शून्य-विलंबता MACD (सुधारित संस्करण 1.2): पारंपरिक MACD की तुलना में, शून्य-विलंबता MACD एक विशेष गणना विधि के माध्यम से संकेत विलंबता को कम करता है, जो प्रवृत्ति के मोड़ के लिए संवेदनशीलता को बढ़ाता है। यह संकेतक रणनीति में सटीक गतिशीलता परिवर्तन को पकड़ने के लिए उपयोग किया जाता है, इसकी गणना प्रक्रिया में शामिल हैंः
zerolagEMA = (2 * ma1) - ma2औरzerolagslowMA = (2 * mas1) - mas2पहली नजर में संतुलन रेखा: एक गतिशील समर्थन / प्रतिरोध और प्रवृत्ति फ़िल्टर के रूप में, किजुन-सेन लाइन का उपयोग बाजार की प्रमुख दिशा की पुष्टि करने के लिए किया जाता है। इसकी गणना डोंगचीआन चैनल सिद्धांत पर आधारित है, जो किसी विशेष अवधि के भीतर उच्चतम और निम्नतम कीमतों का औसत है।
baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))मोबाइल सुविधा सूचकांक (ईओएम)ईओएम (EOM): यह एक लेन-देन मात्रा पर आधारित ऑसिलेटर है, जो मूल्य परिवर्तन की कठिनाई को मापकर मूल्य आंदोलन की पुष्टि करता है। ईओएम की गणना निम्न सूत्रों के माध्यम से की जाती हैः
eom = ta.sma(div * ta.change(hl2) * (high - low) / volume, eom_length)इस रणनीति में प्रवेश की शर्तें इन तीन संकेतकों के संकेतों को जोड़ती हैं:
प्रवेश की शर्तें:
ta.crossover(ZeroLagMACD, signal))ZeroLagMACD < hist)close > baseLine)eom > 0)खाली सिर प्रवेश की शर्त:
ta.crossunder(ZeroLagMACD, signal))ZeroLagMACD > hist)close < baseLine)eom < 0)जोखिम प्रबंधन के लिए, रणनीति एटीआर-आधारित गतिशील स्टॉप-लॉस का उपयोग करती है, जो वर्तमान एटीआर के 2.5 गुना की स्टॉप-लॉस दूरी है, और एक निश्चित जोखिम-लाभ अनुपात 1: 1.2 सेट करती है, जिससे यह सुनिश्चित होता है कि प्रत्येक व्यापार के लिए एक उचित लाभ लक्ष्य है।
एकाधिक सत्यापन प्रणालीतीन अलग-अलग विशेषताओं वाले संकेतकों (प्रवृत्ति, गतिशीलता और लेनदेन की मात्रा) के संयोजन के माध्यम से, रणनीति को झूठे संकेतों को प्रभावी ढंग से फ़िल्टर करने में सक्षम बनाया गया है, केवल उच्च संभावना वाले व्यापार के अवसरों के साथ प्रवेश करने के लिए, व्यापार की सफलता की दर में काफी वृद्धि हुई है।
पिछड़ेपन को कम करना: पारंपरिक MACD के बजाय शून्य-अवधाव MACD का उपयोग करके, बाजार के टर्नओवर को पहले पकड़ने में सक्षम है, पारंपरिक संकेतकों में अक्सर होने वाली देरी की समस्या को कम करता है, जिससे व्यापारी आदर्श प्रवेश बिंदु के करीब पहुंच सकते हैं।
अत्यधिक अनुकूलनीय: रणनीति में सभी पैरामीटर को विभिन्न बाजार स्थितियों, ट्रेडिंग किस्मों और समय चक्रों के लिए अनुकूलित किया जा सकता है, जिससे इसकी अत्यधिक अनुकूलनशीलता होती है। मुख्य संकेतकों में मैकड चक्र पैरामीटर, किजुन-सेन चक्र, ईओएम लंबाई आदि शामिल हैं।
एक अच्छा जोखिम प्रबंधन तंत्र:
पूर्ण बाजार विश्लेषणरणनीति मूल्य गतिशीलता (एमएसीडी), मूल्य संरचना (किजुन-सेन) और लेनदेन की मात्रा की पुष्टि (ईओएम) को ध्यान में रखती है, और बाजार को कई आयामों से विश्लेषण करती है, जिससे एक अधिक व्यापक व्यापार निर्णय प्रणाली बनती है।
दृश्यतारणनीतियाँः रणनीतियाँ सिग्नल लेबल, इंडिकेटर लाइन डिस्प्ले और सूचना पैनल सहित कई दृश्य विकल्प प्रदान करती हैं, जो व्यापारियों को ट्रेडिंग सिग्नल और वर्तमान बाजार की स्थिति को समझने और निगरानी करने में मदद करती हैं।
झूठे संकेतों का खतरा: हालांकि रणनीति में कई संकेतकों की पुष्टि की जाती है, फिर भी उच्च अस्थिरता या संरेखित बाजारों में झूठे संकेत हो सकते हैं। विशेष रूप से जब बाजार अक्सर कम समय में दिशा बदलते हैं, तो कई संकेतकों की पुष्टि से ट्रेडिंग सिग्नल की कमी हो सकती है और कुछ ट्रेडिंग अवसरों को याद किया जा सकता है।
पैरामीटर अनुकूलन चुनौतीरणनीति में कई पैरामीटर हैं जिन्हें समायोजित करने की आवश्यकता है (MACD पैरामीटर, किजुन-सेन चक्र, ईओएम लंबाई, आदि) । अनुचित पैरामीटर सेटिंग्स से ऐतिहासिक डेटा को ओवरफिट किया जा सकता है और भविष्य के बाजार की स्थिति में खराब प्रदर्शन हो सकता है।
स्लिप पॉइंट और तरलता जोखिम: कम समय चक्र ट्रेडिंग में, विशेष रूप से क्रिप्टोकरेंसी जैसे अधिक अस्थिर बाजारों के लिए, स्लिप और तरलता की समस्याएं हो सकती हैं, जिससे वास्तविक निष्पादन मूल्य और रणनीति गणना मूल्य में अंतर हो सकता है।
नुकसान को रोकने के लिए जोखिमएटीआर-आधारित स्टॉप लॉस तेजी से उतार-चढ़ाव वाले बाजारों में चरम मूल्य परिवर्तनों का सामना करने में असमर्थ हो सकते हैं, जिससे वास्तविक नुकसान उम्मीद से अधिक हो सकता है।
प्रौद्योगिकी निर्भरता: रणनीति अत्यधिक तकनीकी संकेतकों पर निर्भर करती है, जो मौलिक परिवर्तनों के कारण बाजार में भारी उतार-चढ़ाव के मामले में खराब प्रदर्शन कर सकती है।
सूचक पैरामीटर अनुकूलित: वर्तमान रणनीति में निश्चित संकेतक मापदंडों का उपयोग किया जाता है, आप मापदंडों के अनुकूलन समायोजन तंत्र को लागू करने पर विचार कर सकते हैं, बाजार की अस्थिरता या ट्रेडिंग चक्र के आधार पर MACD, किजुन-सेन और ईओएम के मापदंडों को स्वचालित रूप से अनुकूलित कर सकते हैं। इससे रणनीति को विभिन्न बाजार चरणों के लिए बेहतर अनुकूलित करने और समग्र स्थिरता में सुधार करने में मदद मिलेगी।
बाजार की स्थिति को वर्गीकृत करें: बाजार की स्थिति की पहचान करने वाले मॉड्यूल को जोड़कर, रणनीति ट्रेडिंग स्थितियों और जोखिम प्रबंधन मापदंडों को समायोजित कर सकती है, इस आधार पर कि वर्तमान बाजार प्रवृत्ति या अस्थिरता में है। उदाहरण के लिएः
ऑप्टिमाइज़ेशन के लिए रणनीति: वर्तमान रणनीति में एक निश्चित रिस्क-रिटर्न अनुपात (RRR) का उपयोग किया जाता है। 1: 1.2) रोकथाम की स्थापना, अधिक लचीले रोकथाम तंत्र को लागू करने पर विचार किया जा सकता है, जैसेः
मशीन लर्निंग मॉडल को एकीकृत करनाइस लेख में, हम आपको बता रहे हैं कि हम किस तरह से इस रणनीति को विकसित कर सकते हैं:
समय फ़िल्टर जोड़नासमय फ़िल्टर के अलावा, समय फ़िल्टर को कम समय के दौरान व्यापार करने से बचा जा सकता है।
शून्य-विलंब MACD और क्लाउड ग्राफ एक समान गतिशीलता के साथ एकीकृत ट्रेडिंग सिस्टम एक अच्छी तरह से डिजाइन की गई मात्रात्मक ट्रेडिंग रणनीति है, जो शून्य-विलंब MACD, किजुन-सेन और ईओएम के तीन तकनीकी संकेतकों को एकीकृत करके एक बहुआयामी ट्रेडिंग सिग्नल पुष्टिकरण प्रणाली का गठन करती है। यह रणनीति प्रवेश बिंदु पहचान पर सख्त बहु-पुष्टिकरण तंत्र का उपयोग करती है, जो जोखिम प्रबंधन पर गतिशील स्टॉप-लॉस और फिक्स्ड-रिस्क रिटर्न अनुपात को जोड़ती है, जो ट्रेडिंग प्रक्रिया के पूर्ण नियंत्रण को प्राप्त करती है।
रणनीति का मुख्य लाभ यह है कि इसकी डिजाइन अवधारणा में देरी को कम करने के साथ-साथ एक बहु-सूचक संयोजन है, जो इसे तेजी से बदलते बाजारों में उच्च-संभाव्यता वाले व्यापारिक अवसरों को पकड़ने में सक्षम बनाता है। साथ ही, पूरी तरह से अनुकूलन योग्य पैरामीटर सेटिंग्स व्यापारियों को विभिन्न बाजार स्थितियों और व्यक्तिगत जोखिम वरीयताओं के अनुसार लचीले ढंग से समायोजित करने की अनुमति देती हैं।
हालांकि इस रणनीति में कुछ संभावित जोखिम हैं, जैसे कि पैरामीटर अनुकूलन चुनौतियां और झूठे संकेत जोखिम, रणनीति की स्थिरता और अनुकूलनशीलता को सुझाए गए अनुकूलन दिशाओं जैसे कि सूचक पैरामीटर अनुकूलन, बाजार की स्थिति वर्गीकरण और मशीन सीखने के एकीकरण के माध्यम से और बढ़ाया जा सकता है।
कुल मिलाकर, यह एक अवधारणागत रूप से उन्नत, अच्छी तरह से संरचित मात्रात्मक ट्रेडिंग प्रणाली है, जो तकनीकी विश्लेषण के आधार पर व्यापारियों के लिए उपयुक्त है, विशेष रूप से उन निवेशकों के लिए जो उच्च गुणवत्ता वाले ट्रेडिंग सिग्नल की तलाश में हैं, न कि उच्च आवृत्ति वाले ट्रेडिंग के लिए। तर्कसंगत पैरामीटर समायोजन और निरंतर अनुकूलन के माध्यम से, इस रणनीति में विभिन्न बाजार स्थितियों में स्थिर ट्रेडिंग प्रदर्शन प्रदान करने की क्षमता है।
/*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")