ملٹی سورس کنفرمیشن انڈیکیٹر بیک ٹیسٹنگ فریم ورک: ایک مقداری تجارتی ٹیسٹنگ سسٹم جو رسک مینجمنٹ اور سگنل کا پتہ لگاتا ہے

SMA EMA MACD RSI TP/SL R/R ROI VWAP ATR
تخلیق کی تاریخ: 2025-07-08 17:21:11 آخر میں ترمیم کریں: 2025-07-08 17:21:11
کاپی: 0 کلکس کی تعداد: 256
2
پر توجہ دیں
319
پیروکار

ملٹی سورس کنفرمیشن انڈیکیٹر بیک ٹیسٹنگ فریم ورک: ایک مقداری تجارتی ٹیسٹنگ سسٹم جو رسک مینجمنٹ اور سگنل کا پتہ لگاتا ہے ملٹی سورس کنفرمیشن انڈیکیٹر بیک ٹیسٹنگ فریم ورک: ایک مقداری تجارتی ٹیسٹنگ سسٹم جو رسک مینجمنٹ اور سگنل کا پتہ لگاتا ہے

جائزہ

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

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

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

  1. متعدد سگنل کا پتہ لگانے کے طریقےحکمت عملی: detectLongSignal () اور detectShortSignal () افعال کے ذریعہ سگنل کا پتہ لگانے کے پانچ مختلف طریقوں کو لاگو کیا گیا ہے:

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

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

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

  5. مشاہدہ اور نگرانیحکمت عملی: تمام ان پٹ اور آؤٹ پٹ سگنل کو چارٹ پر نشان زد کرنے کے لئے پلاٹس شیپ فنکشن کا استعمال کریں اور table.new کے ذریعہ ایک حقیقی وقت کی حیثیت کا ٹیبل بنائیں جو موجودہ حکمت عملی کی ترتیب اور تجارت کی حیثیت کو ظاہر کرے۔

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

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

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

  3. مکمل خطرے کا انتظاماس حکمت عملی میں پیشہ ورانہ سطح پر رسک مینجمنٹ کی خصوصیات شامل ہیں:

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

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

اسٹریٹجک رسک

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

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

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

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

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

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

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

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

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

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

  5. کارکردگی کے اشارے میں اضافہ: اگرچہ حکمت عملی پہلے ہی بنیادی حیثیت کی نگرانی فراہم کرتی ہے ، لیکن حکمت عملی کی کارکردگی کا بہتر اندازہ لگانے میں مدد کے لئے حکمت عملی کے جائزوں کو فراہم کرنے کے لئے مزید کارکردگی کے اشارے ، جیسے شارپ تناسب ، زیادہ سے زیادہ واپسی ، جیت کا تناسب وغیرہ شامل کیے جاسکتے ہیں۔

خلاصہ کریں۔

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

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

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

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

//@version=6
strategy("FULLY FUNCTIONAL INDICATOR TESTER", overlay=true, margin_long=100, margin_short=100)

// Entry/Exit Signal Inputs
longEntry = input.source(close, 'Long Entry Trigger', 'Source for long signal (connect your indicator here)')
shortEntry = input.source(close, 'Short Entry Trigger', 'Source for short signal (connect your indicator here)')
activateLongExit = input.bool(false, 'Activate Long Exit Signals')
longExit = input.source(high, 'Long Exit Trigger', 'Source for long exit signal')
activateShortExit = input.bool(false, 'Activate Short Exit Signals')
shortExit = input.source(low, 'Short Exit Trigger', 'Source for short exit signal')

// Signal Detection Method
signalMethod = input.string('Value Change', 'Signal Detection Method', options=['Value Change', 'Crossover Above', 'Crossover Below', 'Value Above Threshold', 'Value Below Threshold'])
signalThreshold = input.float(0, 'Signal Threshold', tooltip='Threshold value for signal detection methods')

