ایک سے زیادہ کنورجنگ سوئنگ ہنٹر کی حکمت عملی: ایڈوانس اسکورنگ سسٹم کی بنیاد پر کم ٹائم فریم ٹرینڈ کیپچرنگ

MACD RSI 多重会聚 趋势捕捉 摆动交易 计分系统 交易策略 低时间框架 价格行为 技术分析 动量指标 趋势识别 风险管理
تخلیق کی تاریخ: 2025-06-30 13:46:39 آخر میں ترمیم کریں: 2025-06-30 13:46:39
کاپی: 0 کلکس کی تعداد: 239
2
پر توجہ دیں
319
پیروکار

ایک سے زیادہ کنورجنگ سوئنگ ہنٹر کی حکمت عملی: ایڈوانس اسکورنگ سسٹم کی بنیاد پر کم ٹائم فریم ٹرینڈ کیپچرنگ ایک سے زیادہ کنورجنگ سوئنگ ہنٹر کی حکمت عملی: ایڈوانس اسکورنگ سسٹم کی بنیاد پر کم ٹائم فریم ٹرینڈ کیپچرنگ

جائزہ

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

اس حکمت عملی میں وسیع پیمانے پر ریٹائرمنٹ کے بعد بہتر اشارے کے پیرامیٹرز کا استعمال کیا گیا ہے ، بشمول خاص طور پر تشکیل شدہ MACD ((3، 10، 3) اور RSI ((21)) ، جو معیاری ترتیب سے زیادہ تیزی سے مارکیٹ میں تبدیلیوں کو اپنانے کے لئے بہتر ہیں۔ اس حکمت عملی میں داخلے اور باہر نکلنے کے لئے کم از کم 13 پوائنٹس کی اعلی اسکور کی حد کی ضرورت ہوتی ہے ، اس بات کو یقینی بنانا کہ صرف اعلی ساکھ والے سگنل ہی تجارت کو متحرک کریں گے۔ ریٹائرمنٹ میں ، اس حکمت عملی نے 200 فیصد سے زیادہ منافع بخش کارکردگی کا مظاہرہ کیا ، جس نے مارکیٹ میں اتار چڑھاؤ کے نمونوں کو پکڑنے میں اس کی تاثیر کو ثابت کیا۔

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

کثیر اجتماع جھولی شکاری حکمت عملی کا مرکز اس کا جامع اسکور سسٹم ہے جو متعدد تکنیکی شرائط کا مقداری جائزہ لے کر تجارت کے وقت کا تعین کرتا ہے۔ داخلہ اسکور سسٹم مندرجہ ذیل چار اہم اجزاء پر مشتمل ہے:

  1. RSI سگنل(زیادہ سے زیادہ 5 پوائنٹس):

    • RSI < 30: + 2 پوائنٹس
    • RSI < 25: + 2 پوائنٹس
    • RSI اوپر کی طرف: + 1 پوائنٹ
  2. MACD سگنل(زیادہ سے زیادہ 8 پوائنٹس):

    • MACD صفر سے نیچے: + 1 پوائنٹ
    • MACD اوپر کی طرف: +2 پوائنٹس
    • MACD کالم چارٹ میں بہتری: +2 پوائنٹس
    • MACD: +3 پوائنٹس
  3. قیمتوں کا رویہ(زیادہ سے زیادہ 4 پوائنٹس):

    • لمبی نیچے سائے لائن ((> 50٪): + 2 پوائنٹس
    • چھوٹے ادارے ((<30٪): + 1 پوائنٹ
    • + 1 پوائنٹ
  4. پیٹرن کی شناخت(زیادہ سے زیادہ 8 پوائنٹس):

    • RSI: +4 پوائنٹس
    • فوری بحالی موڈ: + 2 پوائنٹس
    • واپسی کی تصدیق: +4 پوائنٹس

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

حکمت عملی کا ایک اور اہم جزو اس کی اصلاح شدہ اشارے کی پیرامیٹرز ہیں:

  • MACD ترتیب: معیاری ((12، 26، 9) سے زیادہ تیز تر ترتیب ، سگنل کا پہلے سے پتہ لگانے کے ساتھ ساتھ قابل اعتماد بھی
  • RSI کنفیگریشن ((21 سائیکل)14 سائیکل RSI سے کم جھوٹے سگنل ، لیکن oversold حالات کو مؤثر طریقے سے پکڑنے کے لئے

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

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

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

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

  3. بہتر وقت کی حساسیت: بہتر MACD ((3، 10، 3) اور RSI ((21) پیرامیٹرز کا استعمال کرتے ہوئے، حکمت عملی کو قیمت کی نقل و حرکت میں تبدیلیوں کو پکڑنے کے قابل بناتا ہے، جبکہ مارکیٹ کے شور کو فلٹر کرنے کے لئے بہتر وقت کی حساسیت فراہم کرتا ہے.

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

  5. اعلی درجے کی نمائش کا نظامحکمت عملی: اسکور ڈسپلے سسٹم فراہم کرتا ہے ، جس میں سبز ٹیگ ((داخلہ اسکور ≥ 10 پوائنٹس) اور سرخ ٹیگ ((باہر نکلنے کا اسکور ≥ 10 پوائنٹس) ، اور واضح تجارت میں داخلہ / باہر نکلنے کے نشانات شامل ہیں ، تاکہ تاجر کو نظام کے کام کو واضح طور پر دیکھ سکے۔

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

اسٹریٹجک رسک

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

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

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

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

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

اصلاح کی سمت

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

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

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

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

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

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

خلاصہ کریں۔

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

حکمت عملی مارکیٹ میں اتار چڑھاؤ کو مؤثر طریقے سے پکڑنے کے قابل ہے ، خاص طور پر اعلی اتار چڑھاؤ والی مارکیٹوں میں ، بہتر MACD ((3 ، 10 ، 3) اور RSI ((21)) پیرامیٹرز کے ساتھ ، سخت داخلے اور باہر نکلنے کے حالات کے ساتھ مل کر۔ بلٹ ان رسک مینجمنٹ افعال اور بصری ٹولز حکمت عملی کی عملی اور صارف دوستی کو مزید بڑھا دیتے ہیں۔

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

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-06-30 00:00:00
end: 2025-06-28 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":50000000}]
*/

//   ____                    _     _______            _ _               _____  
//  / __ \                  | |   |__   __|          | (_)             |  __ \ 
// | |  | |_   _  __ _ _ __ | |_     | |_ __ __ _  __| |_ _ __   __ _  | |__) | 
// | |  | | | | |/ _` | '_ \| __|    | | '__/ _` |/ _` | | '_ \ / _` | |  ___/ '__/ _ \ 
// | |__| | |_| | (_| | | | | |_     | | | | (_| | (_| | | | | | (_| | | |   | | | (_) |
//  \___\_\\__,_|\__,_|_| |_|\__|    |_|_|  \__,_|\__,_|_|_| |_|\__, | |_|   |_|  \___/
//                                                               __/ |     
//                                                              |___/   
// Quant Trading Pro
//@version=6
strategy("Multi-Confluence Swing Hunter V1", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100,
         commission_type=strategy.commission.percent, commission_value=0.1,
         slippage=3, initial_capital=1000, margin_long=0, margin_short=0)

// === DESCRIPTION ===
// High-conviction swing bottom entry strategy using optimized MACD(3,10,3) and RSI(21)
// Entry: Point-based scoring system for swing bottoms (divergences, momentum, price action)
// Exit: Inverse scoring system for swing tops (no stop-loss, exit only on swing top signals)
// Position: Single position with 100% allocation, scores displayed only when ≥10 points
// Based on analysis showing 23.7% improvement over standard parameters

// === INPUT PARAMETERS ===

// Optimized Indicator Settings
macdFast = input.int(3, "MACD Fast Length", minval=1, maxval=50, group="Optimized Indicators")
macdSlow = input.int(10, "MACD Slow Length", minval=1, maxval=100, group="Optimized Indicators") 
macdSignal = input.int(3, "MACD Signal Length", minval=1, maxval=50, group="Optimized Indicators")
rsiLength = input.int(21, "RSI Length", minval=2, maxval=100, group="Optimized Indicators")

// Entry Settings - Swing Bottom Scoring
minEntryScore = input.int(13, "Minimum Entry Score", minval=5, maxval=20, group="Entry Settings")
showEntryScores = input.bool(true, "Show Entry Scores (Above 10)", group="Entry Settings")

// Exit Settings - Swing Top Scoring (Inverse of Entry Criteria)
minExitScore = input.int(13, "Minimum Exit Score", minval=5, maxval=20, group="Exit Settings")
showExitScores = input.bool(true, "Show Exit Scores (Above 10)", group="Exit Settings")

// Price Action Settings
minLowerWickPercent = input.float(50.0, "Min Lower Wick %", minval=10.0, maxval=90.0, step=5.0, group="Price Action")
quickRecoveryPercent = input.float(0.3, "Quick Recovery %", minval=0.1, maxval=2.0, step=0.1, group="Price Action")
quickRecoveryBars = input.int(3, "Quick Recovery Bars", minval=1, maxval=10, group="Price Action")

// RSI Levels
rsiOversold = input.float(30.0, "RSI Oversold Level", minval=10.0, maxval=50.0, step=1.0, group="RSI Settings")
rsiExtremeOversold = input.float(25.0, "RSI Extreme Oversold", minval=10.0, maxval=40.0, step=1.0, group="RSI Settings")
rsiOverbought = input.float(70.0, "RSI Overbought Level", minval=50.0, maxval=90.0, step=1.0, group="RSI Settings")
rsiExtremeOverbought = input.float(75.0, "RSI Extreme Overbought", minval=60.0, maxval=90.0, step=1.0, group="RSI Settings")

// Reversal Signals Settings
reversalLookback = input.int(12, "Reversal Candle Lookback", minval=5, maxval=50, group="Reversal Signals")
reversalConfirm = input.int(3, "Reversal Confirm Within", minval=1, maxval=10, group="Reversal Signals")
useVolumeConfirmation = input.bool(false, "Use Volume Confirmation", group="Reversal Signals")

// Trade Management
allowShortTrades = input.bool(false, "Allow Short Trades?", group="Short Trades")

// Risk/Reward TP/SL Settings
useRiskReward = input.bool(true, "Use Risk/Reward TP/SL", group="Risk Management")
riskRewardRatio = input.float(5, "Risk/Reward Ratio", minval=1.0, maxval=5.0, step=0.1, group="Risk Management")
stopLossLookback = input.int(10, "Stop Loss Lookback Bars", minval=3, maxval=50, group="Risk Management")
stopLossBuffer = input.float(0.15, "Stop Loss Buffer %", minval=0.05, maxval=1.0, step=0.05, group="Risk Management")

// Advanced Settings
maxLookbackBars = input.int(8, "Divergence Lookback Bars", minval=3, maxval=20, group="Advanced")

// === 1️⃣ CALCULATIONS ===

// Optimized MACD Calculation
[macdLine, signalLine, macdHist] = ta.macd(close, macdFast, macdSlow, macdSignal)

// Optimized RSI Calculation  
rsi = ta.rsi(close, rsiLength)

// Price Action Calculations
bodySize = math.abs(close - open)
lowerWick = math.min(open, close) - low
upperWick = high - math.max(open, close)
totalRange = high - low
lowerWickPercent = totalRange > 0 ? (lowerWick / totalRange) * 100 : 0
upperWickPercent = totalRange > 0 ? (upperWick / totalRange) * 100 : 0
bodyPercent = totalRange > 0 ? (bodySize / totalRange) * 100 : 0

// Reversal Signals Calculation
var int bullCandleScore = 0
var int bearCandleScore = 0
var bool bullReversalCandidate = false
var bool bearReversalCandidate = false
var float bullReversalLow = 0.0
var float bullReversalHigh = 0.0
var float bearReversalLow = 0.0
var float bearReversalHigh = 0.0
var bool bullSignalConfirmed = false
var bool bearSignalConfirmed = false
var int bullCandleCounter = 0
var int bearCandleCounter = 0

volumeIsHigh = volume > ta.sma(volume, 20)

// Reset scores
bullCandleScore := 0
bearCandleScore := 0

// Calculate reversal scores
if bar_index >= reversalLookback
    for i = 0 to (reversalLookback - 1)
        if close < low[i]
            bullCandleScore += 1
        if close > high[i]
            bearCandleScore += 1

// Bear signal setup
if bearCandleScore == (reversalLookback - 1)
    bearReversalCandidate := true
    bearReversalLow := low
    bearReversalHigh := high
    bearSignalConfirmed := false
    bearCandleCounter := 0

if bearReversalCandidate
    bearCandleCounter += 1
    if close > bearReversalHigh
        bearReversalCandidate := false

bearCondition = bearReversalCandidate and close < bearReversalLow and not bearSignalConfirmed and bearCandleCounter <= (reversalConfirm + 1)
bearSignal = false
if bearCondition
    bearSignalConfirmed := true
    if not useVolumeConfirmation or volumeIsHigh
        bearSignal := true

// Bull signal setup
if bullCandleScore == (reversalLookback - 1)
    bullReversalCandidate := true
    bullReversalLow := low
    bullReversalHigh := high
    bullSignalConfirmed := false
    bullCandleCounter := 0

if bullReversalCandidate
    bullCandleCounter += 1
    if close < bullReversalLow
        bullReversalCandidate := false

bullCondition = bullReversalCandidate and close > bullReversalHigh and not bullSignalConfirmed and bullCandleCounter <= (reversalConfirm + 1)
bullSignal = false
if bullCondition
    bullSignalConfirmed := true
    if not useVolumeConfirmation or volumeIsHigh
        bullSignal := true

// === 2️⃣ ENTRY & EXIT LOGIC ===

// Helper Functions for Divergence Detection
findLowerLow(lookback) =>
    var float lowestPrice = na
    var int lowestIndex = na
    
    if bar_index >= lookback
        lowestPrice := low
        lowestIndex := bar_index
        
        for i = 1 to lookback
            if low[i] < lowestPrice
                lowestPrice := low[i]
                lowestIndex := bar_index - i
    
    [lowestPrice, lowestIndex]

findHigherHigh(lookback) =>
    var float highestPrice = na
    var int highestIndex = na
    
    if bar_index >= lookback
        highestPrice := high
        highestIndex := bar_index
        
        for i = 1 to lookback
            if high[i] > highestPrice
                highestPrice := high[i]
                highestIndex := bar_index - i
    
    [highestPrice, highestIndex]

// SWING BOTTOM SCORING SYSTEM

// 1. RSI Signals
rsiOversoldSignal = rsi < rsiOversold
rsiExtremeOversoldSignal = rsi < rsiExtremeOversold
rsiTurningUp = rsi > rsi[1]

// RSI Bullish Divergence
[prevLowPrice, prevLowIndex] = findLowerLow(maxLookbackBars)
rsiBullishDivergence = false
if not na(prevLowPrice) and not na(prevLowIndex) and bar_index > prevLowIndex
    prevRSI = rsi[bar_index - prevLowIndex]
    if low < prevLowPrice and rsi > prevRSI and not na(prevRSI)
        rsiBullishDivergence := true

// 2. MACD Signals  
macdNegative = macdLine < 0
macdTurningUp = macdLine > macdLine[1] 
macdHistImproving = macdHist > macdHist[1]

// MACD Bullish Divergence
macdBullishDivergence = false
if not na(prevLowPrice) and not na(prevLowIndex) and bar_index > prevLowIndex
    prevMACD = macdLine[bar_index - prevLowIndex]
    if low < prevLowPrice and macdLine > prevMACD and not na(prevMACD)
        macdBullishDivergence := true

// 3. Price Action Signals
longLowerWick = lowerWickPercent > minLowerWickPercent
smallBody = bodyPercent < 30.0
bullishClose = close > open

// 4. Quick Recovery Check
quickRecovery = false
if bar_index >= quickRecoveryBars
    recoveryTarget = close * (1 + quickRecoveryPercent / 100)
    for i = 1 to quickRecoveryBars
        if high[i] > recoveryTarget
            quickRecovery := true
            break

// ENTRY SCORE CALCULATION
entryScore = 0
entryScore := entryScore + (rsiOversoldSignal ? 2 : 0)
entryScore := entryScore + (rsiExtremeOversoldSignal ? 2 : 0)  
entryScore := entryScore + (rsiBullishDivergence ? 4 : 0)
entryScore := entryScore + (rsiTurningUp ? 1 : 0)
entryScore := entryScore + (macdNegative ? 1 : 0)
entryScore := entryScore + (macdTurningUp ? 2 : 0)
entryScore := entryScore + (macdHistImproving ? 2 : 0)
entryScore := entryScore + (macdBullishDivergence ? 3 : 0)
entryScore := entryScore + (longLowerWick ? 2 : 0)
entryScore := entryScore + (smallBody ? 1 : 0)
entryScore := entryScore + (bullishClose ? 1 : 0)
entryScore := entryScore + (quickRecovery ? 2 : 0)
entryScore := entryScore + (bullSignal ? 4 : 0)  // Green reversal signal +4

// SWING TOP SCORING SYSTEM (for exits)

// 1. RSI Exit Signals
rsiOverboughtSignal = rsi > rsiOverbought
rsiExtremeOverboughtSignal = rsi > rsiExtremeOverbought
rsiTurningDown = rsi < rsi[1]

// RSI Bearish Divergence
[prevHighPrice, prevHighIndex] = findHigherHigh(maxLookbackBars)
rsiBearishDivergence = false
if not na(prevHighPrice) and not na(prevHighIndex) and bar_index > prevHighIndex
    prevRSIHigh = rsi[bar_index - prevHighIndex]
    if high > prevHighPrice and rsi < prevRSIHigh and not na(prevRSIHigh)
        rsiBearishDivergence := true

// 2. MACD Exit Signals
macdPositive = macdLine > 0
macdTurningDown = macdLine < macdLine[1]
macdHistDeclining = macdHist < macdHist[1]

// MACD Bearish Divergence  
macdBearishDivergence = false
if not na(prevHighPrice) and not na(prevHighIndex) and bar_index > prevHighIndex
    prevMACDHigh = macdLine[bar_index - prevHighIndex]
    if high > prevHighPrice and macdLine < prevMACDHigh and not na(prevMACDHigh)
        macdBearishDivergence := true

// 3. Price Action Exit Signals
longUpperWick = upperWickPercent > minLowerWickPercent
bearishClose = close < open

// EXIT SCORE CALCULATION
exitScore = 0
exitScore := exitScore + (rsiOverboughtSignal ? 2 : 0)
exitScore := exitScore + (rsiExtremeOverboughtSignal ? 2 : 0)
exitScore := exitScore + (rsiBearishDivergence ? 4 : 0)
exitScore := exitScore + (rsiTurningDown ? 1 : 0)
exitScore := exitScore + (macdPositive ? 1 : 0)
exitScore := exitScore + (macdTurningDown ? 2 : 0)
exitScore := exitScore + (macdHistDeclining ? 2 : 0)
exitScore := exitScore + (macdBearishDivergence ? 3 : 0)
exitScore := exitScore + (longUpperWick ? 2 : 0)
exitScore := exitScore + (bearishClose ? 1 : 0)
exitScore := exitScore + (bearSignal ? 1 : 0)  // Red reversal signal +1

// SIGNAL CONDITIONS
longCondition = entryScore >= minEntryScore and barstate.isconfirmed
exitCondition = exitScore >= minExitScore and barstate.isconfirmed

// === TP/SL LEVELS (Clean Logic) ===
var float stopLossLevel = na
var float takeProfitLevel = na
var bool tpslSet = false

// Clear levels when no position
if strategy.position_size == 0
    stopLossLevel := na
    takeProfitLevel := na
    tpslSet := false

// Calculate TP/SL levels ONCE when position is opened
if strategy.position_size > 0 and strategy.position_size[1] == 0 and useRiskReward and not tpslSet
    // Find recent low for stop loss
    recentLow = low
    for i = 1 to stopLossLookback
        if low[i] < recentLow
            recentLow := low[i]
    
    // Set levels using actual entry price
    entryPrice = strategy.opentrades.entry_price(0)
    stopLossLevel := recentLow * (1 - stopLossBuffer / 100)  // Configurable buffer below recent low
    riskAmount = entryPrice - stopLossLevel
    takeProfitLevel := entryPrice + (riskAmount * riskRewardRatio)
    tpslSet := true

// === 3️⃣ TRADE EXECUTIONS ===

// Long Entry - Single Position Only
if longCondition and strategy.position_size == 0
    strategy.entry("Long", strategy.long, comment="Entry Score: " + str.tostring(entryScore))

// Set TP/SL ONLY ONCE per trade (when levels are calculated and not yet set)
if strategy.position_size > 0 and useRiskReward and tpslSet and not na(stopLossLevel) and not na(takeProfitLevel)
    strategy.exit("TP/SL", "Long", stop=stopLossLevel, limit=takeProfitLevel)

// Long Exit - Close Position on Swing Top Signal (Only when NOT using TP/SL)
if exitCondition and strategy.position_size > 0 and not useRiskReward
    strategy.close("Long", comment="Exit Score: " + str.tostring(exitScore))

// === 4️⃣ VISUALIZATIONS ===

// Entry Score Display (Only When Score ≥ 10) - Shows on ALL qualifying bars
if showEntryScores and entryScore >= 10 and barstate.isconfirmed
    label.new(bar_index, low, 
             text=str.tostring(entryScore), 
             yloc=yloc.belowbar,
             color=na,
             style=label.style_label_up, 
             textcolor=color.green, 
             size=size.small)

// Exit Score Display (Only When Score ≥ 10) - Shows on ALL qualifying bars  
if showExitScores and exitScore >= 10 and barstate.isconfirmed
    label.new(bar_index, high, 
             text=str.tostring(exitScore), 
             yloc=yloc.abovebar,
             color=na,
             style=label.style_label_down, 
             textcolor=color.red, 
             size=size.small)

// Large Trade Entry Triangle (Only when actually entering a position) - Using plotshape to avoid label limits
plotshape(longCondition and strategy.position_size == 0, title="Trade Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.normal, text="BUY")

// Large Trade Exit Triangle (Only when actually exiting a position) - Using plotshape to avoid label limits  
plotshape(exitCondition and strategy.position_size > 0, title="Trade Exit", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal, text="SELL")

// Reversal Signal Triangles
plotshape(bullSignal, title="Bull Reversal", location=location.belowbar, 
         color=color.lime, style=shape.triangleup, size=size.tiny)

plotshape(bearSignal, title="Bear Reversal", location=location.abovebar, 
         color=color.red, style=shape.triangledown, size=size.tiny)

// === TP/SL LEVEL PLOTS ===
plot(strategy.position_size > 0 and useRiskReward ? stopLossLevel : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size > 0 and useRiskReward ? takeProfitLevel : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)

// MACD and RSI Plots (in separate panes)
macdPlot = plot(macdLine, title="MACD Line", color=color.blue, display=display.none)
signalPlot = plot(signalLine, title="Signal Line", color=color.red, display=display.none) 
histPlot = plot(macdHist, title="MACD Histogram", color=color.gray, style=plot.style_histogram, display=display.none)

rsiPlot = plot(rsi, title="RSI", color=color.purple, display=display.none)
rsiOverboughtLine = hline(rsiOverbought, title="RSI Overbought", color=color.red, linestyle=hline.style_dashed, display=display.none)
rsiOversoldLine = hline(rsiOversold, title="RSI Oversold", color=color.green, linestyle=hline.style_dashed, display=display.none)