উচ্চ সময়সীমার ওজনযুক্ত চলমান গড় ব্যবধান যুগান্তকারী পরিমাণগত ট্রেডিং কৌশল

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
অনুসারী

উচ্চ সময়সীমার ওজনযুক্ত চলমান গড় ব্যবধান যুগান্তকারী পরিমাণগত ট্রেডিং কৌশল উচ্চ সময়সীমার ওজনযুক্ত চলমান গড় ব্যবধান যুগান্তকারী পরিমাণগত ট্রেডিং কৌশল

ওভারভিউ

উচ্চ সময়সীমার ওজনযুক্ত চলমান গড় ব্যবধানের মধ্যে ব্রেকডাউন পরিমাণযুক্ত ট্রেডিং কৌশল একটি মূল্য ব্যবধানের উপর ভিত্তি করে ট্রেডিং সিস্টেম যা উচ্চ সময়সীমার ওজনযুক্ত চলমান গড় ((ডাব্লুএমএ) এবং শতাংশ ব্যবধানের সাথে মিলিত হয় যাতে ট্রেডিং অঞ্চল তৈরি হয়। এই কৌশলটি প্রবেশের সংকেত তৈরি করে যখন দামটি ট্রেনে উঠে যায় বা নেমে যায় এবং ঝুঁকি পরিচালনা করার জন্য ব্যাচেল লাভ এবং স্টপ লস সেটিং প্রয়োগ করে। কৌশলটির মূল অংশটি হ’ল স্বল্প-মেয়াদী বাজারের গোলমাল দূর করার জন্য উচ্চতর সময় ফ্রেমে ওজনযুক্ত চলমান গড় লাইন ব্যবহার করা এবং তারপরে বর্তমান সময় ফ্রেমে ট্রেডিং অঞ্চল তৈরি করা, যা ট্রেডিং সিদ্ধান্তকে আরও স্থিতিশীল এবং নির্ভরযোগ্য করে তোলে।

কৌশল নীতি

এই কৌশলটির মূল নীতি হল উচ্চ সময় ফ্রেমের ভারযুক্ত চলমান গড় ব্যবহার করে মূল্য ক্রিয়াকলাপের অঞ্চল তৈরি করা। নিম্নলিখিত পদক্ষেপগুলি বাস্তবায়নের জন্যঃ

  1. প্রথমত, কৌশলটি খোলা দাম, সর্বোচ্চ দাম, সর্বনিম্ন দাম এবং বন্ধ দামের ওজনের চলমান গড় ((WMA) গণনা করে, চক্রটি ব্যবহারকারীর দ্বারা নির্ধারিত সর্বনিম্ন চক্রের প্যারামিটার (ডিফল্ট 60) উপর ভিত্তি করে।
  2. তারপর, কৌশলটি এই WMA মানগুলিকে একটি উচ্চতর সময় ফ্রেম থেকে (ডিফল্ট চাঁদ লাইন) বর্তমান ট্রেডিং সময় ফ্রেমে রূপান্তর করে।
  3. কেন্দ্রীয় মূল্য হিসাবে উচ্চ-নিম্ন ওজনের চলমান গড়ের মধ্যবর্তী বিন্দু গণনা করা।
  4. কেন্দ্রীয় মূল্য এবং ব্যবহারকারীর সংজ্ঞায়িত শতাংশের উপর ভিত্তি করে (ডিফল্ট 0.1 বা 10%), আপ-রেল (প্রতিরোধের স্থান) এবং ডাউন-রেল (সমর্থন স্থান) তৈরি করুন।
  5. যখন দাম ঊর্ধ্বমুখী হয়, তখন মাল্টি সিগন্যাল ট্রিগার করা হয়; যখন দাম ঊর্ধ্বমুখী হয়, তখন ফাঁকা সিগন্যাল ট্রিগার করা হয়।
  6. কৌশলটি দুটি স্টপ-অফ লক্ষ্যমাত্রা নির্ধারণ করে (ডিফল্ট ১০% এবং ২০%) এবং প্রতিটি লক্ষ্যমাত্রা প্লেইন পোজিশনের অংশ (ডিফল্ট ৫০%) ।
  7. একই সময়ে, সম্ভাব্য ক্ষতি সীমাবদ্ধ করার জন্য স্টপ লস (ডিফল্ট 5%) সেট করুন।

কৌশলটি ব্যাকগ্রাউন্ড রঙ পরিবর্তন, কাস্টম স্ক্রিন এবং প্রবেশ / প্রস্থান চিহ্নিতকরণের মতো ভিজ্যুয়াল উপাদানগুলি ব্যবহার করে যাতে ব্যবসায়ীরা ট্রেডিং ব্যাপ্তি এবং বর্তমান বাজারের অবস্থাকে স্বজ্ঞাতভাবে সনাক্ত করতে পারে। তদতিরিক্ত, কৌশলটি বর্তমান হোল্ডিংয়ের শতাংশ পরিবর্তন দেখায় এবং একটি গুণক ফ্যাক্টর প্রয়োগ করে (ডিফল্ট 20) দামের পরিবর্তনকে হাইলাইট করতে।

কৌশলগত সুবিধা

এই কৌশলটির কোডের গভীর বিশ্লেষণে, আমরা নিম্নলিখিত উল্লেখযোগ্য সুবিধাগুলি খুঁজে পাইঃ

  1. উচ্চ সময়সীমা ফিল্টার: একটি উচ্চতর সময় ফ্রেমের একটি ভারী চলমান গড় ব্যবহার করে, কৌশলটি কার্যকরভাবে স্বল্পমেয়াদী বাজার শব্দকে সরিয়ে দেয়, আরও অর্থবহ মূল্যের চলাচলকে ক্যাপচার করে এবং মিথ্যা সংকেত হ্রাস করে।

  2. ডায়নামিক ট্রেডিং অঞ্চল

  3. স্পষ্ট প্রবেশ ও প্রস্থান নিয়ম: কৌশলটি স্পষ্ট প্রবেশের সংকেত প্রদান করে ((বিভাজন আপ / ডাউন ট্র্যাক) এবং প্রস্থান নিয়ম ((বিন্যস্ত স্টপ এবং স্টপ লস), ট্রেডিং সিদ্ধান্তের মধ্যে বিষয়বস্তু সরিয়ে দেয়।

  4. ঝুঁকি ব্যবস্থাপনার সমন্বয়বিল্ট-ইন স্টপ লস এবং ব্যাচ স্টপ মেকানিজম মূলধন রক্ষা এবং মুনাফা লক করতে সাহায্য করে, একটি সম্পূর্ণ ট্রেডিং সিস্টেম।

  5. ভিজ্যুয়াল ফিডব্যাক: কৌশলটি বিপুল সংখ্যক ভিজ্যুয়াল উপাদান সরবরাহ করে, যার মধ্যে রয়েছে ট্রেডিং ব্রেকের পটভূমির রঙ, শতাংশ পরিবর্তন ট্যাগ এবং প্রবেশ / প্রস্থান চিহ্নিতকারী, যা ব্যবসায়ীদের দ্রুত বাজার পরিস্থিতি মূল্যায়ন করতে সহায়তা করে।

  6. নমনীয় প্যারামিটার সেটিং: ব্যবহারকারীরা ব্যক্তিগত পছন্দ এবং বিভিন্ন বাজারের অবস্থার উপর ভিত্তি করে বিভিন্ন পরামিতিগুলি সামঞ্জস্য করতে পারেন, যার মধ্যে রয়েছে টাইম ফ্রেম, মুভিং এভারেজ পিরিয়ড, রেট শতাংশ, স্টপ/স্টপ লেভেল এবং ভিজ্যুয়াল এলিমেন্ট।

  7. মাল্টিটাইম ফ্রেমওয়ার্ক সমন্বয়: কৌশলটি উচ্চ সময় ফ্রেমের সংকেত গুণমান এবং বর্তমান সময় ফ্রেমের কার্যকর নির্ভুলতা একত্রিত করে, একাধিক সময় ফ্রেমের সমন্বয় সাধন করে।

কৌশলগত ঝুঁকি

যদিও এই কৌশলটির অনেক সুবিধা রয়েছে, তবে এর মধ্যে কিছু সম্ভাব্য ঝুঁকিও রয়েছেঃ

  1. ভুয়া সংকেত ভেঙে ফেলা: দামগুলি অল্প সময়ের জন্য ব্রেকডাউন সীমানা অতিক্রম করতে পারে এবং তারপরে ফিরে আসতে পারে, যার ফলে ভুল ট্রেডিং সিগন্যাল তৈরি হয়। এই ঝুঁকি হ্রাস করার জন্য, একটি নিশ্চিতকরণ ব্যবস্থা যুক্ত করার বিষয়টি বিবেচনা করা যেতে পারে, যেমন দামগুলিকে কিছু সময়ের জন্য বজায় রাখার জন্য অনুরোধ করা হয় বা অন্যান্য সূচকগুলির সাথে একত্রে নিশ্চিতকরণ দেওয়া হয়।

  2. অস্থির বাজারের জন্য উপযুক্ত নয়: তীব্র অস্থিরতার বাজারে, দামগুলি ঘন ঘন ব্রেকডাউন সীমানা অতিক্রম করতে পারে, যার ফলে অত্যধিক লেনদেন এবং সম্ভাব্য ক্ষতি হতে পারে। এই ক্ষেত্রে, ব্রেকডাউন হার বাড়ানো বা উচ্চতর সময় ফ্রেমে স্যুইচ করা যেতে পারে।

  3. ফিক্সড শতাংশ স্টপ লস/স্টপ থামানো যথেষ্ট নমনীয় নয়মার্কেট অস্থিরতা সময়ের সাথে সাথে পরিবর্তিত হয়, এবং স্থির শতাংশের স্টপ/স্টপ সবসময়ই সর্বোত্তম নাও হতে পারে। স্টপ/স্টপ স্তরগুলিকে অস্থিরতার সূচক (যেমন এটিআর) এর উপর ভিত্তি করে গতিশীলভাবে সামঞ্জস্য করার কথা বিবেচনা করা যেতে পারে।

  4. পরামিতি সংবেদনশীলতা: কৌশলগত কর্মক্ষমতা প্যারামিটার সেটিং যেমন ডাব্লুএমএ চক্র, ব্যবধান অনুপাত এবং স্টপ / স্টপ লস শতাংশের জন্য অত্যন্ত সংবেদনশীল হতে পারে। পুঙ্খানুপুঙ্খ ইতিহাসের পুনরাবৃত্তি এবং প্যারামিটার অপ্টিমাইজেশন প্রয়োজনীয়।

  5. ওভার-অপ্টিমাইজেশন ঝুঁকি: নির্দিষ্ট ঐতিহাসিক তথ্যের উপর অতিরিক্ত ফিট করা ভবিষ্যতে দুর্বল পারফরম্যান্সের কারণ হতে পারে। একাধিক বাজার এবং সময়কালের মধ্যে ব্যাক-টেস্টিং করার পরামর্শ দেওয়া হয় এবং প্যারামিটারগুলিকে অপেক্ষাকৃত স্থিতিশীল রাখা হয়।

  6. বাজার প্রবণতা পরিবর্তনের সাথে অভিযোজনযোগ্যতা: এই কৌশলটি নতুন বাজার প্রবণতাগুলির সাথে তার ব্রেকিংয়ের পরে তার ব্রেকিংয়ের সাথে সামঞ্জস্য করে না, যা একটি শক্তিশালী প্রবণতা বাজারে ভুল সংকেত হতে পারে। একটি প্রবণতা ফিল্টার বা একটি গতিশীল সমন্বয় ব্রেকিং যোগ করার কথা বিবেচনা করা যেতে পারে।

কৌশল অপ্টিমাইজেশনের দিকনির্দেশনা

কোডের গভীর বিশ্লেষণের উপর ভিত্তি করে, এই কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ

  1. ব্রেকথ্রু নিশ্চিতকরণ যুক্ত করা হয়েছেমিথ্যা ব্রেকডাউন কমানোর জন্য, অতিরিক্ত নিশ্চিতকরণ শর্ত যুক্ত করা যেতে পারে, যেমন ব্রেকডাউনের পরে ক্লোজিং প্রাইস, ক্রয়-বিক্রয় নিশ্চিতকরণ বা অন্যান্য প্রযুক্তিগত সূচক (যেমন আরএসআই, এমএসিডি) ব্যবহার করে ক্রস-নিশ্চিতকরণ।

  2. ডায়নামিক স্টপ লস সেটিং: স্থির শতাংশের স্টপ লসকে বাজারের অস্থিরতার উপর ভিত্তি করে গতিশীল স্টপ লসের সাথে প্রতিস্থাপন করুন যেমন স্টপ লেভেল সেট করার জন্য এটিআর (অর্ধ-সত্যিকারের ব্যাপ্তি) এর গুণিতক ব্যবহার করে, যাতে কৌশলটি বিভিন্ন বাজারের অবস্থার সাথে আরও ভালভাবে খাপ খায়।

  3. ট্রেন্ড ফিল্টার যোগ করুন: ট্রেন্ড সনাক্তকরণ উপাদান যেমন দীর্ঘমেয়াদী চলমান গড় বা এডিএক্স সূচক যুক্ত করুন যাতে শক্তিশালী ট্রেন্ডিং মার্কেটে ট্রেডিং আচরণকে সামঞ্জস্য করতে পারে, যেমন কেবলমাত্র উচ্চতর ট্রেন্ডে এবং কেবলমাত্র নিম্নমুখী ট্রেন্ডে।

  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)