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

EMA SMA RSI ATR VWAP ORB
تخلیق کی تاریخ: 2025-04-01 16:00:37 آخر میں ترمیم کریں: 2025-04-01 16:00:37
کاپی: 0 کلکس کی تعداد: 382
2
پر توجہ دیں
319
پیروکار

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

جائزہ

کثیر اشارے کی توڑ اور الٹ ٹریڈنگ حکمت عملی ایک تکنیکی تجزیہ اشارے اور قیمت کے عمل کو یکجا کرنے کا ایک مقداری تجارتی طریقہ ہے جس کا مقصد مارکیٹ میں دو اہم تجارتی مواقع کو پکڑنا ہے: قیمت کی الٹ اور رجحان کی توڑ۔ یہ حکمت عملی چالاک طریقے سے متعدد تکنیکی اشارے جیسے چلتی اوسط ، نسبتا weak مضبوط اشارے (RSI) ، اوسط حقیقی رینج (ATR) ، اور تجارت کے وزن میں اوسط قیمت (VWAP) کو مربوط کرتی ہے ، اور اس میں داخل ہونے والے سگنل کی وشوسنییتا کو بڑھانے کے لئے اوپن ڈسک بریک (ORB) میکانزم متعارف کرایا گیا ہے۔ حکمت عملی دوہری مقصد کے اسٹاپ ڈیزائن کو اپناتی ہے ، اور اس میں خود کار طریقے سے اسٹاپ نقصان کو ایڈجسٹ کرنے کے لئے ایک خطرہ مینجمنٹ میکانزم ہے ، خاص طور پر مختصر وقت کی مدت کے لئے موزوں ہے ، جیسے 2 منٹ کے چارٹ پر ، پیرامیٹر ایڈجسٹمنٹ کے ذریعہ اعلی وقت کی مدت کے لئے بھی موزوں ہے۔

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

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

  1. ریورس ٹریڈنگ سگنل

    • کثیر الٹ: جب قیمت 50 فریم سادہ منتقل اوسط ((SMA50) سے گزرتی ہے ، RSI oversold threshold ((ڈیفالٹ 30) سے کم ہے ، اور قیمت VWAP سے کم ہے ، جبکہ مجموعی طور پر اوپر کی طرف بڑھتی ہے ((قیمت SMA200 سے زیادہ ہے))
    • ہیڈ ریورس: جب قیمت SMA50 کے نیچے سے گزرتی ہے تو ، RSI اوور بیئر کی حد سے اوپر ہے (ڈیفالٹ 70) ، اور قیمت VWAP سے اوپر ہے ، جبکہ مجموعی طور پر نیچے کی طرف بڑھتی ہے (قیمت SMA200 سے نیچے)
  2. ٹرینڈ بریک سگنل

    • کثیر سر توڑ: جب 9 عددی اشاریہ منتقل کرنے والی اوسط ((EMA9) پر 20 عددی اشاریہ منتقل کرنے والی اوسط ((EMA20) ، قیمت VWAP سے زیادہ ہے ، اور مجموعی طور پر اوپر کی طرف رجحان پیدا ہوتا ہے۔
    • فضائی توڑ: جب ای ایم اے 9 کے نیچے ای ایم اے 20 کو توڑتا ہے ، قیمت وی ڈبلیو اے پی سے کم ہوتی ہے ، اور مجموعی طور پر نیچے کی طرف رجحان ہوتا ہے۔
  3. اوپن پلے بینڈ بریک (ORB) سگنل

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

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

  • پہلا ہدف (TP1): خطرے کا 0.5 گنا (ڈیفالٹ) ، 25٪ کی پوزیشن کو صاف کرنا
  • دوسرا ہدف (TP2): خطرے کا 1.1 گنا (ڈیفالٹ) ، 75 فیصد باقی پوزیشن کو صاف کرنا

جب پہلا اسٹاپ ہدف حاصل کیا جاتا ہے تو ، حکمت عملی خود بخود اسٹاپ نقصان کو داخلہ قیمت پر ایڈجسٹ کرتی ہے ، جو پہلے سے حاصل ہونے والے منافع کو مؤثر طریقے سے محفوظ کرتی ہے۔

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

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

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

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

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

  5. رجحانات کا فلٹرطویل مدتی رجحان کی سمت کا تعین کرنے کے لئے 200 مدت کی سادہ منتقل اوسط ((SMA200) کا استعمال کریں ، اس بات کو یقینی بنائیں کہ تجارت کی سمت اہم رجحانات کے مطابق ہے ، اور تجارت کی کامیابی کی شرح میں اضافہ کریں۔

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

اسٹریٹجک رسک

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

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

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

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

  1. ملٹی سگنل تصادم: کچھ مارکیٹ کے حالات میں ، مختلف انٹری سگنل متضاد تجارتی تجاویز پیدا کرسکتے ہیں ، جس کی وجہ سے حکمت عملی کی کارکردگی میں عدم استحکام پیدا ہوتا ہے۔

حل: سگنل کی ایک سخت ترجیح کا نظام بنانا یا اضافی تصدیق کے میکانزم متعارف کرانا تاکہ یہ یقینی بنایا جا سکے کہ تجارت صرف اعلی امکانات کے ساتھ ہی کی جائے۔

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

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

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

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

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

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

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

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

اصلاح کی وجوہات: مارکیٹ کے جذبات کا قلیل مدتی قیمتوں پر نمایاں اثر پڑتا ہے۔ اس طرح کے اشارے کو مربوط کرنے سے مارکیٹ کے موڑ کے مقامات کو پہلے سے پکڑنے اور داخلے اور باہر نکلنے کے اوقات کو بہتر بنایا جاسکتا ہے۔

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

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

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

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

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

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-31 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Reversal & Breakout Strategy with ORB", overlay=true, pyramiding=2, initial_capital=50000)

// --- Inputs ---
ema9Length = input.int(9, "9 EMA Length", minval=1)
ema20Length = input.int(20, "20 EMA Length", minval=1)
sma50Length = input.int(50, "50 SMA Length", minval=1)
sma200Length = input.int(200, "200 SMA Length", minval=1)
rsiLength = input.int(14, "RSI Length", minval=1)
rsiOverbought = input.int(70, "RSI Overbought", minval=0, maxval=100)
rsiOversold = input.int(30, "RSI Oversold", minval=0, maxval=100)
atrLength = input.int(14, "ATR Length", minval=1)
stopMulti = input.float(0.5, "Stop Loss ATR Multiplier", minval=0.1, step=0.1)
stopLookback = input.int(7, "Stop Loss Lookback", minval=1)
rr1 = input.float(0.5, "Risk:Reward Target 1", minval=0.1, step=0.1)
rr2 = input.float(1.1, "Risk:Reward Target 2", minval=0.1, step=0.1)
target1Percent = input.float(25, "Profit % Target 1", minval=0, maxval=100)
orbBars = input.int(15, "Opening Range Bars", minval=1, tooltip="Number of bars to define the opening range (e.g., 15 bars = 30 min on 2-min chart)")
volThreshold = input.float(1.5, "Volume Threshold Multiplier", minval=1.0, step=0.1, tooltip="Volume must be this multiple of the opening range average")

// --- Indicators ---
// Moving Averages
ema9 = ta.ema(close, ema9Length)
ema20 = ta.ema(close, ema20Length)
sma50 = ta.sma(close, sma50Length)
sma200 = ta.sma(close, sma200Length)

// VWAP
vwapValue = ta.vwap(close)

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

// ATR
atr = ta.atr(atrLength)

// --- Opening Range Breakout ---
var float openingRangeHigh = na
var float openingRangeLow = na
var float openingRangeAvgVol = na
if bar_index < orbBars
    openingRangeHigh := na
    openingRangeLow := na
    openingRangeAvgVol := na
else if bar_index == orbBars
    openingRangeHigh := ta.highest(high, orbBars)
    openingRangeLow := ta.lowest(low, orbBars)
    openingRangeAvgVol := ta.sma(volume, orbBars)

orbLong = not na(openingRangeHigh) and ta.crossover(close, openingRangeHigh) and volume > openingRangeAvgVol * volThreshold
orbShort = not na(openingRangeLow) and ta.crossunder(close, openingRangeLow) and volume > openingRangeAvgVol * volThreshold

// --- Trend Detection ---
trendUp = close > sma200
trendDown = close < sma200

// --- Reversal Conditions ---
reversalLong = ta.crossover(close, sma50) and rsi < rsiOversold and close < vwapValue and trendUp
reversalShort = ta.crossunder(close, sma50) and rsi > rsiOverbought and close > vwapValue and trendDown

// --- Range Breakout Conditions ---
breakoutLong = ta.crossover(ema9, ema20) and close > vwapValue and trendUp
breakoutShort = ta.crossunder(ema9, ema20) and close < vwapValue and trendDown

// Combine conditions
longCondition = (reversalLong or breakoutLong or orbLong)
shortCondition = (reversalShort or breakoutShort or orbShort)

// --- Calculate Position Size ---
equityPerPosition = 25000.0  // $50,000 / 2 positions
positionSizeLong = math.floor(equityPerPosition / close)
positionSizeShort = math.floor(equityPerPosition / close)

// --- Stop Loss Calculation ---
longStop = ta.lowest(low, stopLookback) - (atr * stopMulti)
shortStop = ta.highest(high, stopLookback) + (atr * stopMulti)

// --- Variables to Store Trade Levels ---
var float tradeStop = na
var float tradeTarget1 = na
var float tradeTarget2 = na
var float initialPositionSize = na
var bool breakEvenSet = false  // Track if stop has been moved to break-even
var float stopLevel = na       // Dedicated variable for stop loss in exits
var float target1Level = na    // Dedicated variable for first take profit
var float target2Level = na    // Dedicated variable for second take profit
var float qtyTotal = na        // Track total quantity

// --- Reset Levels Before New Trade ---
var bool newTrade = false
if longCondition or shortCondition
    newTrade := true
else
    newTrade := false

if strategy.position_size == 0 and newTrade
    tradeStop := na
    tradeTarget1 := na
    tradeTarget2 := na
    stopLevel := na
    target1Level := na
    target2Level := na
    initialPositionSize := na
    qtyTotal := na
    breakEvenSet := false

// --- Strategy Entries ---
if longCondition and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=positionSizeLong * 2)
    tradeStop := longStop
    stopLevel := longStop
    stopDistance = close - tradeStop
    tradeTarget1 := close + (stopDistance * rr1)
    tradeTarget2 := close + (stopDistance * rr2)
    target1Level := tradeTarget1
    target2Level := tradeTarget2
    initialPositionSize := positionSizeLong * 2
    qtyTotal := positionSizeLong * 2
    breakEvenSet := false  // Reset break-even flag

if shortCondition and strategy.position_size == 0
    strategy.entry("Short", strategy.short, qty=positionSizeShort * 2)
    tradeStop := shortStop
    stopLevel := shortStop
    stopDistance = tradeStop - close
    tradeTarget1 := close - (stopDistance * rr1)
    tradeTarget2 := close - (stopDistance * rr2)
    target1Level := tradeTarget1
    target2Level := tradeTarget2
    initialPositionSize := positionSizeShort * 2
    qtyTotal := positionSizeShort * 2
    breakEvenSet := false  // Reset break-even flag

// --- Trade Exits ---
if strategy.position_size > 0
    qty_tp1 = qtyTotal * (target1Percent / 100)
    qty_tp2 = qtyTotal * ((100 - target1Percent) / 100)
    strategy.exit("Long Exit 1", "Long", qty=qty_tp1, stop=stopLevel, limit=target1Level)
    strategy.exit("Long Exit 2", "Long", qty=qty_tp2, stop=stopLevel, limit=target2Level)

if strategy.position_size < 0
    qty_tp1 = qtyTotal * (target1Percent / 100)
    qty_tp2 = qtyTotal * ((100 - target1Percent) / 100)
    strategy.exit("Short Exit 1", "Short", qty=qty_tp1, stop=stopLevel, limit=target1Level)
    strategy.exit("Short Exit 2", "Short", qty=qty_tp2, stop=stopLevel, limit=target2Level)

// --- Move Stop to Break-even ---
if strategy.position_size != 0 and not na(initialPositionSize) and not breakEvenSet
    if math.abs(strategy.position_size) < math.abs(initialPositionSize)
        tradeStop := strategy.position_avg_price
        stopLevel := strategy.position_avg_price
        tradeTarget1 := na  // Clear first target for plotting
        breakEvenSet := true  // Mark break-even as set

// --- Manual Close Fallback ---
if strategy.position_size > 0
    if close >= target2Level or close <= stopLevel
        strategy.close("Long", qty=qtyTotal, comment="Manual Close")

if strategy.position_size < 0
    if close <= target2Level or close >= stopLevel
        strategy.close("Short", qty=qtyTotal, comment="Manual Close")

// --- Reset Levels When No Position ---
if strategy.position_size == 0 and not newTrade
    tradeStop := na
    tradeTarget1 := na
    tradeTarget2 := na
    stopLevel := na
    target1Level := na
    target2Level := na
    initialPositionSize := na
    qtyTotal := na
    breakEvenSet := false

// --- Plotting ---
plot(tradeStop, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(tradeTarget1, title="Take Profit 1", color=color.green, linewidth=1, style=plot.style_linebr)
plot(tradeTarget2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)