// Take Profit and Stop Loss
fixedTp = input.int(0, 'Static TP (in ticks)', 0, tooltip='0 = disabled')
initialSL = input.int(0, 'Initial SL (in ticks)', 0, tooltip='0 = disabled')

// Break Even Settings
breakEvenTrigger = input.int(0, 'Break Even Trigger (in ticks)', 0, tooltip='Move SL to break even after this many ticks profit. 0 = disabled')

// Confluence Settings
useConfluence = input.bool(false, 'Use Confluence Filter', 'Activate confluence filter for entries')
longConfluence = input.source(high, 'Long Signal Confluence', 'Source for long confluence filter')
longConfluenceTrigger = input.source(low, 'Long Confluence Trigger', 'Value that must be below confluence source for long entry')
shortConfluence = input.source(high, 'Short Signal Confluence', 'Source for short confluence filter')
shortConfluenceTrigger = input.source(low, 'Short Confluence Trigger', 'Value that must be above confluence source for short entry')
confluenceLookback = input.int(0, 'Confluence Lookback Period', 0, 10, 1, 'Number of candles to look back for confluence')

// Variables to track entry prices for break-even
var float longEntryPrice = na
var float shortEntryPrice = na

// Signal Detection Functions
detectLongSignal() =>
    switch signalMethod
        'Value Change' => longEntry != longEntry[1] and longEntry > 0
        'Crossover Above' => ta.crossover(longEntry, signalThreshold)
        'Crossover Below' => ta.crossunder(longEntry, signalThreshold)
        'Value Above Threshold' => longEntry > signalThreshold and longEntry[1] <= signalThreshold
        'Value Below Threshold' => longEntry < signalThreshold and longEntry[1] >= signalThreshold
        => false

detectShortSignal() =>
    switch signalMethod
        'Value Change' => shortEntry != shortEntry[1] and shortEntry > 0
        'Crossover Above' => ta.crossover(shortEntry, signalThreshold)
        'Crossover Below' => ta.crossunder(shortEntry, signalThreshold)
        'Value Above Threshold' => shortEntry > signalThreshold and shortEntry[1] <= signalThreshold
        'Value Below Threshold' => shortEntry < signalThreshold and shortEntry[1] >= signalThreshold
        => false

detectLongExit() =>
    switch signalMethod
        'Value Change' => longExit != longExit[1] and longExit > 0
        'Crossover Above' => ta.crossover(longExit, signalThreshold)
        'Crossover Below' => ta.crossunder(longExit, signalThreshold)
        'Value Above Threshold' => longExit > signalThreshold and longExit[1] <= signalThreshold
        'Value Below Threshold' => longExit < signalThreshold and longExit[1] >= signalThreshold
        => false

detectShortExit() =>
    switch signalMethod
        'Value Change' => shortExit != shortExit[1] and shortExit > 0
        'Crossover Above' => ta.crossover(shortExit, signalThreshold)
        'Crossover Below' => ta.crossunder(shortExit, signalThreshold)
        'Value Above Threshold' => shortExit > signalThreshold and shortExit[1] <= signalThreshold
        'Value Below Threshold' => shortExit < signalThreshold and shortExit[1] >= signalThreshold
        => false

// Confluence confirmation functions
longConfirmation() => 
    confirmation = false
    if confluenceLookback == 0
        confirmation := longConfluenceTrigger < longConfluence
    else
        for x = 0 to confluenceLookback
            if longConfluenceTrigger[x] < longConfluence[x]
                confirmation := true
                break
    confirmation

shortConfirmation() => 
    confirmation = false
    if confluenceLookback == 0
        confirmation := shortConfluenceTrigger > shortConfluence
    else
        for x = 0 to confluenceLookback
            if shortConfluenceTrigger[x] > shortConfluence[x]
                confirmation := true
                break
    confirmation

