शून्य-विलंब MACD और क्लाउड चार्ट मूविंग एवरेज मोमेंटम इंटीग्रेशन ट्रेडिंग सिस्टम

MACD EMA SMA ATR ICHIMOKU EOM RRR 动量指标 零滞后指标 均线交叉
निर्माण तिथि: 2025-06-11 09:58:31 अंत में संशोधित करें: 2025-06-11 09:58:31
कॉपी: 3 क्लिक्स: 383
2
ध्यान केंद्रित करना
319
समर्थक

शून्य-विलंब MACD और क्लाउड चार्ट मूविंग एवरेज मोमेंटम इंटीग्रेशन ट्रेडिंग सिस्टम शून्य-विलंब MACD और क्लाउड चार्ट मूविंग एवरेज मोमेंटम इंटीग्रेशन ट्रेडिंग सिस्टम

अवलोकन

शून्य-अंतराल MACD और क्लाउड चार्ट समान गतिशीलता एकीकरण ट्रेडिंग सिस्टम एक मात्रात्मक ट्रेडिंग रणनीति है जिसे विशेष रूप से तेजी से चलने वाले बाजार के वातावरण के लिए डिज़ाइन किया गया है, जो तीन अलग-अलग विशेषताओं वाले तकनीकी संकेतकों को एक साथ जोड़ती हैः शून्य-अंतराल MACD ((Zero Lag MACD), पहली नजर में संतुलित चार्ट का एक बेंचमार्क ((Kijun-sen) और गतिशीलता की सुविधा सूचक ((Ease of Movement, EOM) । ये तीन संकेत एक दूसरे के साथ काम करते हैं और ट्रेडिंग सिग्नल की पुष्टि करते समय कई स्तरों का प्रमाण प्रदान करते हैं, जिससे सिग्नल की गुणवत्ता और विश्वसनीयता में उल्लेखनीय सुधार होता है। यह रणनीति विशेष रूप से क्रिप्टोकरेंसी जैसे बड़े अस्थिर बाजारों के लिए उपयुक्त है, और कम समय अवधि (जैसे 5 मिनट) में उत्कृष्ट प्रदर्शन करती है।

इस रणनीति का मुख्य डिजाइन विचार यह है कि ट्रेडिंग सिग्नल केवल तभी ट्रिगर किए जाते हैं जब कई शर्तें एक साथ पूरी होती हैं, जिससे कम गुणवत्ता वाले ट्रेडिंग अवसरों को फ़िल्टर किया जाता है, झूठे संकेतों को कम किया जाता है, और गतिशील स्टॉप लॉस और फिक्स्ड स्ट्राइक लॉस रेट के माध्यम से मजबूत जोखिम प्रबंधन प्राप्त किया जाता है। पैरामीटर अनुकूलन और शर्तों की छानबीन के माध्यम से, यह रणनीति विभिन्न बाजार स्थितियों के अनुकूल है, जो व्यापारियों को उच्च संभावना वाले ट्रेडिंग अवसर प्रदान करती है।

रणनीति सिद्धांत

शून्य-विलंबता MACD और क्लाउड चार्ट सम-रेखीय गतिशीलता एकीकरण ट्रेडिंग सिस्टम के संचालन के लिए तीन मुख्य संकेतकों के बीच समन्वय पर आधारित हैः

  1. शून्य-विलंबता MACD (सुधारित संस्करण 1.2): पारंपरिक MACD की तुलना में, शून्य-विलंबता MACD एक विशेष गणना विधि के माध्यम से संकेत विलंबता को कम करता है, जो प्रवृत्ति के मोड़ के लिए संवेदनशीलता को बढ़ाता है। यह संकेतक रणनीति में सटीक गतिशीलता परिवर्तन को पकड़ने के लिए उपयोग किया जाता है, इसकी गणना प्रक्रिया में शामिल हैंः

    • फ़ास्ट और स्लो लाइनों के लिए शून्य विलंबता गणनाःzerolagEMA = (2 * ma1) - ma2औरzerolagslowMA = (2 * mas1) - mas2
    • एमएसीडी लाइनः फास्ट और लो लाइन का अंतर
    • सिग्नल लाइनः MACD की चिकनी चलती औसत
    • स्तंभित आरेखः MACD लाइन और सिग्नल लाइन का अंतर
  2. पहली नजर में संतुलन रेखा: एक गतिशील समर्थन / प्रतिरोध और प्रवृत्ति फ़िल्टर के रूप में, किजुन-सेन लाइन का उपयोग बाजार की प्रमुख दिशा की पुष्टि करने के लिए किया जाता है। इसकी गणना डोंगचीआन चैनल सिद्धांत पर आधारित है, जो किसी विशेष अवधि के भीतर उच्चतम और निम्नतम कीमतों का औसत है।

    • baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
  3. मोबाइल सुविधा सूचकांक (ईओएम)ईओएम (EOM): यह एक लेन-देन मात्रा पर आधारित ऑसिलेटर है, जो मूल्य परिवर्तन की कठिनाई को मापकर मूल्य आंदोलन की पुष्टि करता है। ईओएम की गणना निम्न सूत्रों के माध्यम से की जाती हैः

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

इस रणनीति में प्रवेश की शर्तें इन तीन संकेतकों के संकेतों को जोड़ती हैं:

प्रवेश की शर्तें

  • MACD लाइन पर सिग्नल लाइनta.crossover(ZeroLagMACD, signal)
  • MACD रेखा स्तंभ रेखा से नीचे हैZeroLagMACD < hist
  • किजुन-सेन की तुलना में कीमतें अधिक हैंclose > baseLine
  • EOM 0 से बड़ा हैeom > 0

खाली सिर प्रवेश की शर्त

  • एमएसीडी नीचे लाइन के माध्यम से संकेत लाइन))ta.crossunder(ZeroLagMACD, signal)
  • MACD रेखाएं स्तंभों से ऊपर हैंZeroLagMACD > hist
  • किजुन-सेन से भी कम कीमत))close < baseLine
  • EOM शून्य से कम हैeom < 0

