کثیر مدت، کثیر اشارے، اعلی تعدد متحرک پیش رفت مقداری تجارتی حکمت عملی

EMA SMA RSI ATR 突破策略 时间过滤 追踪止损 动态风险管理
تخلیق کی تاریخ: 2025-08-04 11:57:30 آخر میں ترمیم کریں: 2025-08-04 11:57:30
کاپی: 0 کلکس کی تعداد: 241
2
پر توجہ دیں
319
پیروکار

کثیر مدت، کثیر اشارے، اعلی تعدد متحرک پیش رفت مقداری تجارتی حکمت عملی کثیر مدت، کثیر اشارے، اعلی تعدد متحرک پیش رفت مقداری تجارتی حکمت عملی

جائزہ

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

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

اس حکمت عملی کا بنیادی منطق ایک قیمت کے توڑنے کے نظام پر مبنی ہے جس کی متعدد شرائط کی تصدیق کی گئی ہے ، جس کا طریقہ کار مندرجہ ذیل ہے:

  1. تکنیکی اشارے کا مجموعہ

    • تیز EMA ((34 سائیکل) اور سست EMA ((63 سائیکل) کا استعمال کرتے ہوئے رجحان کی سمت کا تعین کریں
    • قیمت فلٹر کے طور پر SMA ((34 سائیکل) کا استعمال کرتے ہوئے
    • RSI ((14 سائیکل) کا استعمال کرتے ہوئے اوورلوڈ اوورلوڈ علاقوں کی شناخت کریں
    • اے ٹی آر ((14 سائیکل) کا استعمال کرتے ہوئے متحرک اسٹاپ نقصان اور منافع کی سطح کا حساب لگانا
  2. بریک ٹیسٹ منطق

    • N سیکنڈ کے اندر اندر سب سے زیادہ قیمت کی شناخت کریں (ڈیفالٹ 1) مزاحمت کی حیثیت سے
    • کم از کم قیمت کی نشاندہی کریں N سیکنڈ کے اندر اندر (ڈیفالٹ 1)
    • جب قیمت مزاحمت کی سطح کو توڑ دیتی ہے اور دیگر شرائط کو پورا کرتی ہے تو ایک سے زیادہ سگنل کو متحرک کریں
    • جب قیمت سپورٹ لیول سے نیچے آجائے اور دیگر شرائط پوری ہوں تو ایک کم کرنے کا اشارہ
  3. متعدد شرائط کی تصدیق

    • ایک سے زیادہ شرطیں: قیمت مزاحمت کی سطح کو توڑتی ہے + EMA تیز لائن سست لائن سے اوپر ہے + RSI زیادہ نہیں خریدا گیا ہے + قیمت SMA سے اوپر ہے
    • خالی کرنے کی شرائط: قیمت معاونت سے نیچے + EMA لائن نیچے سست لائن + RSI فروخت سے باہر نہیں + قیمت SMA کے نیچے
  4. وقت فلٹرنگ نظام

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

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

    • پہلے سے طے شدہ مستقل کو کم کرنے کے لئے دوہرا حساب
    • کیشے کے اشارے کے حساب کے نتائج کو تیز تر پروسیسنگ
    • صف اسٹوریج وقت فلٹرنگ کی ترتیب کا استعمال کرتے ہوئے اعلی کارکردگی کا مظاہرہ

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

اس حکمت عملی کے درج ذیل نمایاں فوائد ہیں۔

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

  2. ایک سے زیادہ توثیق کا طریقہ کارEMA ، SMA ، RSI اور دیگر متعدد اشارے کے ساتھ تجارتی اشارے کی توثیق کے ساتھ ، جعلی بریک آؤٹ کے خطرے کو نمایاں طور پر کم کیا گیا ہے۔ تصدیق کا یہ نظام اس بات کو یقینی بناتا ہے کہ جب متعدد شرائط ایک ساتھ مل کر پوری ہوجائیں تو ہی پوزیشن کھولی جائے ، جس سے تجارت کے معیار میں اضافہ ہوتا ہے۔

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

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

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

  6. وسائل کے استعمال کو بہتر بنانا: مستقل اور کیشے اشارے کے نتائج کی پیشگی حساب کتاب کے ذریعے ، کمپیوٹنگ وسائل کی کھپت کو مؤثر طریقے سے کم کیا گیا ہے ، جس سے حقیقی وقت کے تجارتی ماحول میں موثر آپریشن کو یقینی بنایا گیا ہے۔

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

اسٹریٹجک رسک

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

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

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

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

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

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

خطرے کو کم کرنے کے اقدامات

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

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

کوڈ کے تجزیے کے مطابق ، اس حکمت عملی کو مزید بہتر بنانے کے لئے درج ذیل نکات پر غور کیا گیا ہے:

  1. متحرک پیرامیٹرز خود کو اپنانے

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

    • مارکیٹ کی حالت کی شناخت کے ماڈیول کو شامل کرنا ، رجحان مارکیٹ اور ہلچل مارکیٹ میں فرق کرنا
    • مارکیٹ کی مختلف حالتوں کے مطابق مختلف ٹریڈنگ منطق اور خطرے کے پیرامیٹرز کا اطلاق
  3. بہتر فلٹرنگ سسٹم

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

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

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

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

    • کمپیوٹنگ کی انتہائی کارروائیوں کو مزید بہتر بنانے کے لئے ، جیسے کہ تلاش کی میز کا استعمال کرکے بار بار حساب کتاب کرنا
    • زیادہ موثر ٹائم فلٹرنگ الگورتھم کے حصول کے لئے ، ہر کالم گراف کے حساب سے کم بوجھ

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

خلاصہ کریں۔

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

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

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

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

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

//@version=5
strategy("Scalper TURBO", overlay=true, initial_capital=1000, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=50,
         calc_on_every_tick=true, process_orders_on_close=false)

// ==================== PERFORMANCE OPTIMIZATIONS ====================
// Pre-calculate constants to avoid repeated calculations
const int MINUTES_PER_HOUR = 60

// ==================== INPUT PARAMETERS ====================
// Technical Parameters
emaFastLen    = input.int(34, "EMA Rápida", minval=1)
emaSlowLen    = input.int(63, "EMA Lenta", minval=1)
smaLen        = input.int(34, "SMA Filtro", minval=1)
rsiLen        = input.int(14, "Periodo RSI", minval=1)
rsiOverbought = input.int(70, "RSI Sobrecompra", minval=1, maxval=100)
rsiOversold   = input.int(30, "RSI Sobreventa", minval=1, maxval=100)
breakoutPeriod = input.int(1, "Periodos para Breakout", minval=1)
atrLen        = input.int(14, "Periodo ATR", minval=1)
atrMultSL     = input.float(3, "Multiplicador ATR Stop-Loss", step=0.1)
atrMultTrail  = input.float(3, "Multiplicador ATR Trailing Stop", step=0.1)

// ==================== TIME FILTER SETTINGS ====================
var g_timefilters = "Time Filters"

// Time Filter Arrays for faster processing
useTimeFilter = array.new_bool(4)
startHour = array.new_int(4)
startMin = array.new_int(4)
endHour = array.new_int(4)
endMin = array.new_int(4)

// Time Filter 1
array.set(useTimeFilter, 0, input.bool(false, "Enable Time Filter 1", group=g_timefilters))
array.set(startHour, 0, input.int(9, "Start Hour", minval=0, maxval=23, group=g_timefilters, inline="tf1start"))
array.set(startMin, 0, input.int(0, "Start Minute", minval=0, maxval=59, group=g_timefilters, inline="tf1start"))
array.set(endHour, 0, input.int(11, "End Hour", minval=0, maxval=23, group=g_timefilters, inline="tf1end"))
array.set(endMin, 0, input.int(30, "End Minute", minval=0, maxval=59, group=g_timefilters, inline="tf1end"))

// Time Filter 2
array.set(useTimeFilter, 1, input.bool(false, "Enable Time Filter 2", group=g_timefilters))
array.set(startHour, 1, input.int(13, "Start Hour", minval=0, maxval=23, group=g_timefilters, inline="tf2start"))
array.set(startMin, 1, input.int(30, "Start Minute", minval=0, maxval=59, group=g_timefilters, inline="tf2start"))
array.set(endHour, 1, input.int(15, "End Hour", minval=0, maxval=23, group=g_timefilters, inline="tf2end"))
array.set(endMin, 1, input.int(0, "End Minute", minval=0, maxval=59, group=g_timefilters, inline="tf2end"))

// Time Filter 3
array.set(useTimeFilter, 2, input.bool(false, "Enable Time Filter 3", group=g_timefilters))
array.set(startHour, 2, input.int(16, "Start Hour", minval=0, maxval=23, group=g_timefilters, inline="tf3start"))
array.set(startMin, 2, input.int(0, "Start Minute", minval=0, maxval=59, group=g_timefilters, inline="tf3start"))
array.set(endHour, 2, input.int(18, "End Hour", minval=0, maxval=23, group=g_timefilters, inline="tf3end"))
array.set(endMin, 2, input.int(30, "End Minute", minval=0, maxval=59, group=g_timefilters, inline="tf3end"))

// Time Filter 4
array.set(useTimeFilter, 3, input.bool(false, "Enable Time Filter 4", group=g_timefilters))
array.set(startHour, 3, input.int(20, "Start Hour", minval=0, maxval=23, group=g_timefilters, inline="tf4start"))
array.set(startMin, 3, input.int(0, "Start Minute", minval=0, maxval=59, group=g_timefilters, inline="tf4start"))
array.set(endHour, 3, input.int(22, "End Hour", minval=0, maxval=23, group=g_timefilters, inline="tf4end"))
array.set(endMin, 3, input.int(30, "End Minute", minval=0, maxval=59, group=g_timefilters, inline="tf4end"))

// ==================== PINECONNECTOR SETTINGS ====================
var g_connector = "PineConnector Settings"
pcID = input.string(" ", "Pine Connector ID", group=g_connector)
symbolName = input.string("XAUUSD", "Symbol Name", tooltip="Symbol exactly as it appears in your MT5", group=g_connector)
lotSize = input.float(0.01, "Lot Size", step=0.01, group=g_connector)
enableRealTrading = input.bool(true, "Enable Real Trading", group=g_connector)
useFastExecution = input.bool(true, "Use Fast Execution Mode", group=g_connector)
showLabels = input.bool(true, "Show Info Labels", group=g_connector)

// Risk Management
useStopLoss = input.bool(true, "Use Stop Loss", group=g_connector)
useTakeProfit = input.bool(true, "Use Take Profit", group=g_connector)
useTrailingStop = input.bool(false, "Use Trailing Stop", group=g_connector)
stopLossATRMult = input.float(3, "Stop Loss ATR Multiple", step=0.1, group=g_connector)
takeProfitATRMult = input.float(3, "Take Profit ATR Multiple", step=0.1, group=g_connector)
trailingStopATRMult = input.float(3, "Trailing Stop ATR Multiple", step=0.1, group=g_connector)

// ==================== OPTIMIZED TIME FILTER FUNCTION ====================
// Cache current time components
currentHour = hour(time)
currentMin = minute(time)
currentTimeMinutes = currentHour * MINUTES_PER_HOUR + currentMin

// Optimized time check function
isTimeAllowed() =>
    anyEnabled = false
    timeOK = false
    
    for i = 0 to 3
        if array.get(useTimeFilter, i)
            anyEnabled := true
            startTimeMin = array.get(startHour, i) * MINUTES_PER_HOUR + array.get(startMin, i)
            endTimeMin = array.get(endHour, i) * MINUTES_PER_HOUR + array.get(endMin, i)
            
            inRange = startTimeMin <= endTimeMin ? 
                     (currentTimeMinutes >= startTimeMin and currentTimeMinutes <= endTimeMin) :
                     (currentTimeMinutes >= startTimeMin or currentTimeMinutes <= endTimeMin)
            
            if inRange
                timeOK := true
                break
    
    not anyEnabled or timeOK

// ==================== CACHED INDICATOR CALCULATIONS ====================
// Calculate indicators only once per bar
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
sma34   = ta.sma(close, smaLen)
rsi     = ta.rsi(close, rsiLen)
atr     = ta.atr(atrLen)

// Support/Resistance with caching
var float resistenciaReciente = na
var float soporteReciente = na
if barstate.isconfirmed
    resistenciaReciente := ta.highest(high, breakoutPeriod)[1]
    soporteReciente := ta.lowest(low, breakoutPeriod)[1]

// ==================== SIGNAL CONDITIONS ====================
// Pre-calculate all conditions
tendenciaAlcista = emaFast > emaSlow
tendenciaBajista = emaFast < emaSlow
rsiNotOverbought = rsi < rsiOverbought
rsiNotOversold = rsi > rsiOversold
priceAboveSMA = close > sma34
priceBelowSMA = close < sma34
timeAllowed = isTimeAllowed()

// Breakout conditions
breakoutUp = close > resistenciaReciente
breakoutDown = close < soporteReciente

// Final entry conditions - simplified logic
longSignal = breakoutUp and tendenciaAlcista and rsiNotOverbought and priceAboveSMA and timeAllowed
shortSignal = breakoutDown and tendenciaBajista and rsiNotOversold and priceBelowSMA and timeAllowed

// ==================== POSITION MANAGEMENT ====================
// Efficient position tracking
var int currentPosition = 0  // 1 = long, -1 = short, 0 = flat
var bool positionChanged = false
var string pendingAlert = ""

// Detect position changes
newLong = longSignal and currentPosition <= 0
newShort = shortSignal and currentPosition >= 0

// ==================== OPTIMIZED ALERT SYSTEM ====================
// Pre-build alert components for faster execution
stopPips = useStopLoss ? str.tostring(math.round(atr * stopLossATRMult * 100)) : ""
tpPips = useTakeProfit ? str.tostring(math.round(atr * takeProfitATRMult * 100)) : ""
trailPips = useTrailingStop ? str.tostring(math.round(atr * trailingStopATRMult * 100)) : ""

// Build risk management string once
riskParams = useStopLoss ? ",sl=" + stopPips : ""
riskParams += useTakeProfit ? ",tp=" + tpPips : ""
riskParams += useTrailingStop ? ",trailingstop=" + trailPips : ""

// ==================== FAST EXECUTION MODE ====================
if enableRealTrading
    // LONG ENTRY
    if newLong
        // Close short first if needed
        if currentPosition < 0
            alert(pcID + ",closeshort," + symbolName, alert.freq_once_per_bar)
        
        // Enter long
        strategy.entry("Long", strategy.long)
        longAlert = pcID + ",buy," + symbolName + ",risk=" + str.tostring(lotSize) + riskParams
        alert(longAlert, useFastExecution ? alert.freq_once_per_bar : alert.freq_once_per_bar_close)
        currentPosition := 1
    
    // SHORT ENTRY
    else if newShort
        // Close long first if needed
        if currentPosition > 0
            alert(pcID + ",closelong," + symbolName, alert.freq_once_per_bar)
        
        // Enter short
        strategy.entry("Short", strategy.short)
        shortAlert = pcID + ",sell," + symbolName + ",risk=" + str.tostring(lotSize) + riskParams
        alert(shortAlert, useFastExecution ? alert.freq_once_per_bar : alert.freq_once_per_bar_close)
        currentPosition := -1
else
    // Backtest mode
    if newLong
        strategy.entry("Long", strategy.long)
        currentPosition := 1
    else if newShort
        strategy.entry("Short", strategy.short)
        currentPosition := -1

// ==================== STOP LOSS MANAGEMENT ====================
// Calculate stops only when in position
if currentPosition != 0
    if currentPosition > 0
        stopLong = strategy.position_avg_price - atr * atrMultSL
        strategy.exit("Exit Long", "Long", stop=stopLong, trail_points=atr * atrMultTrail, trail_offset=atr * atrMultTrail)
    else
        stopShort = strategy.position_avg_price + atr * atrMultSL
        strategy.exit("Exit Short", "Short", stop=stopShort, trail_points=atr * atrMultTrail, trail_offset=atr * atrMultTrail)

// Detect exits
if strategy.position_size == 0 and currentPosition != 0
    if enableRealTrading
        exitAlert = currentPosition > 0 ? pcID + ",closelong," + symbolName : pcID + ",closeshort," + symbolName
        alert(exitAlert, alert.freq_once_per_bar)
    currentPosition := 0