// Entry conditions
longConfirmed = useConfluence ? longConfirmation() : true
shortConfirmed = useConfluence ? shortConfirmation() : true

longCondition = detectLongSignal() and longConfirmed
shortCondition = detectShortSignal() and shortConfirmed

// Entry logic
if (longCondition and strategy.opentrades == 0)
    strategy.entry('Long', strategy.long)
    longEntryPrice := close
    // Set initial exit orders
    if fixedTp > 0 or initialSL > 0
        strategy.exit('Long Exit', 'Long', 
                     profit = fixedTp > 0 ? fixedTp : na, 
                     loss = initialSL > 0 ? initialSL : na, 
                     comment_profit = 'TP Hit', 
                     comment_loss = 'SL Hit')

if (shortCondition and strategy.opentrades == 0)
    strategy.entry('Short', strategy.short)
    shortEntryPrice := close
    // Set initial exit orders
    if fixedTp > 0 or initialSL > 0
        strategy.exit('Short Exit', 'Short', 
                     profit = fixedTp > 0 ? fixedTp : na, 
                     loss = initialSL > 0 ? initialSL : na, 
                     comment_profit = 'TP Hit', 
                     comment_loss = 'SL Hit')

// Custom exit signal logic
if (activateLongExit and detectLongExit() and strategy.position_size > 0)
    strategy.close('Long', 'Custom Long Exit')

if (activateShortExit and detectShortExit() and strategy.position_size < 0)
    strategy.close('Short', 'Custom Short Exit')

// Break-even logic
if (breakEvenTrigger > 0)
    // Long position break-even
    if (strategy.position_size > 0 and not na(longEntryPrice))
        ticksProfit = math.round((high - longEntryPrice) / syminfo.mintick)
        if (ticksProfit >= breakEvenTrigger)
            strategy.exit('Long Exit', 'Long', stop = longEntryPrice, comment_loss = 'Break Even')
    
    // Short position break-even  
    if (strategy.position_size < 0 and not na(shortEntryPrice))
        ticksProfit = math.round((shortEntryPrice - low) / syminfo.mintick)
        if (ticksProfit >= breakEvenTrigger)
            strategy.exit('Short Exit', 'Short', stop = shortEntryPrice, comment_loss = 'Break Even')

// Reset entry prices when no position
if (strategy.position_size == 0)
    longEntryPrice := na
    shortEntryPrice := na

// Plot signals for debugging
plotshape(longCondition, title='Long Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortCondition, title='Short Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(activateLongExit and detectLongExit() and strategy.position_size > 0, title='Long Exit', location=location.abovebar, color=color.orange, style=shape.xcross, size=size.small)
plotshape(activateShortExit and detectShortExit() and strategy.position_size < 0, title='Short Exit', location=location.belowbar, color=color.orange, style=shape.xcross, size=size.small)

// Display current settings in a table for easy reference
if barstate.islast
    var table infoTable = table.new(position.top_right, 2, 8, bgcolor=color.white, border_width=1)
    table.cell(infoTable, 0, 0, "Signal Method:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 0, signalMethod, text_color=color.black)
    table.cell(infoTable, 0, 1, "Threshold:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 1, str.tostring(signalThreshold), text_color=color.black)
    table.cell(infoTable, 0, 2, "TP (ticks):", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 2, str.tostring(fixedTp), text_color=color.black)
    table.cell(infoTable, 0, 3, "SL (ticks):", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 3, str.tostring(initialSL), text_color=color.black)
    table.cell(infoTable, 0, 4, "Break Even:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 4, str.tostring(breakEvenTrigger), text_color=color.black)
    table.cell(infoTable, 0, 5, "Confluence:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 5, useConfluence ? "ON" : "OFF", text_color=color.black)
    table.cell(infoTable, 0, 6, "Position:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 6, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT", text_color=color.black)
    table.cell(infoTable, 0, 7, "Status:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 7, "FULLY FUNCTIONAL", text_color=color.green)