ملٹی ٹائم فریم اسٹاکسٹک RSI کراس اوور حکمت عملی

RSI STOCH RSI MTF TRENDING MARKETS STOP LOSS MULTI-STAGE TP
تخلیق کی تاریخ: 2025-06-05 13:13:32 آخر میں ترمیم کریں: 2025-06-05 13:13:32
کاپی: 0 کلکس کی تعداد: 336
2
پر توجہ دیں
319
پیروکار

ملٹی ٹائم فریم اسٹاکسٹک RSI کراس اوور حکمت عملی ملٹی ٹائم فریم اسٹاکسٹک RSI کراس اوور حکمت عملی

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

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

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

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

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

  1. ابتدائی ٹرگر سگنل ((5 منٹ ٹائم فریم)

    • کثیر سر سگنل: جب 5 منٹ کے چارٹ پر اسٹوک RSI کی K لائن اوپر کی طرف سے D لائن کو عبور کرتی ہے اور اس کے عبور کے وقت K کی قیمت ٹرگر کی مخصوص سطح سے کم ہوتی ہے ((stoch_5min_k_long_trigger))
    • خالی سر سگنل: جب 5 منٹ کے چارٹ پر اسٹوک RSI کی K لائن نیچے کی طرف D لائن کو پار کرتی ہے اور اس کے پار ہونے پر K کی قیمت ٹرگر کی مخصوص سطح سے زیادہ ہوتی ہے ((stoch_5min_k_short_trigger)) ۔
  2. اعلی درجے کی توثیق ((15 منٹ کا ٹائم فریم)

    • 5 منٹ کے ابتدائی سگنل کے بعد ، حکمت عملی 15 منٹ کے وقت کے فریم کی تصدیق کے لئے سیٹ انتظار ونڈو ((wait_window_5min_bars) کے اندر تلاش کرتی ہے۔
    • کثیر سر کی تصدیق: 15 منٹ Stoch RSI کی K لائن اس کی D لائن سے سختی سے بڑی ہونی چاہئے ، اور 15 منٹ کی K قیمت اس سے کم ہونی چاہئے stoch_15min_long_entry_level سیٹ کریں.
    • خالی سر کی تصدیق: 15 منٹ Stoch RSI کی K لائن اس کی D لائن سے سختی سے چھوٹی ہونی چاہئے ، اور 15 منٹ کی K قیمت اس سے زیادہ ہونی چاہئے stoch_15min_short_entry_level سیٹ کریں.
  3. بار بار سگنل فلٹرنگ

    • حکمت عملی میں کولنگ پیریڈ میکانزم ((min_bars_between_signals) کا نفاذ کیا گیا ہے۔ نئے سگنل پر غور کرنے کے لئے ایک ہی سمت میں سگنل کے مابین K لائنوں کی ایک مخصوص تعداد سے گزرنا ضروری ہے۔
  4. پوزیشن مینجمنٹ

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

    • پہلا مرحلہ (TP1): 50٪ پوزیشنوں کو ختم کرنا ، مندرجہ ذیل دو طریقوں میں سے ایک کے ذریعہ متحرک کرنا:
      • ترجیحی طریقہ A ((انتہائی K ویلیو): اگر 5 منٹ یا 15 منٹ اسٹوک K ویلیو extreme_long_tp_level ((کثیر سر) سے زیادہ یا extreme_short_tp_level ((خالی سر)) سے کم ہو۔
      • ترجیحی طریقہ B ((مشروط 5 منٹ کراس + 15 منٹ K قیمت الٹ): جب 5 منٹ Stoch RSI کا K / D کراس ہوتا ہے ((کثیر سر کے لئے K نیچے سے گزرتا ہے D؛ ہوائی جہاز کے لئے K اوپر سے گزرتا ہے D) ، اور 15 منٹ Stoch K کی قیمت “الٹ” کی تصدیق کی جاتی ہے ((موجودہ 15 منٹ K < پچھلے 15 منٹ K کے لئے کثیر سر کے لئے؛ موجودہ 15 منٹ K > پچھلے 15 منٹ K کے لئے ہوائی جہاز کے لئے)
    • دوسرا مرحلہ ((TP2)): باقی 50٪ پوزیشنوں کو صاف کریں ، صرف TP1 کو متحرک کرنے کے بعد ہی چالو کریں ، اور جب 5 منٹ یا 15 منٹ اسٹوک K کی قیمت ایک بار پھر اسی انتہائی سطح پر پہنچ جائے تو اس پر عملدرآمد کریں۔

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

  1. ملٹی ٹائم فریم تصدیق میکانزم

    • یہ حکمت عملی 5 منٹ اور 15 منٹ کے ٹائم فریم کے اشاروں کو ملا کر جعلی سگنل کو کم کرتی ہے اور تجارت کے معیار کو بہتر بناتی ہے۔ مختصر ٹائم فریم داخلہ کے مواقع فراہم کرتے ہیں جبکہ طویل ٹائم فریم رجحان کی تصدیق کرتے ہیں ، یہ طریقہ مختصر مدت کے مارکیٹ شور کو مؤثر طریقے سے فلٹر کرسکتا ہے۔
  2. اوور خرید / اوور فروخت کی شرائط کا عین مطابق مقام

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

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

    • حکمت عملی کے پیرامیٹرز کو مارکیٹ کی ترجیحات کی عکاسی کرنے کے ل adjust ایڈجسٹ کیا جاسکتا ہے (جیسے موجودہ حکمت عملی کثیر جہتی کے لئے زیادہ نرمی ہے) ، جس سے یہ مختلف مارکیٹ کے ماحول اور تجارتی ترجیحات کے مطابق ڈھال سکتا ہے۔
  5. مکمل خطرے کا انتظام

    • واضح اسٹاپ نقصان کا طریقہ کار انٹری K لائن کی انتہائی قیمت پر مبنی ہے ، جو ہر تجارت کے لئے قابل مقدار خطرے کو کنٹرول کرتا ہے۔ اسٹاپ نقصان کی جانچ پڑتال کو منافع کی جانچ پڑتال سے پہلے ترجیح دی جاتی ہے ، اس بات کو یقینی بنانا کہ خطرہ کنٹرول ہمیشہ سب سے پہلے غور کیا جائے۔
  6. بار بار سگنل فلٹرنگ

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

اسٹریٹجک رسک

  1. پیرامیٹر کی حساسیت

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

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

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

    • موجودہ حکمت عملی کی ترتیب میں ملٹی ہیڈ ٹریڈنگ کو ترجیح دی جارہی ہے ، جس سے زیادہ تجارت یا غیر مناسب ملٹی ہیڈ سگنل ہوسکتے ہیں۔ مارکیٹ کے حالات کے مطابق پیرامیٹرز کو متوازن رکھنے کے ل adjust ایڈجسٹ کریں۔
  5. 15 منٹ کی تاخیر کی تصدیق

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

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

  1. متحرک روکنے کا طریقہ کار

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

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

    • اضافی تکنیکی اشارے جیسے MACD ، برن بینڈ یا منتقل اوسط کو معاون تصدیق کے اوزار کے طور پر شامل کرنا۔ کثیر اشارے کی گونج سگنل کی وشوسنییتا کو بڑھا سکتی ہے اور جھوٹی توڑ کو کم کرسکتی ہے۔
  4. خطرے کے راستے کو بہتر بنانا

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

    • مارکیٹ کے پس منظر کے تجزیے کی ایک اعلی سطح فراہم کرنے کے لئے تیسرے ٹائم فریم (جیسے 1 گھنٹہ یا 4 گھنٹے) کو شامل کرنے پر غور کریں ، خاص طور پر رجحانات کی تصدیق اور اہم حمایت / مزاحمت کی شناخت کے لئے۔
  6. ٹرانزیکشن ٹائم فیلٹر

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

خلاصہ کریں۔

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

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

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

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

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Archertoria

//@version=6
strategy("System 0530 - Stoch RSI Strategy v13 SL-Priority TP-Reversal", 
         overlay=true, 
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=100, 
         calc_on_order_fills=false, 
         process_orders_on_close=true,
         margin_short=50) 

// --- Original Indicator Input Parameters ---
g_stoch = "Stochastic RSI Parameters"
rsi_len = input.int(14, "RSI Period", minval=1, group=g_stoch)
stoch_rsi_len = input.int(14, "Stochastic of RSI Period (K Period for Stoch)", minval=1, group=g_stoch)
stoch_k_smooth = input.int(3, "Stochastic %K Smoothing (D Period for Stoch)", minval=1, group=g_stoch)
stoch_d_smooth = input.int(3, "Stochastic %D Smoothing (Smoothing for final D)", minval=1, group=g_stoch)

g_signal = "Signal Trigger and Confirmation Parameters"
stoch_5min_k_long_trigger = input.float(40.0, "5-min Stoch K Long Trigger Level (K must be ≤ this value)", minval=0, maxval=100, step=0.1, group=g_signal, tooltip="On the 5-minute chart, when the K line crosses above the D line, the K value at that time must be less than or equal to this setting to initiate a long signal wait.")
stoch_5min_k_short_trigger = input.float(70.0, "5-min Stoch K Short Trigger Level (K must be ≥ this value)", minval=0, maxval=100, step=0.1, group=g_signal, tooltip="On the 5-minute chart, when the K line crosses below the D line, the K value at that time must be greater than or equal to this setting to initiate a short signal wait.")
stoch_15min_long_entry_level = input.int(50, "15-min Stoch K Long Confirmation Threshold (K must be below this value)", minval=0, maxval=100, group=g_signal, tooltip="On the 15-minute chart, for final long confirmation, the 15-minute K line value must be below this setting.")
stoch_15min_short_entry_level = input.int(70, "15-min Stoch K Short Confirmation Threshold (K must be above this value)", minval=0, maxval=100, group=g_signal, tooltip="On the 15-minute chart, for final short confirmation, the 15-minute K line value must be above this setting.")
wait_window_5min_bars = input.int(7, "Number of 5-min bars to wait for 15-min signal", minval=1, group=g_signal, tooltip="After a 5-minute signal is issued, wait for 15-minute signal confirmation within the next N 5-minute bars.")

g_repeat_filter = "Duplicate Signal Filtering Settings"
use_signal_cooldown_filter = input.bool(true, title="Enable Duplicate Signal Filter", group=g_repeat_filter, tooltip="Filters out duplicate signals in the same direction within a short period.")
min_bars_between_signals = input.int(12, title="Minimum Bars Between Same-Direction Signals", minval=1, group=g_repeat_filter, tooltip="After a signal is issued, at least this many bars must pass before another signal in the same direction can be issued.")

// --- Take Profit Parameters ---
g_tp_params = "Take Profit Parameters"
extreme_long_tp_level = input.float(95.0, "Extreme Long TP Level (Stoch K >)", minval=50, maxval=100, step=0.1, group=g_tp_params, tooltip="Direct TP for longs if 5-min OR 15-min Stoch K exceeds this.")
extreme_short_tp_level = input.float(5.0, "Extreme Short TP Level (Stoch K <)", minval=0, maxval=50, step=0.1, group=g_tp_params, tooltip="Direct TP for shorts if 5-min OR 15-min Stoch K is below this.")

// --- Strategy Specific Input Parameters ---
g_strategy = "Strategy Parameters"
leverage_multiplier = input.float(1.0, "Leverage Multiplier (Affects theoretical position size only)", minval=1.0, step=0.1, group=g_strategy, tooltip="Note: TradingView strategies do not directly simulate margin account liquidation. This leverage is used to calculate theoretical position size. Actual leverage effects must be realized with a broker that supports leverage.")

// --- Function: Calculate Stochastic RSI ---
getStochasticRSI(src, rsiLen, stochLen, kSmooth, dSmooth) =>
    rsi_val = ta.rsi(src, rsiLen)
    stoch_rsi_k_raw = ta.stoch(rsi_val, rsi_val, rsi_val, stochLen) // Stoch of RSI
    stoch_rsi_k = ta.sma(stoch_rsi_k_raw, kSmooth)
    stoch_rsi_d = ta.sma(stoch_rsi_k, dSmooth)
    [stoch_rsi_k, stoch_rsi_d]

// --- Helper Function to get only K-series for Stochastic RSI (RE-ADDED for 15-min prev K) ---
getStochKSeriesOnly(src, rsiLen, stochLen, kSmooth, dSmooth) =>
    rsi_val = ta.rsi(src, rsiLen)
    stoch_rsi_k_raw = ta.stoch(rsi_val, rsi_val, rsi_val, stochLen)
    stoch_rsi_k = ta.sma(stoch_rsi_k_raw, kSmooth)
    stoch_rsi_k // Return only the K series

// --- Time Series Data Fetching and Stochastic RSI Calculation ---
[stoch_k_15min_val, stoch_d_15min_val] = request.security(syminfo.tickerid, "15", getStochasticRSI(close, rsi_len, stoch_rsi_len, stoch_k_smooth, stoch_d_smooth), lookahead=barmerge.lookahead_off)
// RE-ADDED: K value of the PREVIOUS 15-minute bar's Stochastic RSI
stoch_k_15min_prev_tf_bar = request.security(syminfo.tickerid, "15", nz(getStochKSeriesOnly(close, rsi_len, stoch_rsi_len, stoch_k_smooth, stoch_d_smooth)[1]), lookahead=barmerge.lookahead_off)
[stoch_k_5min_val, stoch_d_5min_val] = getStochasticRSI(close, rsi_len, stoch_rsi_len, stoch_k_smooth, stoch_d_smooth)

// --- Signal Logic State Variables ---
var bool waiting_for_15m_long_confirm = false
var bool waiting_for_15m_short_confirm = false
var int bars_elapsed_in_wait_state = 0
var int last_long_signal_bar_idx = -min_bars_between_signals 
var int last_short_signal_bar_idx = -min_bars_between_signals

// --- Variables to store SL reference points from ENTRY bar ---
var float entry_bar_low_for_sl = na
var float entry_bar_high_for_sl = na

// --- Take Profit Logic State Variables ---
var bool first_tp_long_taken = false
var bool first_tp_short_taken = false
// RE-ADDED: State variables for pending TP confirmation on 15-min reversal
var bool pending_long_tp_on_15m_reversal = false
var bool pending_short_tp_on_15m_reversal = false

// --- Detect 5-minute Stochastic RSI crossover events for ENTRY ---
bool stoch_5min_crossed_up_prev_bar = ta.crossover(stoch_k_5min_val[1], stoch_d_5min_val[1])
bool stoch_5min_crossed_down_prev_bar = ta.crossunder(stoch_k_5min_val[1], stoch_d_5min_val[1])
bool condition_5min_k_level_for_long_trigger = stoch_k_5min_val[1] <= stoch_5min_k_long_trigger
bool condition_5min_k_level_for_short_trigger = stoch_k_5min_val[1] >= stoch_5min_k_short_trigger

// --- Specific 5-minute Stochastic RSI crossover for Take Profit (current bar) ---
bool stoch_5min_k_cross_under_d_tp = ta.crossunder(stoch_k_5min_val, stoch_d_5min_val) // For Long TP trigger
bool stoch_5min_k_cross_over_d_tp  = ta.crossover(stoch_k_5min_val, stoch_d_5min_val)  // For Short TP trigger

// --- RE-ADDED: 15-minute Reversal Confirmation for Take Profit ---
bool confirm_15m_reversal_for_long_tp = stoch_k_15min_val < stoch_k_15min_prev_tf_bar
bool confirm_15m_reversal_for_short_tp = stoch_k_15min_val > stoch_k_15min_prev_tf_bar

// --- Manage waiting state and tolerance period for ENTRY ---
if (strategy.position_size == 0)
    if (stoch_5min_crossed_up_prev_bar and condition_5min_k_level_for_long_trigger)
        can_trigger_new_long = not use_signal_cooldown_filter or (bar_index - last_long_signal_bar_idx >= min_bars_between_signals)
        if (can_trigger_new_long)
            waiting_for_15m_long_confirm := true
            waiting_for_15m_short_confirm := false 
            bars_elapsed_in_wait_state := 1
    else if (stoch_5min_crossed_down_prev_bar and condition_5min_k_level_for_short_trigger)
        can_trigger_new_short = not use_signal_cooldown_filter or (bar_index - last_short_signal_bar_idx >= min_bars_between_signals)
        if (can_trigger_new_short)
            waiting_for_15m_short_confirm := true
            waiting_for_15m_long_confirm := false 
            bars_elapsed_in_wait_state := 1
    else if (waiting_for_15m_long_confirm or waiting_for_15m_short_confirm)
        bars_elapsed_in_wait_state += 1
    
    if (bars_elapsed_in_wait_state > wait_window_5min_bars)
        waiting_for_15m_long_confirm := false
        waiting_for_15m_short_confirm := false
        bars_elapsed_in_wait_state := 0 
else 
    waiting_for_15m_long_confirm := false
    waiting_for_15m_short_confirm := false
    bars_elapsed_in_wait_state := 0

// --- 15-minute Stochastic RSI confirmation conditions for ENTRY (Strict Crossover) ---
bool confirm_15min_long_stoch_kd_cond = stoch_k_15min_val > stoch_d_15min_val // K must be strictly greater than D
bool confirm_15min_short_stoch_kd_cond = stoch_k_15min_val < stoch_d_15min_val // K must be strictly less than D
bool filter_15min_stoch_level_long = stoch_k_15min_val < stoch_15min_long_entry_level
bool filter_15min_stoch_level_short = stoch_k_15min_val > stoch_15min_short_entry_level

// --- Main Signal Determination (for strategy logic) ---
entry_long_signal = false
entry_short_signal = false

if (strategy.position_size == 0) 
    if (waiting_for_15m_long_confirm and bars_elapsed_in_wait_state <= wait_window_5min_bars)
        if (confirm_15min_long_stoch_kd_cond and filter_15min_stoch_level_long)
            can_confirm_new_long = not use_signal_cooldown_filter or (bar_index - last_long_signal_bar_idx >= min_bars_between_signals)
            if (can_confirm_new_long)
                entry_long_signal := true
    if (waiting_for_15m_short_confirm and bars_elapsed_in_wait_state <= wait_window_5min_bars)
        if (confirm_15min_short_stoch_kd_cond and filter_15min_stoch_level_short)
            can_confirm_new_short = not use_signal_cooldown_filter or (bar_index - last_short_signal_bar_idx >= min_bars_between_signals)
            if (can_confirm_new_short)
                entry_short_signal := true

// --- Strategy Execution Logic ---
// Reset SL ref and TP flags if position just closed
if (strategy.position_size == 0 and strategy.position_size[1] != 0) 
    first_tp_long_taken := false
    first_tp_short_taken := false
    entry_bar_low_for_sl := na 
    entry_bar_high_for_sl := na 
    pending_long_tp_on_15m_reversal := false // Reset pending TP flag
    pending_short_tp_on_15m_reversal := false // Reset pending TP flag

if (entry_long_signal) 
    strategy.entry("LE", strategy.long, comment="Long Entry")
    last_long_signal_bar_idx := bar_index 
    waiting_for_15m_long_confirm := false 
    bars_elapsed_in_wait_state := 0
    first_tp_long_taken := false 
    entry_bar_low_for_sl := low 
    entry_bar_high_for_sl := na 
    pending_long_tp_on_15m_reversal := false // Reset for new trade
    pending_short_tp_on_15m_reversal := false     

if (entry_short_signal) 
    strategy.entry("SE", strategy.short, comment="Short Entry")
    last_short_signal_bar_idx := bar_index 
    waiting_for_15m_short_confirm := false 
    bars_elapsed_in_wait_state := 0
    first_tp_short_taken := false  
    entry_bar_high_for_sl := high 
    entry_bar_low_for_sl := na    
    pending_short_tp_on_15m_reversal := false // Reset for new trade
    pending_long_tp_on_15m_reversal := false

// --- Stop Loss Logic (PRIORITY 1) ---
// Check and execute SL first. If SL triggers, position size becomes 0, preventing TP logic below from executing on the same bar.
bool sl_triggered_this_bar = false
if (strategy.position_size > 0) // If in a long trade
    if (not na(entry_bar_low_for_sl) and close < entry_bar_low_for_sl)
        strategy.close(id="LE", comment="SL Long")
        sl_triggered_this_bar := true
        pending_long_tp_on_15m_reversal := false // Ensure pending TP is cancelled if SL hits

if (strategy.position_size < 0) // If in a short trade
    if (not na(entry_bar_high_for_sl) and close > entry_bar_high_for_sl)
        strategy.close(id="SE", comment="SL Short")
        sl_triggered_this_bar := true
        pending_short_tp_on_15m_reversal := false // Ensure pending TP is cancelled if SL hits

// --- Take Profit Logic (PRIORITY 2 - only if SL did not trigger on this bar) ---
if (not sl_triggered_this_bar) // Only proceed with TP if SL hasn't already closed the position on this bar
    if (strategy.position_size > 0) // --- LONG TP LOGIC ---
        extreme_long_tp_condition = stoch_k_5min_val > extreme_long_tp_level or stoch_k_15min_val > extreme_long_tp_level
        if (extreme_long_tp_condition)
            if (not first_tp_long_taken)
                strategy.close(id="LE", comment="TP1 Long", qty_percent=50)
                first_tp_long_taken := true
            else 
                strategy.close(id="LE", comment="TP2 Long")
            pending_long_tp_on_15m_reversal := false // Reset pending state as this TP takes precedence
        else 
            // Conditional TP logic (5-min trigger + 15-min reversal)
            if (stoch_5min_k_cross_under_d_tp and not pending_long_tp_on_15m_reversal) // Set pending state
                pending_long_tp_on_15m_reversal := true
        
            if (pending_long_tp_on_15m_reversal and confirm_15m_reversal_for_long_tp) // Check for confirmation
                if (not first_tp_long_taken)
                    strategy.close(id="LE", comment="TP1 Long", qty_percent=50)
                    first_tp_long_taken := true
                else 
                    strategy.close(id="LE", comment="TP2 Long")
                pending_long_tp_on_15m_reversal := false // Reset after TP

    if (strategy.position_size < 0) // --- SHORT TP LOGIC ---
        extreme_short_tp_condition = stoch_k_5min_val < extreme_short_tp_level or stoch_k_15min_val < extreme_short_tp_level
        if (extreme_short_tp_condition)
            if (not first_tp_short_taken)
                strategy.close(id="SE", comment="TP1 Short", qty_percent=50)
                first_tp_short_taken := true
            else 
                strategy.close(id="SE", comment="TP2 Short")
            pending_short_tp_on_15m_reversal := false // Reset pending state
        else
            // Conditional TP logic (5-min trigger + 15-min reversal)
            if (stoch_5min_k_cross_over_d_tp and not pending_short_tp_on_15m_reversal) // Set pending state
                pending_short_tp_on_15m_reversal := true

            if (pending_short_tp_on_15m_reversal and confirm_15m_reversal_for_short_tp) // Check for confirmation
                if (not first_tp_short_taken)
                    strategy.close(id="SE", comment="TP1 Short", qty_percent=50)
                    first_tp_short_taken := true
                else 
                    strategy.close(id="SE", comment="TP2 Short")
                pending_short_tp_on_15m_reversal := false // Reset after TP