जोखिम प्रबंधन के लिए, रणनीति एटीआर-आधारित गतिशील स्टॉप-लॉस का उपयोग करती है, जो वर्तमान एटीआर के 2.5 गुना की स्टॉप-लॉस दूरी है, और एक निश्चित जोखिम-लाभ अनुपात 1: 1.2 सेट करती है, जिससे यह सुनिश्चित होता है कि प्रत्येक व्यापार के लिए एक उचित लाभ लक्ष्य है।

रणनीतिक लाभ

  1. एकाधिक सत्यापन प्रणालीतीन अलग-अलग विशेषताओं वाले संकेतकों (प्रवृत्ति, गतिशीलता और लेनदेन की मात्रा) के संयोजन के माध्यम से, रणनीति को झूठे संकेतों को प्रभावी ढंग से फ़िल्टर करने में सक्षम बनाया गया है, केवल उच्च संभावना वाले व्यापार के अवसरों के साथ प्रवेश करने के लिए, व्यापार की सफलता की दर में काफी वृद्धि हुई है।

  2. पिछड़ेपन को कम करना: पारंपरिक MACD के बजाय शून्य-अवधाव MACD का उपयोग करके, बाजार के टर्नओवर को पहले पकड़ने में सक्षम है, पारंपरिक संकेतकों में अक्सर होने वाली देरी की समस्या को कम करता है, जिससे व्यापारी आदर्श प्रवेश बिंदु के करीब पहुंच सकते हैं।

  3. अत्यधिक अनुकूलनीय: रणनीति में सभी पैरामीटर को विभिन्न बाजार स्थितियों, ट्रेडिंग किस्मों और समय चक्रों के लिए अनुकूलित किया जा सकता है, जिससे इसकी अत्यधिक अनुकूलनशीलता होती है। मुख्य संकेतकों में मैकड चक्र पैरामीटर, किजुन-सेन चक्र, ईओएम लंबाई आदि शामिल हैं।

  4. एक अच्छा जोखिम प्रबंधन तंत्र

    • गतिशील स्टॉप डिज़ाइन (एटीआर-आधारित उतार-चढ़ाव के लिए अनुकूल) सुनिश्चित करता है कि स्टॉप स्थिति बाजार की अस्थिरता के अनुसार स्वचालित रूप से समायोजित हो सके
    • फिक्स्ड रिस्क-टू-रिटर्न रेशियो ((1:1.2) एक समान लाभप्रदता प्रदान करता है
    • रणनीति केवल एक ही समय में कई शर्तों को पूरा करने पर स्थिति खोलती है, जो गलत संकेतों के जोखिम को काफी कम करती है
  5. पूर्ण बाजार विश्लेषणरणनीति मूल्य गतिशीलता (एमएसीडी), मूल्य संरचना (किजुन-सेन) और लेनदेन की मात्रा की पुष्टि (ईओएम) को ध्यान में रखती है, और बाजार को कई आयामों से विश्लेषण करती है, जिससे एक अधिक व्यापक व्यापार निर्णय प्रणाली बनती है।

  6. दृश्यतारणनीतियाँः रणनीतियाँ सिग्नल लेबल, इंडिकेटर लाइन डिस्प्ले और सूचना पैनल सहित कई दृश्य विकल्प प्रदान करती हैं, जो व्यापारियों को ट्रेडिंग सिग्नल और वर्तमान बाजार की स्थिति को समझने और निगरानी करने में मदद करती हैं।

रणनीतिक जोखिम

  1. झूठे संकेतों का खतरा: हालांकि रणनीति में कई संकेतकों की पुष्टि की जाती है, फिर भी उच्च अस्थिरता या संरेखित बाजारों में झूठे संकेत हो सकते हैं। विशेष रूप से जब बाजार अक्सर कम समय में दिशा बदलते हैं, तो कई संकेतकों की पुष्टि से ट्रेडिंग सिग्नल की कमी हो सकती है और कुछ ट्रेडिंग अवसरों को याद किया जा सकता है।

    • समाधान: बाजार की स्थिति के अनुसार सूचक पैरामीटर को समायोजित किया जा सकता है, उच्च उतार-चढ़ाव के दौरान कुछ शर्तों को कम करने या MACD और EOM की संवेदनशीलता को समायोजित करने की आवश्यकता हो सकती है।
  2. पैरामीटर अनुकूलन चुनौतीरणनीति में कई पैरामीटर हैं जिन्हें समायोजित करने की आवश्यकता है (MACD पैरामीटर, किजुन-सेन चक्र, ईओएम लंबाई, आदि) । अनुचित पैरामीटर सेटिंग्स से ऐतिहासिक डेटा को ओवरफिट किया जा सकता है और भविष्य के बाजार की स्थिति में खराब प्रदर्शन हो सकता है।

    • समाधान: अग्रिम परीक्षण और स्थिरता परीक्षण का उपयोग करें, यह सुनिश्चित करने के लिए कि पैरामीटर विभिन्न बाजार स्थितियों में प्रभावी रहे; अत्यधिक अनुकूलन से बचें, विभिन्न बाजार स्थितियों में स्थिर प्रदर्शन करने वाले पैरामीटर के संयोजन की तलाश करें।
  3. स्लिप पॉइंट और तरलता जोखिम: कम समय चक्र ट्रेडिंग में, विशेष रूप से क्रिप्टोकरेंसी जैसे अधिक अस्थिर बाजारों के लिए, स्लिप और तरलता की समस्याएं हो सकती हैं, जिससे वास्तविक निष्पादन मूल्य और रणनीति गणना मूल्य में अंतर हो सकता है।

    • समाधान: स्लाइड पॉइंट सिमुलेशन को फीडबैक में शामिल करें; रणनीति में तरलता फ़िल्टरिंग शर्तों को बढ़ाने पर विचार करें; बेहतर तरलता वाले बाजारों को प्राथमिकता दें।
  4. नुकसान को रोकने के लिए जोखिमएटीआर-आधारित स्टॉप लॉस तेजी से उतार-चढ़ाव वाले बाजारों में चरम मूल्य परिवर्तनों का सामना करने में असमर्थ हो सकते हैं, जिससे वास्तविक नुकसान उम्मीद से अधिक हो सकता है।

    • समाधान: अतिरिक्त स्टॉप लॉस सुरक्षा तंत्र जोड़ने पर विचार करें, जैसे कि एटीआर गुणांक को अत्यधिक उतार-चढ़ाव की स्थिति में स्वचालित रूप से समायोजित करना या पूर्ण अधिकतम हानि सीमा निर्धारित करना।
  5. प्रौद्योगिकी निर्भरता: रणनीति अत्यधिक तकनीकी संकेतकों पर निर्भर करती है, जो मौलिक परिवर्तनों के कारण बाजार में भारी उतार-चढ़ाव के मामले में खराब प्रदर्शन कर सकती है।

    • समाधान: महत्वपूर्ण आर्थिक आंकड़ों या घटनाओं की घोषणा से पहले व्यापार को कम करना या रोकना; बुनियादी फ़िल्टर को एकीकृत करने पर विचार करना।

रणनीति अनुकूलन दिशा

  1. सूचक पैरामीटर अनुकूलित: वर्तमान रणनीति में निश्चित संकेतक मापदंडों का उपयोग किया जाता है, आप मापदंडों के अनुकूलन समायोजन तंत्र को लागू करने पर विचार कर सकते हैं, बाजार की अस्थिरता या ट्रेडिंग चक्र के आधार पर MACD, किजुन-सेन और ईओएम के मापदंडों को स्वचालित रूप से अनुकूलित कर सकते हैं। इससे रणनीति को विभिन्न बाजार चरणों के लिए बेहतर अनुकूलित करने और समग्र स्थिरता में सुधार करने में मदद मिलेगी।

    • हाल के एन चक्रों की अस्थिरता या प्रवृत्ति की ताकत के आधार पर गतिशील रूप से समायोजित करने के लिए पैरामीटर
    • विभिन्न बाजार स्थितियों (प्रवृत्ति, उतार-चढ़ाव) के तहत इष्टतम पैरामीटर संयोजन का अध्ययन करें और स्विचिंग तंत्र बनाएं
  2. बाजार की स्थिति को वर्गीकृत करें: बाजार की स्थिति की पहचान करने वाले मॉड्यूल को जोड़कर, रणनीति ट्रेडिंग स्थितियों और जोखिम प्रबंधन मापदंडों को समायोजित कर सकती है, इस आधार पर कि वर्तमान बाजार प्रवृत्ति या अस्थिरता में है। उदाहरण के लिएः

    • अस्थिर बाजारों में फ़िल्टरिंग की शर्तें बढ़ाएं या ट्रेडिंग की आवृत्ति कम करें
    • स्पष्ट रुझानों में कुछ प्रविष्टि शर्तों को ढीला किया जा सकता है, साथ ही साथ पद धारण अवधि को बढ़ाया जा सकता है
    • बाजार की स्थिति की पहचान करने में मदद करने के लिए ADX जैसे रुझान की ताकत के संकेतकों को जोड़ने पर विचार करें
  3. ऑप्टिमाइज़ेशन के लिए रणनीति: वर्तमान रणनीति में एक निश्चित रिस्क-रिटर्न अनुपात (RRR) का उपयोग किया जाता है। 1: 1.2) रोकथाम की स्थापना, अधिक लचीले रोकथाम तंत्र को लागू करने पर विचार किया जा सकता है, जैसेः

    • आंशिक स्टॉप रणनीतिः एक निश्चित लाभ के बाद लागत मूल्य पर स्टॉप को स्थानांतरित करें, ताकि कुछ लाभ जारी रहे
    • तकनीकी स्तर पर आधारित गतिशील ठहराव (जैसे समर्थन/प्रतिरोध स्तर, फिबोनाची स्तर)
    • एटीआर की अस्थिरता का उपयोग करके गतिशील स्टॉपबॉक्स लक्ष्य सेट करें और विभिन्न अस्थिर वातावरण में स्वचालित रूप से लाभप्रदता लक्ष्य को समायोजित करें
  4. मशीन लर्निंग मॉडल को एकीकृत करनाइस लेख में, हम आपको बता रहे हैं कि हम किस तरह से इस रणनीति को विकसित कर सकते हैं:

    • मशीन लर्निंग एल्गोरिदम का उपयोग करके ऐतिहासिक पैटर्न का विश्लेषण करें और संकेतों की सफलता की संभावना का अनुमान लगाएं
    • ऐतिहासिक प्रदर्शन के आधार पर ट्रेडिंग सिग्नल के निर्माण के लिए एक गुणवत्ता वर्गीकरण प्रणाली
    • अधिक जटिल बाजार पैटर्न की पहचान करने के लिए डीप लर्निंग मॉडल का उपयोग करना
  5. समय फ़िल्टर जोड़नासमय फ़िल्टर के अलावा, समय फ़िल्टर को कम समय के दौरान व्यापार करने से बचा जा सकता है।

    • ऐतिहासिक डेटा विश्लेषण के आधार पर विभिन्न समय अवधि के लिए लेनदेन की सफलता दर
    • बहुत कम या बहुत अधिक अस्थिरता के दौरान व्यापार को निलंबित करना
    • विभिन्न बाजारों की ट्रेडिंग समय विशेषताओं को ध्यान में रखते हुए, उदाहरण के लिए क्रिप्टोक्यूरेंसी बाजार के लिए 24-घंटे के ट्रेडिंग विशेषताओं के लिए अनुकूलित

संक्षेप

शून्य-विलंब 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")