زیرو-لیگ 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 کی ہموار منتقل اوسط
    • قطب نما گراف: MACD لائن اور سگنل لائن کے فرق
  2. پہلی نظر توازن گراف بیس لائن ((Kijun-sen): متحرک سپورٹ / مزاحمت اور رجحان فلٹر کے طور پر ، کیجون سین لائن مارکیٹ کی غالب سمت کی تصدیق کے لئے استعمال کی جاتی ہے۔ اس کی حساب کتاب ڈونگ چیان چینل اصول پر مبنی ہے ، جس میں ایک خاص دورانیے میں اعلی ترین اور کم ترین قیمتوں کا اوسط لیا جاتا ہے:

    • baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
  3. موبائل کی سہولت کے اشارے (EOM)EOM: یہ ایک ٹرانزیکشن کی مقدار پر مبنی اوسیلیٹر ہے جو قیمتوں میں تبدیلی کی مشکل کی پیمائش کرکے قیمتوں کی نقل و حرکت کی تصدیق کرتا ہے۔ EOM کو مندرجہ ذیل فارمولے کے ذریعہ شمار کیا جاتا ہے:

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

اس حکمت عملی میں داخلے کی شرائط ان تین اشارے کے اشارے کو یکجا کرتی ہیں:

متعدد داخلے کی شرائط

  • MACD لائن کے ذریعے سگنل لائن ((ta.crossover(ZeroLagMACD, signal)
  • ایم اے سی ڈی لائنیں کالمڈ چارٹ سے نیچے ہیںZeroLagMACD < hist
  • کیجون سین سے زیادہ قیمت))close > baseLine
  • EOM صفر سے بڑا ہےeom > 0

خالی سر داخلے کی شرط

  • MACD لائن کے نیچے سگنل لائن کے ذریعے ((ta.crossunder(ZeroLagMACD, signal)
  • ایم اے سی ڈی لائنیں کالم چارٹ سے اوپر ہیںZeroLagMACD > hist
  • کیجون سین سے کم قیمت))close < baseLine
  • EOM صفر سے کم ہےeom < 0

خطرے کے انتظام کے معاملے میں ، اس حکمت عملی میں اے ٹی آر پر مبنی متحرک اسٹاپ لوڈ کا استعمال کیا گیا ہے ، جس میں موجودہ اے ٹی آر کا 2.5 گنا اسٹاپ لوڈ فاصلہ ہے ، اور اس میں 1:1.2 کا فکسڈ رسک ریٹرن ریٹرن ترتیب دیا گیا ہے ، اس بات کو یقینی بناتے ہوئے کہ ہر تجارت میں معقول منافع کا ہدف ہے۔

اسٹریٹجک فوائد

  1. ایک سے زیادہ تصدیق نظاماس حکمت عملی میں تین اشارے شامل ہیں جن کی مختلف خصوصیات ہیں (موجب ، رفتار اور حجم) ، حکمت عملی کو جعلی سگنل کو مؤثر طریقے سے فلٹر کرنے کی صلاحیت حاصل ہے ، اور صرف اعلی امکانات کے ساتھ تجارت کے مواقع پر ہی داخل ہوتا ہے ، جس سے تجارت کی کامیابی کی شرح میں نمایاں اضافہ ہوتا ہے۔

  2. پسماندگی کو کم کرنا: روایتی MACD کے بجائے صفر تاخیر MACD کا استعمال کرتے ہوئے ، مارکیٹ کے موڑ کے نقطہ کو پہلے سے پکڑنے کے قابل ، روایتی اشارے میں عام تاخیر کے مسائل کو کم کرنے اور تاجروں کو مثالی داخلے کے نقطہ کے قریب لانے کے قابل۔

  3. انتہائی موافقت پذیر: حکمت عملی میں تمام پیرامیٹرز کو مختلف مارکیٹ کے حالات ، تجارت کی اقسام اور وقت کے دورانیوں کے مطابق اپنی مرضی کے مطابق ایڈجسٹ کیا جاسکتا ہے ، جس سے یہ انتہائی قابل اطلاق ہوتا ہے۔ بنیادی اشارے بشمول MACD سائیکل پیرامیٹرز ، کیجون سین سائیکل ، EOM لمبائی وغیرہ کو ہدف کے مطابق بہتر بنایا جاسکتا ہے۔

  4. اچھی طرح سے تیار کردہ خطرے کے انتظام کا نظام

    • متحرک اسٹاپ ڈیزائن ((ATR پر مبنی اتار چڑھاؤ کی شرح میں خود کو ایڈجسٹ کرنا) اس بات کو یقینی بناتا ہے کہ اسٹاپ پوزیشن خود بخود مارکیٹ میں اتار چڑھاؤ کے مطابق ایڈجسٹ ہوجائے
    • فکسڈ رسک ٹو ریٹرن ریٹ ((1: 1) 2) ایک متفقہ منافع کی توقع فراہم کرتا ہے
    • حکمت عملی صرف اس صورت میں پوزیشن کھولتی ہے جب متعدد شرائط ایک ساتھ ملیں ، جس سے غلط سگنل کا خطرہ نمایاں طور پر کم ہوجاتا ہے۔
  5. جامع مارکیٹ تجزیہحکمت عملی قیمت کی حرکیات (MACD) ، قیمت کی ساخت (Kijun-sen) اور حجم کی تصدیق (EOM) کو مدنظر رکھتے ہوئے ، مارکیٹ کو متعدد جہتوں سے تجزیہ کرتی ہے ، جس سے زیادہ جامع تجارتی فیصلہ سازی کا نظام تشکیل دیا جاتا ہے۔

  6. بصری افعالحکمت عملی: حکمت عملی میں سگنل کی نشاندہی ، اشارے کی لائن ڈسپلے اور انفارمیشن پینل سمیت بصری اختیارات کی فراہمی کی گئی ہے ، جس سے تاجروں کو تجارتی سگنل اور موجودہ مارکیٹ کی حالت کو بصری طور پر سمجھنے اور اس کی نگرانی کرنے میں مدد ملتی ہے۔

اسٹریٹجک رسک

  1. غلط سگنل کا خطرہ: اگرچہ حکمت عملی میں متعدد اشارے کی تصدیق کا استعمال کیا جاتا ہے ، لیکن اعلی اتار چڑھاؤ یا مارکیٹ میں توازن کے دوران ، غلط سگنل ہوسکتے ہیں۔ خاص طور پر جب مارکیٹ میں قلیل وقت میں بار بار سمت تبدیل ہوتی ہے تو ، متعدد اشارے کی تصدیق سے ٹریڈنگ کے اشارے کم ہوسکتے ہیں ، اور کچھ ٹریڈنگ کے مواقع ضائع ہوجاتے ہیں۔

    • حل: مارکیٹ کی حالت کے مطابق اشارے کے پیرامیٹرز کو ایڈجسٹ کیا جاسکتا ہے ، اعلی اتار چڑھاؤ کے دوران کچھ شرائط کو نرم کرنے یا MACD اور EOM کی حساسیت کو ایڈجسٹ کرنے کی ضرورت پڑسکتی ہے۔
  2. پیرامیٹرز کو بہتر بنانے کے چیلنجحکمت عملی میں متعدد پیرامیٹرز ہیں جن کو ایڈجسٹ کرنے کی ضرورت ہے (MACD پیرامیٹرز ، کیجون سین دورانیہ ، EOM لمبائی وغیرہ) ۔ غلط پیرامیٹرز کی ترتیب سے تاریخی اعداد و شمار کو زیادہ سے زیادہ مماثل کیا جاسکتا ہے ، جو مستقبل کے بازار کے ماحول میں خراب کارکردگی کا مظاہرہ کرے گا۔

    • حل: فارورڈ ٹیسٹنگ اور استحکام کی جانچ کو اپنانا ، اس بات کو یقینی بنانا کہ پیرامیٹرز مختلف مارکیٹ کے حالات میں موثر رہ سکتے ہیں۔ زیادہ سے زیادہ اصلاح سے گریز کریں ، متعدد مارکیٹ کے حالات میں مستحکم کارکردگی کا مظاہرہ کرنے والے پیرامیٹرز کا مجموعہ تلاش کریں۔
  3. سلائڈ پوائنٹس اور لیکویڈیٹی رسک: کم ٹائم سائیکل ٹریڈنگ میں ، خاص طور پر کریپٹو کرنسیوں جیسے زیادہ اتار چڑھاؤ والے بازاروں میں ، سلائڈ پوائنٹس اور لیکویڈیٹی کے مسائل کا سامنا کرنا پڑ سکتا ہے ، جس کی وجہ سے حکمت عملی کے حساب کتاب کی قیمتوں کے مقابلے میں اصل عملدرآمد کی قیمتوں میں فرق پیدا ہوتا ہے۔

    • حل: ریٹرننگ میں سلائڈ پوائنٹ سمولیشن کو شامل کریں۔ حکمت عملی میں لیکویڈیٹی فلٹرنگ شرائط کو بڑھانے پر غور کریں۔ زیادہ لیکویڈیٹی والے بازاروں میں تجارت کو ترجیح دیں۔
  4. نقصانات کو روکنے کا خطرہ: تیزی سے اتار چڑھاؤ والی مارکیٹوں میں ، اے ٹی آر پر مبنی اسٹاپ نقصانات قیمتوں میں انتہائی تبدیلیوں کا مقابلہ کرنے میں ناکام ہوسکتے ہیں ، جس کی وجہ سے اصل نقصانات توقع سے زیادہ ہوجاتے ہیں۔

    • حل: اضافی اسٹاپ نقصان کے تحفظ کے طریقہ کار کو شامل کرنے پر غور کریں ، جیسے کہ انتہائی اتار چڑھاؤ کے حالات میں اے ٹی آر ضرب کو خود بخود ایڈجسٹ کرنا یا مطلق زیادہ سے زیادہ نقصان کی حد طے کرنا۔
  5. ٹیکنالوجی پر انحصاریہ حکمت عملی تکنیکی اشارے پر بہت زیادہ انحصار کرتی ہے اور بنیادی تبدیلیوں کی وجہ سے مارکیٹ میں شدید اتار چڑھاو کی صورت میں خراب کارکردگی کا مظاہرہ کرسکتی ہے۔

    • حل: اہم اقتصادی اعداد و شمار یا واقعات کی اشاعت سے پہلے تجارت کو کم کرنا یا روکنا؛ بنیادی فلٹرز کو مربوط کرنے پر غور کرنا۔

حکمت عملی کی اصلاح کی سمت

  1. انڈیکس پیرامیٹرز خود کو اپنانے: موجودہ حکمت عملی ایک مقررہ اشارے پیرامیٹرز کا استعمال کرتی ہے ، جس میں پیرامیٹرز کو خود بخود ایڈجسٹ کرنے کا طریقہ کار پر غور کیا جاسکتا ہے ، مارکیٹ میں اتار چڑھاؤ یا ٹریڈنگ سائیکل کے مطابق MACD ، کیجون سین اور EOM کے پیرامیٹرز کو خود بخود بہتر بنایا جاسکتا ہے۔ اس سے حکمت عملی کو مختلف مارکیٹ کے مراحل میں بہتر طور پر ڈھالنے اور مجموعی طور پر استحکام کو بہتر بنانے میں مدد ملے گی۔

    • پیرامیٹرز جو حالیہ N سائیکلوں کی بنیاد پر اتار چڑھاؤ کی شرح یا رجحان کی شدت کو متحرک طور پر ایڈجسٹ کرسکتے ہیں
    • مارکیٹ کی مختلف حالتوں (جیسے رجحانات ، اتار چڑھاؤ) کے تحت بہترین پیرامیٹرز کا مطالعہ کریں اور سوئچنگ میکانزم بنائیں
  2. مارکیٹ کی درجہ بندی میں اضافہ: مارکیٹ کی حیثیت کی شناخت کے ماڈیول کو شامل کرکے ، حکمت عملی تجارت کے حالات اور خطرے کے انتظام کے پیرامیٹرز کو ایڈجسٹ کرسکتی ہے کہ آیا موجودہ مارکیٹ رجحان یا ہلچل کی حالت میں ہے۔ مثال کے طور پر:

    • فلٹرنگ کی شرائط میں اضافہ یا اتار چڑھاؤ والے بازاروں میں ٹریڈنگ کی فریکوئنسی میں کمی
    • واضح رجحانات میں کچھ داخلے کی شرائط میں نرمی کی جاسکتی ہے ، جبکہ پوزیشن ہولڈنگ کی مدت میں توسیع کی جاسکتی ہے
    • مارکیٹ کی حالت کی شناخت میں مدد کے لئے رجحان کی طاقت کے اشارے جیسے ADX شامل کرنے پر غور کریں
  3. آپٹمائزڈ روک تھام کی حکمت عملی: موجودہ حکمت عملی کا استعمال کرتے ہوئے فکسڈ رسک ریٹرن ریٹ ((1: 1،2) روک تھام کی ترتیب ، زیادہ لچکدار روک تھام کے طریقہ کار پر غور کیا جاسکتا ہے ، جیسے:

    • جزوی اسٹاپ کی حکمت عملی: منافع کے ایک خاص حد تک پہنچنے کے بعد اسٹاپ نقصان کو لاگت کی قیمت پر منتقل کریں ، تاکہ منافع کا ایک حصہ چلتا رہے
    • تکنیکی سطح پر مبنی متحرک اسٹاپ (جیسے سپورٹ / مزاحمت کی سطح ، فبونیکی سطح)
    • اے ٹی آر کی اتار چڑھاؤ کی شرح کا استعمال کرتے ہوئے متحرک اسٹاپ ٹارگٹ سیٹ کریں ، مختلف اتار چڑھاؤ والے ماحول میں خود بخود منافع کے اہداف کو ایڈجسٹ کریں
  4. مشین لرننگ ماڈل کو ضم کرنااس کے علاوہ ، یہ بھی غور کیا گیا ہے کہ مشین لرننگ ٹکنالوجی کو حکمت عملی کی پیش گوئی کی صلاحیت کو بڑھانے کے لئے کس طرح استعمال کیا جائے۔

    • مشین لرننگ الگورتھم کا استعمال کرتے ہوئے تاریخی نمونوں کا تجزیہ کرنے کے لئے سگنل کی کامیابی کا امکان پیش گوئی
    • تاریخی کارکردگی کی بنیاد پر ٹریڈنگ سگنل کی تعمیر کے لئے کوالٹی درجہ بندی کا نظام
    • گہری سیکھنے کے ماڈل کا استعمال کرتے ہوئے مارکیٹ کے زیادہ پیچیدہ نمونوں کی شناخت کرنا
  5. ٹائم فلٹر شامل کرنا: مارکیٹ کے مختلف اوقات میں مختلف طرز عمل کی خصوصیات ہوسکتی ہیں ، اور وقت کے فلٹرز کو شامل کرنے سے غیر موثر تجارت کے اوقات میں تجارت سے بچا جاسکتا ہے:

    • تاریخی اعداد و شمار کے تجزیہ کے مطابق مختلف ٹائم فریموں میں ٹرانزیکشن کی کامیابی کی شرح
    • کم یا زیادہ اتار چڑھاؤ کے دوران تجارت کو روکنا
    • مختلف مارکیٹوں میں ٹریڈنگ کے اوقات کی خصوصیات پر غور کرنا ، مثال کے طور پر کریپٹوکرنسی مارکیٹ میں 24 گھنٹے ٹریڈنگ کی خصوصیات کو بہتر بنانا

خلاصہ کریں۔

صفر تاخیر MACD اور کلاؤڈ چارٹ یکساں لائن متحرک انضمام ٹریڈنگ سسٹم ایک عمدہ ڈیزائن شدہ مقداری ٹریڈنگ حکمت عملی ہے ، جو صفر تاخیر MACD ، کیجون سین اور EOM کے تین تکنیکی اشارے کو مربوط کرکے ایک کثیر جہتی تجارتی سگنل کی توثیق کا نظام تشکیل دیتا ہے۔ اس حکمت عملی میں داخلے کے نقطہ نظر پر سخت متعدد تصدیق کا طریقہ کار استعمال کیا گیا ہے ، جو خطرے کے انتظام میں متحرک اسٹاپ نقصان اور فکسڈ رسک ریٹرن تناسب کو جوڑتا ہے ، جس سے ٹریڈنگ کے عمل پر مکمل کنٹرول حاصل ہوتا ہے۔

حکمت عملی کا بنیادی فائدہ اس کے ڈیزائن کے تصور کو کم کرنے اور کثیر اشارے کے ساتھ مل کر کام کرنے کے طریقہ کار میں ہے ، جس سے یہ تیزی سے بدلتے ہوئے بازاروں میں اعلی امکان کے تجارتی مواقع کو پکڑنے کے قابل بناتا ہے۔ اس کے علاوہ ، مکمل طور پر مرضی کے مطابق پیرامیٹرز کی ترتیب سے تاجر کو مختلف مارکیٹ کے حالات اور ذاتی خطرے کی ترجیحات کے مطابق لچکدار ایڈجسٹمنٹ کی اجازت ملتی ہے۔

اگرچہ اس حکمت عملی میں کچھ ممکنہ خطرات موجود ہیں ، جیسے پیرامیٹرز کی اصلاح کے چیلنج اور غلط سگنل کا خطرہ ، لیکن اس حکمت عملی کی استحکام اور موافقت کو مزید بہتر بنانے کے لئے تجویز کردہ اصلاحی سمتوں جیسے اشارے پیرامیٹرز کی موافقت ، مارکیٹ کی حالت کی درجہ بندی اور مشین لرننگ انٹیگریشن کا استعمال کیا جاسکتا ہے۔

مجموعی طور پر ، یہ ایک تصوراتی طور پر اعلی درجے کا ، ساختہ ، مقداری تجارتی نظام ہے جو تکنیکی تجزیہ کی بنیاد رکھنے والے تاجروں کے لئے موزوں ہے ، خاص طور پر ان سرمایہ کاروں کے لئے جو اعلی معیار کے تجارتی سگنل کی تلاش میں ہیں نہ کہ ہائی فریکوئینسی ٹریڈنگ کے ل.۔ معقول پیرامیٹرز کی ایڈجسٹمنٹ اور مسلسل اصلاح کے ذریعہ ، اس حکمت عملی میں مارکیٹ کے مختلف ماحول میں مستحکم تجارتی کارکردگی فراہم کرنے کی صلاحیت موجود ہے۔

حکمت عملی کا ماخذ کوڈ
/*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")