ہائی ٹائم فریم وزنی حرکت پذیر اوسط وقفہ پیش رفت مقداری تجارتی حکمت عملی

WMA HTF TP/SL Zone Trading Breakout Strategy risk management
تخلیق کی تاریخ: 2025-05-26 14:50:17 آخر میں ترمیم کریں: 2025-05-26 14:50:17
کاپی: 0 کلکس کی تعداد: 249
2
پر توجہ دیں
319
پیروکار

ہائی ٹائم فریم وزنی حرکت پذیر اوسط وقفہ پیش رفت مقداری تجارتی حکمت عملی ہائی ٹائم فریم وزنی حرکت پذیر اوسط وقفہ پیش رفت مقداری تجارتی حکمت عملی

جائزہ

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

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

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

  1. سب سے پہلے ، حکمت عملی نے اوپن ، اعلی ترین ، کم ترین اور اختتامی قیمتوں کی ایک وزن والی متحرک اوسط ((ڈبلیو ایم اے) کا حساب لگایا ، جس کی مدت صارف کے مقرر کردہ کم سے کم مدت کے پیرامیٹرز پر مبنی ہے (ڈیفالٹ 60) ۔
  2. اس کے بعد حکمت عملی ان WMA اقدار کو اعلی ٹائم فریم (ڈیفالٹ چاند لائن) سے موجودہ ٹریڈنگ ٹائم فریم میں تبدیل کرتی ہے۔
  3. مرکزی قیمت کے طور پر ایک اعلی یا کم وزن والے منتقل اوسط کے وسط پوائنٹ کا حساب لگائیں۔
  4. مرکزی قیمت اور صارف کی وضاحت پر مبنی فی صد تناسب ((ڈیفالٹ 0.1 یا 10٪) ، بلٹ اپ ریل ((مقاومت کی جگہ) اور نیچے ریل ((سپورٹ کی جگہ)) ۔
  5. جب قیمت اوپر کی طرف ٹریک ٹوٹ جاتی ہے تو ، ایک کثیر سگنل کو متحرک کیا جاتا ہے۔ جب قیمت نیچے کی طرف ٹریک ٹریک ٹریک ہوتی ہے تو ، ایک خالی سگنل کو متحرک کیا جاتا ہے۔
  6. حکمت عملی نے دو اسٹاپ آؤٹ اہداف طے کیے ہیں ((ڈیفالٹ 10٪ اور 20٪) ، ہر ایک ہدف کی صفائی کے لئے کچھ پوزیشنیں ((ڈیفالٹ 50٪) ۔
  7. ممکنہ نقصان کو محدود کرنے کے لئے سٹاپ نقصان (ڈیفالٹ 5٪) مقرر کریں.

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

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

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

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

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

  3. واضح داخلے اور باہر نکلنے کے قواعد: حکمت عملی واضح انٹری سگنل فراہم کرتی ہے ((بریک اپ / ڈاون ٹریل) اور آؤٹ ریل قواعد ((مجموعی اسٹاپ اور اسٹاپ نقصان) ، تجارتی فیصلوں میں موضوعیت کو ختم کرتی ہے۔

  4. خطرے کے انتظام کے انضمام: بلٹ ان اسٹاپ اور بیچ اسٹاپ میکانزم سرمایہ کو بچانے اور منافع کو لاک کرنے میں مدد کرتا ہے ، جو ایک مکمل تجارتی نظام ہے۔

  5. بصری آراءحکمت عملی: حکمت عملی میں بہت سارے بصری عناصر شامل ہیں ، بشمول ٹریڈنگ بینڈ کے پس منظر کا رنگ ، فی صد تبدیلی کا ٹیگ اور انٹری / آؤٹ مارکر ، جو تاجروں کو مارکیٹ کی صورتحال کا فوری اندازہ لگانے میں مدد کرتا ہے۔

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

  7. ملٹی ٹائم فریم کوآرڈینیشن: حکمت عملی اعلی ٹائم فریم سگنل کے معیار اور موجودہ ٹائم فریم پر عملدرآمد کی درستگی کو ملا کر ملٹی ٹائم فریم کوآرڈینیشن حاصل کرتی ہے۔

اسٹریٹجک رسک

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

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

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

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

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

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

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

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

کوڈ کے گہرے تجزیے کی بنیاد پر ، اس حکمت عملی کو مندرجہ ذیل سمتوں میں بہتر بنایا جاسکتا ہے۔

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

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

  3. رجحانات کے فلٹر میں شامل ہوں: ٹرینڈ شناخت کے اجزاء جیسے طویل مدتی منتقل اوسط یا ADX اشارے شامل کریں تاکہ مضبوط رجحان سازی والی منڈیوں میں ٹریڈنگ کے طرز عمل کو ایڈجسٹ کیا جاسکے۔ مثال کے طور پر صرف اوپر کی طرف اور صرف نیچے کی طرف۔

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

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

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

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

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

خلاصہ کریں۔

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

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

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

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

//@version=5
strategy('ZONE FLOW', overlay=true)

// Input parameters
src = close
src1 = open
src2 = low
src3 = high
Min = input(60, title='Minimum Period')
len = timeframe.isintraday and timeframe.multiplier >= 1 ? Min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

c1 = ta.wma(src, len)
o1 = ta.wma(src1, len)
l1 = ta.wma(src2, len)
h1 = ta.wma(src3, len)

HTF = input.timeframe('M', title='Higher Time Frame')
ti = ta.change(time(HTF)) != 0
c = fixnan(ti ? c1 : na)
o = fixnan(ti ? o1 : na)
h = fixnan(ti ? h1 : na)
l = fixnan(ti ? l1 : na)

// Calculating mid-point
m = (h + l) / 2

// Calculating ratio lines
ratio = input.float(0.1, title='% ratio', minval=0.001, maxval=10)
r1 = m * ratio
u = m + r1
d = m - r1

// Take profit settings
takeProfitPercentage1 = input.float(10.0, title='Take Profit 1 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity1 = input.float(50.0, title='Take Profit 1 Quantity (%)', minval=0.1, maxval=100.0) / 100
takeProfitPercentage2 = input.float(20.0, title='Take Profit 2 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity2 = input.float(50.0, title='Take Profit 2 Quantity (%)', minval=0.1, maxval=100.0) / 100

// Stop loss settings
stopLossPercentage = input.float(5.0, title='Stop Loss (%)', minval=0.1, maxval=100.0) / 100

// Number of bars to extend lines
extensionBars = input.int(5, title='Number of Bars to Extend Lines', minval=1)

// Number of bars to offset the percentage label
percentOffsetBars = input.int(25, title='Number of Bars to Offset Percentage Label', minval=1)

// Input for multiplying the percentage change
multiplierFactor = input.int(20, title='Multiplier for Percentage Change', minval=1)

// Input for background colors
bgColor1 = input(color.new(color.blue, 90), title='Background Color 1')
bgColor2 = input(color.new(color.orange, 90), title='Background Color 2')

// Plot high, low, and ratio lines
ppo = plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_stepline)
ppc = plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_stepline)

plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_circles, linewidth=2)
plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_circles, linewidth=2)

// Fill the background between ratio lines with two different colors
fill(ppo, ppc, color=bgColor1)

// Calculate mid-point for background color switching
midPoint = (u + d) / 2
bgColorSwitch = close >= midPoint ? bgColor1 : bgColor2
fill(ppo, ppc, color=bgColorSwitch, transp=90)

// Initialize variables for lines and labels
var line tp1Line = na
var line tp2Line = na
var line stopLossLine = na
var line entryLine = na
var label tp1Label = na
var label tp2Label = na
var label stopLossLabel = na
var label entryLabel = na
var label percentLabel = na

// Variable to store the entry bar index
var int entryBarIndexLong = na
var int entryBarIndexShort = na

// Function to delete old labels and lines
deleteOldLinesAndLabels() =>
    if not na(tp1Line)
        line.delete(tp1Line)
    if not na(tp2Line)
        line.delete(tp2Line)
    if not na(stopLossLine)
        line.delete(stopLossLine)
    if not na(entryLine)
        line.delete(entryLine)
    if not na(tp1Label)
        label.delete(tp1Label)
    if not na(tp2Label)
        label.delete(tp2Label)
    if not na(stopLossLabel)
        label.delete(stopLossLabel)
    if not na(entryLabel)
        label.delete(entryLabel)
    if not na(percentLabel)
        label.delete(percentLabel)

// Strategy logic
longCondition = ta.crossover(close, u)
shortCondition = ta.crossunder(close, d)

if longCondition
    strategy.entry('Long', strategy.long)
    entryBarIndexLong := bar_index
    entryBarIndexLong

if shortCondition
    strategy.entry('Short', strategy.short)
    entryBarIndexShort := bar_index
    entryBarIndexShort

// Calculate take profit and stop loss levels for long positions
if strategy.position_size > 0  // Check if there's an open long position
    takeProfitLevelLong1 = strategy.position_avg_price * (1 + takeProfitPercentage1)
    takeProfitLevelLong2 = strategy.position_avg_price * (1 + takeProfitPercentage2)
    stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPercentage)
    entryPrice = strategy.position_avg_price

    // Delete existing lines and labels if they exist
    deleteOldLinesAndLabels()


    // Exit a portion of the position at each take profit level
    strategy.exit('TP1', 'Long', limit=takeProfitLevelLong1, qty=strategy.position_size * takeProfitQuantity1)
    strategy.exit('TP2', 'Long', limit=takeProfitLevelLong2, qty=strategy.position_size * takeProfitQuantity2)
    strategy.exit('Stop Loss', 'Long', stop=stopLossLevelLong)

    // Display percentage change from entry price
    percentChange = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
    percentMultiplied = percentChange * multiplierFactor
    percentColor = percentChange >= 0 ? color.green : color.red
    // Update label position to follow price line with larger text size
    percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
    percentLabel

if strategy.position_size < 0  // Check if there's an open short position
    takeProfitLevelShort1 = strategy.position_avg_price * (1 - takeProfitPercentage1)
    takeProfitLevelShort2 = strategy.position_avg_price * (1 - takeProfitPercentage2)
    stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPercentage)
    entryPrice = strategy.position_avg_price

    // Delete existing lines and labels if they exist
    deleteOldLinesAndLabels()


    // Exit a portion of the position at each take profit level
    strategy.exit('TP1', 'Short', limit=takeProfitLevelShort1, qty=strategy.position_size * takeProfitQuantity1)
    strategy.exit('TP2', 'Short', limit=takeProfitLevelShort2, qty=strategy.position_size * takeProfitQuantity2)
    strategy.exit('Stop Loss', 'Short', stop=stopLossLevelShort)

    // Display percentage change from entry price
    percentChange = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
    percentMultiplied = percentChange * multiplierFactor
    percentColor = percentChange >= 0 ? color.green : color.red
    // Update label position to follow price line with larger text size
    percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
    percentLabel

// Add buy and sell signals with shapes
plotshape(series=longCondition, title='Buy Signal', location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text='.')
plotshape(series=shortCondition, title='Sell Signal', location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text='.')

// Remove old labels when they go out of scope
if bar_index % 50 == 0
    deleteOldLinesAndLabels()

// Define colors for candles based on background color
candleColorBull = bgColorSwitch  // Use background color for bullish candles
candleColorBear = bgColorSwitch  // Use background color for bearish candles
borderColorBull = color.black  // Border color for bullish candles
borderColorBear = color.black  // Border color for bearish candles

// Plot candles with custom colors
plotcandle(open, high, low, close, color=close >= open ? candleColorBull : candleColorBear, bordercolor=close >= open ? borderColorBull : borderColorBear, wickcolor=color.gray)