متعدد تکنیکی اشارے متحرک اسٹاپ نقصان فیوچر ٹریڈنگ حکمت عملی

EMA ATR FVG BOS HTF ORDER BLOCK Liquidity Sweep
تخلیق کی تاریخ: 2025-04-02 09:41:48 آخر میں ترمیم کریں: 2025-04-02 09:41:48
کاپی: 0 کلکس کی تعداد: 381
2
پر توجہ دیں
319
پیروکار

متعدد تکنیکی اشارے متحرک اسٹاپ نقصان فیوچر ٹریڈنگ حکمت عملی متعدد تکنیکی اشارے متحرک اسٹاپ نقصان فیوچر ٹریڈنگ حکمت عملی

حکمت عملی کا جائزہ

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

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

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

  1. منصفانہ قدر کا خلا ((FVG)- مارکیٹ میں ممکنہ طور پر خالی جگہ کی نشاندہی کرنے کے لئے جب قیمتوں میں نمایاں فرق کی نشاندہی کی جاتی ہے تو دو ٹوکریوں کے درمیان شناخت کی جاتی ہے۔
  2. آرڈر بلاک- یہ اہم علاقہ جات ہیں جہاں قیمتوں میں ردوبدل ہوتا ہے ، جو عام طور پر مضبوط ردوبدل کے طور پر ظاہر ہوتا ہے ، جس کے بعد یہ سپورٹ یا مزاحمت کے علاقے بن جاتے ہیں۔
  3. لیکویڈیٹی اسکین- مارکیٹ میں ابتدائی اونچائی یا کم سے تجاوز کرنے کے بعد فوری طور پر الٹ جانے کی شناخت ، جو عام طور پر بڑے اداروں کو لیکویڈیٹی جمع کرنے کی نشاندہی کرتی ہے۔
  4. ڈھانچہ توڑنا (BOS)- جب قیمتوں میں پہلے مرحلے کے ڈھانچے کو توڑنے کے بعد ، اعلی اونچائی یا کم نچلی اونچائی کی تشکیل ہوتی ہے۔
  5. اعلی ٹائم سائیکل رجحان کی تصدیق- 15 منٹ اور 60 منٹ کے دورانیے پر ای ایم اے کا استعمال کرتے ہوئے (انڈیکس کی حرکت پذیری اوسط) مجموعی طور پر رجحان کی سمت کی تصدیق کریں۔

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

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

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

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

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

کوڈ کا گہرائی سے تجزیہ کرنے کے بعد ، ہم مندرجہ ذیل واضح فوائد کا خلاصہ کرسکتے ہیں:

  1. ایک سے زیادہ تصدیق نظام- متعدد تکنیکی شرائط کو ایک ساتھ پورا کرنے کی ضرورت ہوتی ہے ، جس سے جعلی سگنل کم ہوجاتے ہیں اور تجارت کا معیار بہتر ہوتا ہے۔
  2. ذہین رسک مینجمنٹ- اے ٹی آر پر مبنی متحرک اسٹاپ کا استعمال کرتے ہوئے ، مارکیٹ میں اتار چڑھاؤ کی تبدیلیوں کے ل fixed فکسڈ پوائنٹس یا فیصد اسٹاپ سے بہتر ہے۔
  3. اعلی ٹائم سائیکل رجحان فلٹرنگ- اعلی ٹائم سائیکل کی رجحان کی سمت کا استعمال کرتے ہوئے ، صرف رجحان کی سمت میں تجارت کریں ، اور الٹا تجارت سے گریز کریں۔
  4. ٹکڑے ٹکڑے منافع کی حکمت عملی- منافع کو تقسیم کرنے اور نقصان کو روکنے کے لئے جگہ کو روکنے کے ذریعے، منافع کے کچھ حصوں کو لاک کرنے کی ضمانت دی جاتی ہے اور باقی پوزیشنوں کے لئے غیر خطرے کا موقع فراہم کرتا ہے.
  5. ٹائم بیس آؤٹ میکانزم- غیر موثر تجارت سے خود بخود باہر نکلیں ، اور بغیر کسی محرک تجارت میں طویل عرصے تک اپنے فنڈز کو بند نہ کریں۔
  6. مجموعی طور پر اکاؤنٹس مینجمنٹ- منافع کے اہداف اور تعاقب کے نقصانات کو قائم کرکے مجموعی اکاؤنٹ کی منافع کو بچانے اور مضبوط فنڈ مینجمنٹ کو یقینی بنائیں۔
  7. انتہائی موافقت پذیر- ایک سے زیادہ پیرامیٹرز کے ذریعہ اعلی لچک فراہم کی جاتی ہے ، جو مختلف مارکیٹ کے حالات اور تجارتی طرز کے مطابق ایڈجسٹ ہوسکتی ہے۔
  8. انٹیگریٹڈ پروفیشنل ٹیکنیکل اشارے- اعلی درجے کی تکنیکی تجزیہ کے تصورات کے ساتھ مل کر، عام طور پر صرف پیشہ ور تاجروں کے لئے استعمال کیا جاتا ہے.

اسٹریٹجک رسک

اگرچہ یہ حکمت عملی اچھی طرح سے ڈیزائن کی گئی ہے ، اس میں کچھ ممکنہ خطرات ہیں ، بشمول:

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

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

کوڈ کے تجزیے کے مطابق ، کچھ ممکنہ اصلاحات یہ ہیں:

  1. رجحانات کی شناخت میں اضافہ- موجودہ حکمت عملی میں رجحانات کی نشاندہی کرنے کے لئے ایک سادہ EMA کراس کا استعمال کیا جاتا ہے ، اور رجحانات کی طاقت کی تصدیق کے لئے دیگر رجحانات کے اشارے جیسے ADX (اوسط سمت اشارے) کو شامل کرنے پر غور کیا جاسکتا ہے ، کیونکہ مضبوط رجحانات والے بازار عام طور پر بہتر تجارت کے مواقع فراہم کرتے ہیں۔
  2. مارکیٹ کی حالت کے مطابق- مارکیٹ کی حالت کی شناخت کا ایک طریقہ شامل کریں ، مختلف مارکیٹ کے ماحول میں حکمت عملی کے پیرامیٹرز کو خود بخود ایڈجسٹ کریں (رجحان ، حد ، اعلی اتار چڑھاؤ ، کم اتار چڑھاؤ) ۔ اس طرح حکمت عملی کو مختلف مارکیٹ کے حالات کے مطابق ڈھالنے کے لئے زیادہ لچکدار بنایا جاسکتا ہے۔
  3. داخلہ کے وقت کو بہتر بنانا- رجحان کی سمت میں داخل ہونے کو یقینی بنانے کے لئے آر ایس آئی یا بے ترتیب اشارے جیسے متحرک اشارے شامل کرنے پر غور کریں ، اور اس طرح الٹ جانے کے خطرے کو کم کرنے کے لئے ضرورت سے زیادہ خرید یا فروخت سے بچنے سے گریز کریں۔
  4. منافع بخش حکمت عملی کو بہتر بنائیں- موجودہ مقررہ 1R منافع بہت زیادہ قدامت پسند یا بہت زیادہ جارحانہ ہوسکتا ہے ، منافع کے اہداف کو متحرک طور پر اتار چڑھاؤ یا سپورٹ / مزاحمت کی سطح پر مبنی ایڈجسٹ کرنے پر غور کیا جاسکتا ہے ، اور جب زیادہ اتار چڑھاؤ ہوتا ہے تو دور کا ہدف طے کیا جاسکتا ہے۔
  5. خطرے کے انتظام میں بہتری- ایک متحرک پوزیشن سائز ایڈجسٹمنٹ میکانزم متعارف کرایا گیا ہے جس میں حالیہ حکمت عملی کی کارکردگی اور مارکیٹ میں اتار چڑھاؤ کے مطابق خود بخود خطرے کی چوٹی کو ایڈجسٹ کیا جاتا ہے ، حکمت عملی اچھی کارکردگی کا مظاہرہ کرنے پر خطرے میں اضافہ ہوتا ہے اور خراب کارکردگی کا مظاہرہ کرنے پر خطرے کو کم کرتا ہے۔
  6. دن کے وقت کا فلٹر شامل کریں- فیوچر مارکیٹوں میں مختلف وقت کے ادوار میں مختلف خصوصیات ہوتی ہیں۔ ٹائم فلٹرز کو شامل کرنے سے ان ادوار سے بچنے میں مدد ملتی ہے جب مارکیٹ میں کم لیکویڈیٹی ہوتی ہے یا اس میں کوئی سمت نہیں ہوتی۔
  7. مارکیٹ کے جذبات کے انڈیکس- مارکیٹ کے جذبات کے اشارے جیسے VIX شامل کریں ، انتہائی جذبات کے وقت حکمت عملی کے پیرامیٹرز کو ایڈجسٹ کریں یا تجارت کو روکیں۔
  8. کوڈ کی کارکردگی کو بہتر بنائیں- موجودہ کوڈ میں کچھ لوپ آپریشنز ہیں جو عملدرآمد کی کارکردگی کو متاثر کرسکتے ہیں ، خاص طور پر چھوٹے وقت کے فریموں پر۔ ان لوپوں کو بہتر بنانا حکمت عملی کی رفتار کو بہتر بنا سکتا ہے۔

خلاصہ کریں۔

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

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

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// @version=5
strategy("NQ Futures Trading Strategy", overlay=true, initial_capital=50000, default_qty_type=strategy.cash, default_qty_value=5000)

// ==========================================
// Parameters
// ==========================================

// Account Parameters
accountSize = 50000
profitGoal = 3000
trailingThreshold = 2500
stopsTrailing = 52650

// Trading Parameters
atrLength = input.int(14, "ATR Period", minval=1)
atrMultiplier = input.float(1.5, "ATR Multiplier for SL", minval=0.5, maxval=3.0, step=0.1)
timeoutPeriod = input.int(30, "Exit after X minutes if trade doesn't move favorably", minval=5, maxval=120)

// FVG (Fair Value Gap) Parameters
fvgLength = input.int(5, "FVG Look-back Period", minval=2, maxval=20)
fvgThreshold = input.float(0.1, "FVG Size Threshold (%)", minval=0.05, maxval=1.0, step=0.05) * 0.01

// Order Block Parameters
obLength = input.int(5, "Order Block Look-back Period", minval=2, maxval=20)
obThreshold = input.float(0.1, "Order Block Size Threshold (%)", minval=0.05, maxval=1.0, step=0.05) * 0.01

// Liquidity Sweep Parameters
sweepLength = input.int(5, "Liquidity Sweep Look-back Period", minval=2, maxval=20)
sweepThreshold = input.float(0.05, "Sweep Size Threshold (%)", minval=0.01, maxval=0.5, step=0.01) * 0.01

// Break of Structure Parameters
bosLength = input.int(5, "BOS Look-back Period", minval=2, maxval=20)
bosThreshold = input.float(0.05, "BOS Size Threshold (%)", minval=0.01, maxval=0.5, step=0.01) * 0.01

// Debug Mode
debugMode = input.bool(false, "Debug Mode (more signals)")

// Higher Timeframe Trend Parameters
htfPeriod1 = input.timeframe("15", "First Higher Timeframe")
htfPeriod2 = input.timeframe("60", "Second Higher Timeframe")

// ==========================================
// Indicators & Calculations
// ==========================================

// ATR Calculation
atr = ta.atr(atrLength)

// Higher Timeframe EMAs for Trend Determination
htf1_ema20 = request.security(syminfo.tickerid, htfPeriod1, ta.ema(close, 20), barmerge.gaps_off, barmerge.lookahead_off)
htf1_ema50 = request.security(syminfo.tickerid, htfPeriod1, ta.ema(close, 50), barmerge.gaps_off, barmerge.lookahead_off)
htf2_ema20 = request.security(syminfo.tickerid, htfPeriod2, ta.ema(close, 20), barmerge.gaps_off, barmerge.lookahead_off)
htf2_ema50 = request.security(syminfo.tickerid, htfPeriod2, ta.ema(close, 50), barmerge.gaps_off, barmerge.lookahead_off)

// Higher Timeframe Trend
htf1_bullish = htf1_ema20 > htf1_ema50
htf1_bearish = htf1_ema20 < htf1_ema50
htf2_bullish = htf2_ema20 > htf2_ema50
htf2_bearish = htf2_ema20 < htf2_ema50

// ==========================================
// Entry Conditions
// ==========================================

// 1. Fair Value Gap (FVG)
bullishFVG = false
bearishFVG = false

for i = 1 to fvgLength
    if low[i] > high[i+2] and (low[i] - high[i+2]) / high[i+2] > fvgThreshold
        bullishFVG := true
    if high[i] < low[i+2] and (low[i+2] - high[i]) / high[i] > fvgThreshold
        bearishFVG := true

// 2. Inverse Fair Value Gap
inverseBullishFVG = false
inverseBearishFVG = false

for i = 1 to fvgLength
    if high[i+1] < low[i+2] and close[i] > open[i] and close[i] > high[i+1]
        inverseBullishFVG := true
    if low[i+1] > high[i+2] and close[i] < open[i] and close[i] < low[i+1]
        inverseBearishFVG := true

// 3. Order Block / Breaker Block
bullishOrderBlock = false
bearishOrderBlock = false

for i = 1 to obLength
    if close[i+1] < open[i+1] and (open[i+1] - close[i+1]) / close[i+1] > obThreshold and close[i] > open[i]
        bullishOrderBlock := true
    if close[i+1] > open[i+1] and (close[i+1] - open[i+1]) / open[i+1] > obThreshold and close[i] < open[i]
        bearishOrderBlock := true

// 4. Liquidity Sweep
bullishSweep = false
bearishSweep = false

lowestLow = ta.lowest(low, sweepLength+1)
highestHigh = ta.highest(high, sweepLength+1)

if low[1] < lowestLow[2] and close > open
    bullishSweep := true
if high[1] > highestHigh[2] and close < open
    bearishSweep := true

// 5. Break of Structure (BOS)
bullishBOS = false
bearishBOS = false

prevHigh = high[2]
prevLow = low[2]

if high > prevHigh and low[1] < low[2]
    bullishBOS := true
if low < prevLow and high[1] > high[2]
    bearishBOS := true

// Simpler version for debug mode
if debugMode
    bullishBOS := close > open and close > close[1]
    bearishBOS := close < open and close < close[1]

// ==========================================
// Signal Generation
// ==========================================

// Count valid entry conditions
bullishConditions = bullishFVG ? 1 : 0
bullishConditions := bullishConditions + (inverseBullishFVG ? 1 : 0)
bullishConditions := bullishConditions + (bullishOrderBlock ? 1 : 0)
bullishConditions := bullishConditions + (bullishSweep ? 1 : 0)

bearishConditions = bearishFVG ? 1 : 0
bearishConditions := bearishConditions + (inverseBearishFVG ? 1 : 0)
bearishConditions := bearishConditions + (bearishOrderBlock ? 1 : 0)
bearishConditions := bearishConditions + (bearishSweep ? 1 : 0)

// Entry signals (need at least 2 conditions + BOS confirmation)
// In debug mode, require only 1 condition
minConditions = debugMode ? 1 : 2
longSignal = bullishConditions >= minConditions and bullishBOS and (htf1_bullish or htf2_bullish)
shortSignal = bearishConditions >= minConditions and bearishBOS and (htf1_bearish or htf2_bearish)

// Debug mode override for testing
if debugMode
    longSignal := longSignal or (bullishBOS and htf1_bullish)
    shortSignal := shortSignal or (bearishBOS and htf1_bearish)

// ==========================================
// Risk Management
// ==========================================

// Calculate dynamic stop loss based on ATR
longStopDistance = atr * atrMultiplier
shortStopDistance = atr * atrMultiplier

// Default fixed values for testing
if debugMode
    longStopDistance := close * 0.01  // 1% stop
    shortStopDistance := close * 0.01  // 1% stop

// Calculate position size based on risk
nqPointValue = 20  // Each point is $20 for NQ
longPositionSize = math.floor(2000 / (longStopDistance * nqPointValue))
shortPositionSize = math.floor(2000 / (shortStopDistance * nqPointValue))

// Ensure at least 1 contract
longPositionSize := math.max(longPositionSize, 1)
shortPositionSize := math.max(shortPositionSize, 1)

// Variables to track entry time
var int entryTime = 0
var float equityCurve = accountSize

// ==========================================
// Strategy Execution
// ==========================================

// Make sure we don't get multiple signals on the same bar
var longEnteredThisBar = false
var shortEnteredThisBar = false

longEnteredThisBar := false
shortEnteredThisBar := false

// Entry conditions
if longSignal and not longEnteredThisBar and strategy.position_size <= 0
    strategy.close_all()
    strategy.entry("Long", strategy.long, qty=longPositionSize)
    longEnteredThisBar := true
    entryTime := time

if shortSignal and not shortEnteredThisBar and strategy.position_size >= 0
    strategy.close_all()
    strategy.entry("Short", strategy.short, qty=shortPositionSize)
    shortEnteredThisBar := true
    entryTime := time

// Take profit and stop loss orders
if strategy.position_size > 0
    stopPrice = strategy.position_avg_price - longStopDistance
    takeProfitPrice1 = strategy.position_avg_price + longStopDistance
    strategy.exit("Long TP1", "Long", qty_percent=50, limit=takeProfitPrice1, stop=stopPrice)
    
    // Move stop to breakeven after 1R move
    if high >= takeProfitPrice1
        strategy.exit("Long BE", "Long", stop=strategy.position_avg_price)

if strategy.position_size < 0
    stopPrice = strategy.position_avg_price + shortStopDistance
    takeProfitPrice1 = strategy.position_avg_price - shortStopDistance
    strategy.exit("Short TP1", "Short", qty_percent=50, limit=takeProfitPrice1, stop=stopPrice)
    
    // Move stop to breakeven after 1R move
    if low <= takeProfitPrice1
        strategy.exit("Short BE", "Short", stop=strategy.position_avg_price)

// Time-based exit
if strategy.position_size != 0
    currentTime = time
    if (currentTime - entryTime) >= timeoutPeriod * 60000  // Convert minutes to milliseconds
        strategy.close_all(comment="Time Exit")

// ==========================================
// Trailing Stop for Account Management
// ==========================================

// Update equity curve
equityCurve := strategy.equity

// Check if profit target is reached or trailing stop is hit
if strategy.equity >= accountSize + profitGoal
    strategy.close_all(comment="Profit Goal")

if strategy.equity >= accountSize + trailingThreshold
    trailingStop = math.max(accountSize, strategy.equity - trailingThreshold)
    if strategy.equity <= trailingStop
        strategy.close_all(comment="Trailing Stop")

// Stop trailing if account reaches the stop trailing threshold
if strategy.equity >= stopsTrailing
    strategy.close_all(comment="Stop Trailing")

// ==========================================
// Plotting
// ==========================================

// Plot entry conditions
plotshape(longSignal, title="Long Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortSignal, title="Short Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Plot current position
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : strategy.position_size < 0 ? color.new(color.red, 90) : na)

// Alert conditions
alertcondition(longSignal, title="Long Entry Signal", message="NQ LONG ENTRY: {{ticker}}, Price: {{close}}")
alertcondition(shortSignal, title="Short Entry Signal", message="NQ SHORT ENTRY: {{ticker}}, Price: {{close}}")
alertcondition(strategy.position_size > 0 and high >= strategy.position_avg_price + longStopDistance, title="Long Take Profit", message="NQ LONG TP: {{ticker}}, Price: {{close}}")
alertcondition(strategy.position_size < 0 and low <= strategy.position_avg_price - shortStopDistance, title="Short Take Profit", message="NQ SHORT TP: {{ticker}}, Price: {{close}}")
alertcondition(strategy.position_size > 0 and low <= strategy.position_avg_price - longStopDistance, title="Long Stop Loss", message="NQ LONG SL: {{ticker}}, Price: {{close}}")
alertcondition(strategy.position_size < 0 and high >= strategy.position_avg_price + shortStopDistance, title="Short Stop Loss", message="NQ SHORT SL: {{ticker}}, Price: {{close}}")