ڈوئل موونگ ایوریج مومنٹم ٹرینڈ فالونگ اور ریورسل ٹریڈنگ سسٹم

移动平均线 RSI ADX ATR 布林带 MA BB 动量 趋势 波动率
تخلیق کی تاریخ: 2025-05-26 17:32:14 آخر میں ترمیم کریں: 2025-05-26 17:32:14
کاپی: 0 کلکس کی تعداد: 270
2
پر توجہ دیں
319
پیروکار

ڈوئل موونگ ایوریج مومنٹم ٹرینڈ فالونگ اور ریورسل ٹریڈنگ سسٹم ڈوئل موونگ ایوریج مومنٹم ٹرینڈ فالونگ اور ریورسل ٹریڈنگ سسٹم

جائزہ

یہ ڈبل مساوی متحرک ٹرینڈ ٹریکنگ اور الٹ ٹریڈنگ سسٹم ایک جامع مقداری ٹریڈنگ حکمت عملی ہے جس میں ٹرینڈ ٹریکنگ اور الٹ ٹریڈنگ کے عناصر شامل ہیں۔ یہ حکمت عملی مارکیٹ کے رجحان کی سمت کا تعین کرنے کے لئے دو مختلف ادوار ((100 اور 500) کی ایک متحرک اوسط کا استعمال کرتی ہے ، جبکہ متعدد تکنیکی اشارے کو فلٹرنگ شرائط کے طور پر مربوط کرتی ہے ، بشمول آر ایس آئی ((نسبتاً کمزور اشاریہ) ، اے ڈی ایکس ((میڈین سمت اشاریہ) اور اے ٹی آر ((حقیقی طول و عرض اوسط) ۔ یہ نظام بہت سارے سمتوں میں تجارت کی اجازت دیتا ہے ، جو زیادہ سے زیادہ ہوسکتا ہے یا خالی ہوسکتا ہے ، اور مختلف مارکیٹ کے حالات کے مطابق مختلف انٹری اور آؤٹ رولز کا اطلاق ہوتا ہے۔ یہ حکمت عملی خاص طور پر متغیر مارکیٹوں جیسے کریپٹو کرنسیوں کے لئے موزوں ہے ، جو مضبوط رجحانات میں رجحانات کی پیروی کرنے کے قابل ہے ، جبکہ انتہائی oversold حالات میں خالی مواقع کی تلاش میں ہے۔

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

اس حکمت عملی کے بنیادی اصول رجحانات کی شناخت اور رفتار کی تصدیق پر مبنی دوہری توثیق کا طریقہ کار ہے:

  1. رجحانات کی شناختحکمت عملی: مارکیٹ کے رجحانات کی نشاندہی کرنے کے لئے 100 اور 500 دوروں کی متحرک اوسط ((اختیاری ای ایم اے یا ایس ایم اے) کا استعمال کریں۔ جب ایم اے 100 ایم اے 500 سے اوپر ہوتا ہے تو اسے اوپر کی طرف بڑھتا ہوا سمجھا جاتا ہے۔ اس کے برعکس ، یہ نیچے کی طرف بڑھ سکتا ہے۔

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

    • MA100 اور MA500 دونوں سے زیادہ قیمت ہونا ضروری ہے
    • رجحان فلٹرنگ کے اختیارات: MA100 > MA500
    • اختیاری RSI فلٹرنگ کی شرائط: RSI اس کے ہموار اوسط سے زیادہ ہونا ضروری ہے
    • اختیاری ADX فلٹرنگ کی شرائط: رجحان کی طاقت کو یقینی بنانے کے لئے ADX کو اس کی ہموار اوسط سے زیادہ ہونا ضروری ہے
    • اختیاری اے ٹی آر فلٹرنگ کی شرائط: اے ٹی آر کو اس کی ہموار اوسط سے زیادہ ہونا چاہئے تاکہ کافی اتار چڑھاؤ کو یقینی بنایا جاسکے
  3. خالی سر داخلے کی شرط

    • قیمتیں MA100 اور MA500 سے کم ہونی چاہئیں۔
    • قیمتوں کو بلین کے نیچے سے نیچے ہونا چاہئے (اس سے ظاہر ہوتا ہے کہ یہ زیادہ فروخت ہوا ہے)
    • RSI مقررہ حد سے کم ہونا چاہئے (ڈیفالٹ 33 ، جو oversold کی نشاندہی کرتا ہے)
    • اختیاری اے ٹی آر فلٹرنگ شرائط
    • مضبوط صعودی رکاوٹ: اگر ایم اے 100 ایم اے 500 سے زیادہ مقررہ فیصد سے زیادہ ہے تو ، خالی جگہ میں نہ جائیں ((مضبوط صعودی رجحان میں کم کرنے سے گریز کریں))
  4. خطرے کا انتظام اور باہر نکلنے کی حکمت عملی

    • کثیر سر اسٹاپ: داخلہ قیمت سے نیچے فی صد (ڈیفالٹ 3٪)
    • قیمتیں ایم اے 500 سے نیچے گرنے کے بعد:
    • خالی سر کا نقصان: داخلہ قیمت کے اوپر فی صد (ڈیفالٹ 3٪)
    • خالی سر اسٹاپ: داخلہ قیمت سے کم فی صد پر سیٹ کریں (ڈیفالٹ 4٪)
    • فنڈ مینجمنٹ: ہر ٹرانزیکشن پر ڈیفالٹ اکاؤنٹ میں 100٪ فنڈ استعمال کیا جاتا ہے ، جس میں ایک بار پرامڈ لیپ ٹاپ کی اجازت دی جاتی ہے

اس ڈیزائن کی وجہ سے حکمت عملی کو رجحان مارکیٹ میں بڑے پیمانے پر مواقع پر قبضہ کرنے کی اجازت دی گئی ہے، جبکہ اوورلوڈ کے حالات میں موڑ کی تلاش میں.

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

  1. انتہائی موافقت پذیرحکمت عملی: متعدد اختیاری فلٹرز ((آر ایس آئی ، اے ڈی ایکس ، اے ٹی آر) کے ذریعہ انتہائی تخصیص کی صلاحیت فراہم کی گئی ہے ، جو مختلف مارکیٹ کے ماحول اور تاجر کے انداز کے مطابق ہے۔ صارف ان فلٹرز کو موجودہ مارکیٹ کی صورتحال کے مطابق لچکدار طور پر آن یا آف کرسکتا ہے۔

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

  3. ذہانت کے رجحانات کا تعین: ڈبل مساوی لائن سسٹم ((MA100 اور MA500) کا استعمال کرتے ہوئے رجحان کا زیادہ قابل اعتماد فیصلہ فراہم کیا جاتا ہے ، جو ایک ہی مساوی لائن سسٹم کے مقابلے میں جعلی توڑ کو بہتر طور پر فلٹر کرتا ہے۔

  4. متحرک اتار چڑھاو کی شرح کے مطابق: اے ٹی آر فلٹر کے ذریعہ ، حکمت عملی خود بخود مارکیٹ میں اتار چڑھاؤ کی تبدیلیوں کے مطابق ڈھال سکتی ہے ، کم اتار چڑھاؤ والے ماحول میں بار بار تجارت سے بچ سکتی ہے ، اور غیر ضروری تجارت کے اخراجات کو کم کرسکتی ہے۔

  5. پیچھا کرنے والے کی طاقت کو روکنے کے لئےہوائی ٹریڈنگ نے “مضبوط اضافے کی روک تھام” کا طریقہ کار ترتیب دیا ہے ، جب ایم اے 100 ایم اے 500 سے زیادہ فیصد سے زیادہ ہو تو اس میں کمی پر پابندی عائد کردی گئی ہے ، جس سے مضبوط اضافے کی صورتحال میں الٹا ہونے کے خطرے سے بچنے میں مدد ملتی ہے۔

  6. ایک سے زیادہ توثیق کا طریقہ کار: داخلہ سگنل کو متعدد تکنیکی اشارے کی مشترکہ تصدیق کی ضرورت ہوتی ہے ، جس سے جعلی سگنل کا امکان نمایاں طور پر کم ہوتا ہے اور حکمت عملی کی استحکام میں اضافہ ہوتا ہے۔

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

اسٹریٹجک رسک

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

  2. تاخیر کا خطرہ: چلتی اوسط جیسے اشارے بنیادی طور پر پیچھے رہ جانے والے اشارے ہیں ، اور شدید اتار چڑھاؤ والی منڈیوں میں موڑ کے نقطہ کو بروقت گرفت میں نہیں لایا جاسکتا ہے ، جس کی وجہ سے داخلے یا باہر نکلنے میں تاخیر ہوتی ہے۔ اعلی اتار چڑھاؤ والی منڈیوں میں مناسب طریقے سے چلتی اوسط کا دورانیہ کم کرنے یا دوسرے اہم اشارے شامل کرنے کی سفارش کی جاتی ہے۔

  3. ٹرینڈ ٹرانسمیشن کی خراب کارکردگی: زلزلے کی منڈی یا رجحان کی تبدیلی کے دوران ، حکمت عملی میں اکثر غلط سگنل پیدا ہوسکتے ہیں ، جس کی وجہ سے مسلسل نقصان ہوتا ہے۔ اس کا حل مارکیٹ کی حالت کی شناخت کا طریقہ کار شامل کرنا ہے ، جو زلزلے کی منڈی کی نشاندہی کرنے پر خود بخود پوزیشنوں کو کم کرتا ہے یا تجارت کو روکتا ہے۔

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

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

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

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

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

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

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

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

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

  6. جذباتی اشارے کو ضم کرنا: مارکیٹ کے جذبات کے اشارے کو اضافی فلٹرز کے طور پر شامل کریں ، جیسے تجارت کا حجم ، فنڈ ریٹ ((مستقل معاہدوں کے لئے) یا فیوچر پریمیم ، تاکہ انتہائی جذباتی حالت میں الٹا تجارت سے بچ سکے۔ یہ اشارے مارکیٹ کے گرم یا سرد ہونے کے انتباہی سگنل کے طور پر کام کرسکتے ہیں۔

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

خلاصہ کریں۔

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

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

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Momentum Long + Short Strategy (BTC 3H)", overlay=true,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     initial_capital=1000,
     commission_type=strategy.commission.percent,
     commission_value=0.1,
     slippage=1,
     pyramiding=1)


// ==============================================================================
// === LONG TRADE SETTINGS
// ==============================================================================
enableLongs     = input.bool(true,  "Enable Long Trades", group="LONG TRADE SETTINGS")
slPercentLong   = input.float(3.0, "Long Stop Loss %", minval=0.1, group="LONG TRADE SETTINGS")

useRSIFilter     = input.bool(false, "Enable RSI Filter", group="LONG FILTER SETTINGS")
useADXFilter     = input.bool(false, "Enable ADX Filter", group="LONG FILTER SETTINGS")
useATRFilter     = input.bool(false, "Enable ATR Filter", group="LONG FILTER SETTINGS")
useTrendFilter   = input.bool(true,  "Require MA100 > MA500", group="LONG FILTER SETTINGS")

smoothType      = input.string("EMA", "Smoothing Type", options=["EMA", "SMA"], group="LONG FILTER SETTINGS")
smoothingLength = input.int(100, "Smoothing Length (for filters)", group="LONG FILTER SETTINGS")

rsiLengthLong   = input.int(14, "RSI Length", group="RSI FILTER")
adxLength       = input.int(14, "ADX Length", group="ADX FILTER")
atrLength       = input.int(14, "ATR Length", group="ATR FILTER")


// ==============================================================================
// === SHORT TRADE SETTINGS
// ==============================================================================
enableShorts         = input.bool(false, "Enable Short Trades", group="SHORT TRADE SETTINGS")
slPercentShort       = input.float(3.0, "Short Stop Loss %", minval=0.1, group="SHORT TRADE SETTINGS")
tpPercentShort       = input.float(4.0, "Short Take Profit %", minval=0.1, group="SHORT TRADE SETTINGS")
rsiLengthShort       = input.int(14, "RSI Length", group="SHORT FILTER SETTINGS")
rsiThresholdShort    = input.float(33, "RSI Threshold", minval=1, maxval=100, group="SHORT FILTER SETTINGS")
bbLength             = input.int(20, "Bollinger Band Length", group="SHORT FILTER SETTINGS")
useATRFilterShort    = input.bool(true, "Enable ATR Filter (Short)", group="SHORT FILTER SETTINGS")
useStrongUptrendBlock = input.bool(true, "Block Shorts if MA100 > MA500 by (%)", group="SHORT FILTER SETTINGS")
shortTrendGapPct     = input.float(2.0, "Threshold (%) for Blocking Shorts", minval=0.1, group="SHORT FILTER SETTINGS")


// ==============================================================================
// === COMMON INDICATORS
// ==============================================================================
ma100 = smoothType == "EMA" ? ta.ema(close, 100) : ta.sma(close, 100)
ma500 = smoothType == "EMA" ? ta.ema(close, 500) : ta.sma(close, 500)
priceAboveMAs = close > ma100 and close > ma500
trendAlignment = not useTrendFilter or ma100 > ma500

plot(ma100, title="MA 100", color=color.orange)
plot(ma500, title="MA 500", color=color.blue)


// ==============================================================================
// === LONG FILTER LOGIC
// ==============================================================================
rsiLong = ta.rsi(close, rsiLengthLong)
rsiSmooth = smoothType == "EMA" ? ta.ema(rsiLong, smoothingLength) : ta.sma(rsiLong, smoothingLength)
rsiPass = not useRSIFilter or rsiLong > rsiSmooth

dmi(len) =>
    up       = ta.change(high)
    down     = -ta.change(low)
    plusDM   = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM  = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur     = ta.rma(ta.tr, len)
    plusDI   = 100 * ta.rma(plusDM, len) / trur
    minusDI  = 100 * ta.rma(minusDM, len) / trur
    dx       = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
    ta.rma(dx, len)

adx = dmi(adxLength)
adxSmooth = smoothType == "EMA" ? ta.ema(adx, smoothingLength) : ta.sma(adx, smoothingLength)
adxPass = not useADXFilter or adx > adxSmooth

atr = ta.atr(atrLength)
atrSmooth = smoothType == "EMA" ? ta.ema(atr, smoothingLength) : ta.sma(atr, smoothingLength)
atrPass = not useATRFilter or atr > atrSmooth


// ==============================================================================
// === SHORT FILTER LOGIC
// ==============================================================================
rsiShort = ta.rsi(close, rsiLengthShort)
bbBasis = ta.sma(close, bbLength)
bbDev   = ta.stdev(close, bbLength)
bbLower = bbBasis - bbDev * 2
priceBelowBB = close < bbLower
priceBelowMAs = close < ma100 and close < ma500
rsiOversold = rsiShort < rsiThresholdShort

atrShort = ta.atr(atrLength)
atrShortSmoothed = smoothType == "EMA" ? ta.ema(atrShort, smoothingLength) : ta.sma(atrShort, smoothingLength)
atrShortPass = not useATRFilterShort or atrShort > atrShortSmoothed

emaGapTooWide = (ma100 - ma500) / ma500 * 100 > shortTrendGapPct
strongUptrendBlock = not useStrongUptrendBlock or not emaGapTooWide


// ==============================================================================
// === ENTRY CONDITIONS
// ==============================================================================
longCondition = enableLongs and priceAboveMAs and trendAlignment and rsiPass and adxPass and atrPass
shortCondition = enableShorts and priceBelowMAs and priceBelowBB and rsiOversold and atrShortPass and strongUptrendBlock

if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.entry("Short", strategy.short)


// ==============================================================================
// === EXIT CONDITIONS
// ==============================================================================
longStop = strategy.position_avg_price * (1 - slPercentLong / 100)
strategy.exit("SL Long", from_entry="Long", stop=longStop)

if strategy.position_size > 0 and close < ma500
    strategy.close("Long", comment="TP Below MA500")

shortStop = strategy.position_avg_price * (1 + slPercentShort / 100)
shortTP   = strategy.position_avg_price * (1 - tpPercentShort / 100)

strategy.exit("SL/TP Short", from_entry="Short", stop=shortStop, limit=shortTP)