
টাইম ব্রেকিং ট্রেডিং কৌশল হল একটি পরিমাণগত ট্রেডিং সিস্টেম যা বাজারের নিম্ন ওঠানামা থেকে উচ্চ ওঠানামায় পরিবর্তনের সময় উত্পন্ন গতিশীল সুযোগগুলি ধরার জন্য ডিজাইন করা হয়েছে। এই কৌশলটির মূল ধারণাটি হল নির্দিষ্ট নিম্ন ওঠানামা সময় (১৯ঃ১৫-১৯ঃ৩০ আইএসটি) এর মধ্যে মূল্যের ব্যাপ্তি চিহ্নিত করা এবং তারপরে যখন দামগুলি এই ব্যাপ্তিটি অতিক্রম করে তখন লেনদেন করা। এই পদ্ধতিটি মূল লেনদেনের সময় শুরু হওয়ার আগে বাজার সাধারণত একটি পরিমার্জন সময় অতিক্রম করে এবং তারপরে লেনদেনের ক্রিয়াকলাপ বাড়ার পরে দিকনির্দেশক বিচ্ছিন্নতার বৈশিষ্ট্যগুলি ব্যবহার করে। এই কৌশলটিতে একটি সম্পূর্ণ ঝুঁকি ব্যবস্থা অন্তর্ভুক্ত রয়েছে, যা একটি স্পষ্ট স্টপ লস অবস্থান এবং কাস্টমাইজযোগ্য ঝুঁকি রিটার্নের ব্যবস্থাপনা দ্বারা তহবিলকে সুরক্ষিত করে।
সময়সীমার ব্রেকডাউন ট্রেডিং কৌশলটির মূল নীতিটি বাজারের সময়কালীন চক্রীয়তা এবং মূল্যের ব্রেকডাউন গতিশীলতার উপর ভিত্তি করে। এর বাস্তবায়ন লজিকটি নিম্নরূপঃ
ব্যাপ্তি সংজ্ঞাসিস্টেমটি ভারতীয় মান সময় (IST) ১৯ঃ১৫-১৯ঃ৩০ এর মধ্যে বাজার পর্যবেক্ষণ করে এবং এই ১৫ মিনিটের মধ্যে সর্বোচ্চ এবং সর্বনিম্ন মূল্য রেকর্ড করে একটি মূল্যের ব্যাপ্তি তৈরি করে। এই সময়টি বেছে নেওয়া হয়েছে কারণ এটি সাধারণত তুলনামূলকভাবে কম লেনদেনের সময় এবং দামের ওঠানামা তুলনামূলকভাবে কম।
ট্রেডিং সেশন সেটিংকৌশলটির ট্রেডিং সময় নির্ধারণ করা হয়েছে 19:00 IST থেকে পরের দিন 05:30 AM, এশিয়ান ট্রেডিং সময় এবং ইউরোপীয় প্রারম্ভিক বন্ধকে আচ্ছাদন করে, যা অনেকগুলি বাজারের ক্রিয়াকলাপের জন্য গুরুত্বপূর্ণ সময়।
প্রবেশের সংকেত:
ঝুঁকি ব্যবস্থাপনা:
সেশন ব্যবস্থাপনা:
কৌশলটি কার্যকর করার প্রক্রিয়াটি অত্যন্ত স্বয়ংক্রিয়ঃ প্রথমে দামের ব্যাপ্তি সংজ্ঞায়িত করা হয়, তারপরে ব্যাপ্তিটি অতিক্রম করার সময় পূর্বনির্ধারিত ঝুঁকি পরামিতি অনুসারে লেনদেন করা হয়, এবং অবশেষে সেশনের শেষে সমস্ত পজিশন সমতল করা হয়। এই পদ্ধতিটি কেবলমাত্র বাজারের গতিশীলতাকে কম ওঠানামা থেকে উচ্চ ওঠানামা থেকে পরিবর্তিত করার সময়ই ধরে না, বরং স্পষ্ট প্রবেশ এবং প্রস্থান নিয়মের মাধ্যমে স্বতন্ত্র সিদ্ধান্ত গ্রহণকে হ্রাস করে।
এই কৌশলটির কোডের কাঠামো এবং যুক্তি বিশ্লেষণ করে আমরা নিম্নলিখিত উল্লেখযোগ্য সুবিধাগুলির কথা বলতে পারিঃ
নির্দিষ্ট সময়সীমাকৌশলটি নির্দিষ্ট বাজার সময়ের উপর দৃষ্টি নিবদ্ধ করে (এশিয়ান এবং প্রাথমিক ইউরোপীয় ট্রেডিং সময়কাল), যা বাজারের নিম্ন কার্যকলাপ থেকে উচ্চ কার্যকলাপে পরিবর্তনের একটি গুরুত্বপূর্ণ রূপান্তর সময়কাল, যা ভাল ব্রেক-আউট ট্রেডিং সুযোগ প্রদান করে।
বস্তুনিষ্ঠ ভর্তি মানদণ্ড: সুনির্দিষ্ট দামের পরিসীমাকে একটি ব্রেকিং রেফারেন্স পয়েন্ট হিসেবে ব্যবহার করা, ট্রেডিং সিদ্ধান্তের মধ্যে বিষয়গত বিষয়গুলিকে সরিয়ে ফেলা, সিস্টেমের ধারাবাহিকতা এবং পুনরাবৃত্তিযোগ্যতা বৃদ্ধি করা।
সমন্বিত ঝুঁকি ব্যবস্থাপনা: প্রতিটি লেনদেনের একটি পূর্বনির্ধারিত স্টপ লস অবস্থান রয়েছে (অন্যদিকে সীমানা) এবং স্বয়ংক্রিয়ভাবে রিস্ক রিটার্নের তুলনায় লাভের লক্ষ্যমাত্রা গণনা করে তহবিল পরিচালনার নিয়মাবলী নিশ্চিত করে।
সেশন নিয়ন্ত্রণ: প্রতি ট্রেডিং সেশনে শুধুমাত্র একটি ট্রেড সম্পাদন করা হয়, অতিরিক্ত ট্রেডিং এবং ধারাবাহিক ক্ষতির ঝুঁকি এড়ানো হয়, এবং নতুন বাজারের অবস্থার অধীনে পুনরায় মূল্যায়ন করার সুযোগ নিশ্চিত করা হয়।
স্বয়ংক্রিয়ভাবে সম্পাদন: ব্যবধান সংজ্ঞায়ন, সংকেত নিশ্চিতকরণ থেকে শুরু করে পজিশন ম্যানেজমেন্ট পর্যন্ত, পুরো প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পরিচালিত হয়, এতে আবেগজনিত ব্যাঘাত হ্রাস পায় এবং কার্যকরকরণের দক্ষতা বৃদ্ধি পায়।
ভিজ্যুয়াল প্রতিক্রিয়া সিস্টেমকৌশলঃ ব্যবধান প্রদর্শন, প্রবেশের চিহ্ন এবং পটভূমির রঙের নির্দেশাবলীর মতো ভিজ্যুয়াল সহায়ক বৈশিষ্ট্যগুলি সরবরাহ করে যা ব্যবসায়ীদের বাজারের অবস্থা এবং কৌশল পরিচালনার বিষয়ে আরও স্বজ্ঞাতভাবে বুঝতে সহায়তা করে।
সতর্কতা ফাংশন: স্বয়ংক্রিয়ভাবে এন্ট্রি এবং আউট অ্যালার্ম তৈরি করে, যাতে ট্রেডাররা সময়মত ট্রেডিং সিগন্যাল বুঝতে পারে, এমনকি যদি তারা চার্টটি রিয়েল-টাইমে মনিটর না করে।
রিস্ক-রিটার্ন অনুপাত সামঞ্জস্যপূর্ণ: ব্যবহারকারীদের ব্যক্তিগত ঝুঁকি পছন্দ এবং বাজারের অবস্থার উপর ভিত্তি করে রিটার্ন-রিস্ক অনুপাতের সমন্বয় করার অনুমতি দেয়, যা কৌশলগুলির নমনীয়তা এবং অভিযোজনযোগ্যতা বৃদ্ধি করে।
যদিও এই কৌশলটির অনেক সুবিধা রয়েছে, তবুও কিছু সম্ভাব্য ঝুঁকি এবং সীমাবদ্ধতা রয়েছেঃ
ভুয়া আক্রমণের ঝুঁকি: বাজারে এমন পরিস্থিতি দেখা দিতে পারে যেখানে একটি সংক্ষিপ্ত ব্রেকিংয়ের পরে আবার ফিরে আসে, যার ফলে ভুল সংকেত এবং সম্ভাব্য ক্ষতি হয়। সমাধানঃ একটি নিশ্চিতকরণ ব্যবস্থা যুক্ত করার কথা বিবেচনা করা যেতে পারে, যেমন একটি নির্দিষ্ট সময়ের জন্য বা একটি নির্দিষ্ট পরিমাণে পৌঁছানোর পরে মূল্য বজায় রাখা।
বাজার পরিবেশে ফিল্টারের অভাববর্তমান কৌশলগুলি সামগ্রিক বাজার পরিবেশকে বিবেচনা করে না (যেমন প্রবণতা শক্তি, ওঠানামা সমতা) এবং সম্ভবত এখনও এমন বাজার পরিস্থিতিতে লেনদেন চালিয়ে যায় যা ব্রেক-আউট লেনদেনের জন্য উপযুক্ত নয়। সমাধানঃ লেনদেনের ফিল্টারিং শর্ত হিসাবে বাজার পরিবেশের সূচকগুলি প্রবর্তন করুন, যেমন এটিআর (অর্ধ-সত্যিকারের ব্যাপ্তি) বা প্রবণতা শক্তি সূচক।
নির্দিষ্ট সময়ের সীমাবদ্ধতা: নির্দিষ্ট সময়সীমা ব্যবহার করুন (১৯ঃ১৫-১৯ঃ৩০ আইএসটি) দামের ব্যাপ্তি সংজ্ঞায়িত করার জন্য, যা সমস্ত বাজার শর্ত বা মৌসুমী পরিবর্তনের জন্য প্রযোজ্য নাও হতে পারে। সমাধানঃ গতিশীল সময়সীমা ব্যবহার করার কথা বিবেচনা করুন বা বাজার ক্রিয়াকলাপের সূচক অনুসারে স্বয়ংক্রিয়ভাবে ব্যাপ্তি সংজ্ঞায়িত সময়সীমা সামঞ্জস্য করুন।
একক সেশনের সীমাবদ্ধতাসমাধানঃ যথাযথ ঝুঁকি নিয়ন্ত্রণ বজায় রেখে আরও নমনীয় পুনরায় প্রবেশের ব্যবস্থা ডিজাইন করা যেতে পারে।
স্টপ লস সেটিং ঝুঁকি: ব্রেকিং পয়েন্ট হিসেবে ব্রেকিং পয়েন্ট হিসেবে ব্রেকিং সীমানা ব্যবহার করা, যার ফলে উচ্চতর অস্থিরতাপূর্ণ বাজারে বৃহত্তর ব্রেকিং দূরত্ব হতে পারে। সমাধানঃ সর্বোচ্চ ব্রেকিং পরিমাণের সীমাবদ্ধতা বা ATR-ভিত্তিক গতিশীল ব্রেকিং সেটিং চালু করার কথা বিবেচনা করুন।
সেশন সমাপ্তি: সেশন শেষে স্বয়ংক্রিয়ভাবে প্লেইন করা একটি সম্ভাব্য লাভজনক লেনদেনকে অপ্রত্যাশিত মূল্যের স্তরে শেষ করতে পারে। সমাধানঃ নির্দিষ্ট শর্তে অবস্থান পরবর্তী সেশনে চালিয়ে যাওয়ার অনুমতি দেওয়া হয়, বা বাজারের অবস্থার উপর ভিত্তি করে অবস্থানটি রাখার সিদ্ধান্ত নেওয়া হয়।
টাইমজোন নির্ভরতা: কৌশলটি নির্দিষ্ট সময় অঞ্চল (IST) এর সময় সেটিংয়ের উপর নির্ভরশীল, যা বিভিন্ন সময় অঞ্চলে পরিচালিত ব্যবসায়ীদের জন্য সামঞ্জস্য করতে পারে। সমাধানঃ সময় অঞ্চল রূপান্তর বৈশিষ্ট্য বা স্থানীয় সময় ভিত্তিক প্যারামিটার সেট করার বিকল্প সরবরাহ করুন।
নীতি কোডের গভীর বিশ্লেষণের উপর ভিত্তি করে, নিম্নলিখিত কয়েকটি সম্ভাব্য অপ্টিমাইজেশান দিক রয়েছেঃ
ব্রেকথ্রু নিশ্চিতকরণ ব্যবস্থা: মূল্যের আচরণ নিশ্চিতকরণ বা প্রযুক্তিগত সূচক ফিল্টারিং প্রবর্তন করুন যাতে মিথ্যা বিরতির সংকেত কমাতে পারে। উদাহরণস্বরূপ, একটি ব্রেকডাউনের পরে লেনদেনের পরিমাণ বাড়ানোর জন্য অনুরোধ করা যেতে পারে, বা গতিশীল দিকনির্দেশের জন্য আরএসআই ইত্যাদির মতো সূচক ব্যবহার করা যেতে পারে। এই ধরনের অপ্টিমাইজেশন সংকেতের গুণমানকে উল্লেখযোগ্যভাবে উন্নত করতে পারে এবং ভুল লেনদেনকে হ্রাস করতে পারে।
মার্কেট এনভায়রনমেন্টাল অ্যাসেসমেন্টবিপর্যয়কর লেনদেনের আগে, বর্তমান বাজার পরিবেশ এই ধরনের লেনদেনের জন্য উপযুক্ত কিনা তা মূল্যায়ন করুন। নিম্নলিখিত সূচকগুলি ব্যবহার করা যেতে পারেঃ
ডায়নামিক ব্যাপ্তি প্রস্থ সমন্বয়: ঐতিহাসিক অস্থিরতার উপর ভিত্তি করে দামের ব্যাপ্তির প্রস্থ স্বয়ংক্রিয়ভাবে সামঞ্জস্য করুন। উচ্চ অস্থিরতার পরিবেশে বৃহত্তর ব্যাপ্তি ব্যবহার করুন, কম অস্থিরতার পরিবেশে আরও সংকীর্ণ ব্যাপ্তি ব্যবহার করুন। এই অভিযোজনযোগ্যতা সামঞ্জস্যের ফলে কৌশলটি বিভিন্ন বাজারের অবস্থার সাথে আরও ভালভাবে মানিয়ে নিতে পারে।
অপ্টিমাইজেশান সময় পরামিতি: বিভিন্ন সময়সীমার মধ্যে সফলতার হার বিশ্লেষণ করে সেরা সময়সীমা নির্ধারণ এবং ট্রেডিং সেশনের সময় নির্ধারণ করুন। এটি ঐতিহাসিক তথ্যের উপর পুনর্বিবেচনা করে নির্ধারণ করতে পারে যে কোন সময়সীমার মধ্যে ট্রেডিং সফলতার হার সর্বোচ্চ।
আংশিক মুনাফা লকিং ব্যবস্থা চালু: যখন লেনদেন একটি নির্দিষ্ট মুনাফা স্তরে পৌঁছে যায়, তখন মুনাফা অর্জনের সুরক্ষার জন্য ক্ষতির মূল্য বন্ধ করা হয় বা মুনাফার কিছু অংশ লক করা হয়। এই কৌশলটি ঝুঁকি-ফেরতের অনুপাতকে ভারসাম্য করতে পারে এবং সামগ্রিক মুনাফা বাড়িয়ে তুলতে পারে।
পরিস্রাবণ যুক্ত করুন: অন্যান্য প্রযুক্তিগত বা মৌলিক পরিস্রাবণ শর্ত প্রবর্তন করা, যেমনঃ
মাল্টি টাইম ফ্রেম বিশ্লেষণ১৫ মিনিটের সময়সীমার মধ্যে ট্রেড করার আগে, মার্কেট কাঠামো এবং ট্রেন্ডের দিকনির্দেশনা বিবেচনা করুন (যেমন ১ ঘন্টা বা ৪ ঘন্টা) । এই শীর্ষ-নিচে বিশ্লেষণ পদ্ধতিটি ট্রেডের দিকনির্দেশের নির্ভুলতা বাড়িয়ে তুলতে পারে।
ঝুঁকি ব্যবস্থাপনা প্যারামিটার অপ্টিমাইজ করুন: ঐতিহাসিক পারফরম্যান্সের উপর ভিত্তি করে রিস্ক রিটার্ন রেট সেট এবং পজিশনের আকারের হিসাবের পদ্ধতি। কৌশলটির সাম্প্রতিক পারফরম্যান্স এবং বাজারের অবস্থার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে ঝুঁকির প্যারামিটারগুলি সামঞ্জস্য করার জন্য একটি গতিশীল ঝুঁকি ব্যবস্থাপনা সিস্টেম বাস্তবায়ন বিবেচনা করা যেতে পারে।
টাইম ব্রেকিং ট্রেডিং কৌশল হল একটি পদ্ধতিগত পরিমাণগত ট্রেডিং পদ্ধতি যা বাজারের গতিশীল সুযোগকে ক্যাপচার করার উপর দৃষ্টি নিবদ্ধ করে যখন এটি কম ওঠানামা থেকে উচ্চ ওঠানামার দিকে চলে যায়। একটি নির্দিষ্ট সময়ের মধ্যে (১৯ঃ১৫-১৯ঃ৩০ আইএসটি) একটি মূল্যের ব্যাপ্তি সংজ্ঞায়িত করে এবং যখন দামগুলি এই ব্যাপ্তিটি অতিক্রম করে তখন লেনদেন করা হয়, এই কৌশলটি কার্যকরভাবে বাজারের পর্যায়ক্রমিকতা এবং লেনদেনের সময় পরিবর্তনের দ্বারা সৃষ্ট মূল্য গতিশীলতা ব্যবহার করতে সক্ষম হয়।
এই কৌশলটির প্রধান সুবিধা হল এর উদ্দেশ্যমূলক প্রবেশের মানদণ্ড, সমন্বিত ঝুঁকি ব্যবস্থাপনা ব্যবস্থা এবং সম্পূর্ণ স্বয়ংক্রিয় সম্পাদন প্রক্রিয়া, যা মানসিক বাধা হ্রাস করে এবং লেনদেনের ধারাবাহিকতা বৃদ্ধি করে। তবে, কৌশলটি মিথ্যা বিরতির ঝুঁকি, নির্দিষ্ট সময়ের প্যারামিটারগুলির সীমাবদ্ধতা এবং বাজারের পরিবেশের ফিল্টারিংয়ের অভাবের মতো চ্যালেঞ্জগুলির মুখোমুখি হয়।
এই কৌশলটি আরও উন্নত করার সম্ভাবনা রয়েছে, বিশেষত, প্রযুক্তিগত সূচক ফিল্টারিং এবং গতিশীল ঝুঁকি ব্যবস্থাপনার ব্যবস্থাগুলি সম্ভবত সবচেয়ে মূল্যবান উন্নতির দিক হতে পারে।
সামগ্রিকভাবে, সময়সীমার ব্রেক-আউট ট্রেডিং কৌশলটি ব্যবসায়ীদেরকে বাজারের গতিশীল সুযোগগুলি ক্যাপচার করার জন্য একটি কাঠামোগত পদ্ধতি সরবরাহ করে এবং সুস্পষ্ট নিয়ম এবং স্বয়ংক্রিয় বাস্তবায়নের মাধ্যমে ঝুঁকি পরিচালনা করে। পদ্ধতিগত ব্যবসায়ের পদ্ধতির সন্ধানকারী পরিমাণগত ব্যবসায়ীদের জন্য, কৌশলটি একটি নির্ভরযোগ্য প্রাথমিক কাঠামো সরবরাহ করে যা ব্যক্তিগত চাহিদা এবং বাজারের অবস্থার উপর ভিত্তি করে আরও কাস্টমাইজ এবং অনুকূলিতকরণ করা যেতে পারে।
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-02 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":200000}]
*/
//@version=6
strategy("BTC 15m Range Breakout Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Input parameters
show_range = input.bool(true, "Show Range Box", group="Display")
range_color = input.color(color.new(color.blue, 80), "Range Box Color", group="Display")
// Session timing inputs
session_start_hour = input.int(19, "Session Start Hour", minval=0, maxval=23, group="Session Timing")
session_start_minute = input.int(0, "Session Start Minute", minval=0, maxval=59, group="Session Timing")
session_end_hour = input.int(5, "Session End Hour", minval=0, maxval=23, group="Session Timing")
session_end_minute = input.int(30, "Session End Minute", minval=0, maxval=59, group="Session Timing")
// Risk-Reward ratio input
rr_ratio = input.float(2.0, "Risk-Reward Ratio", minval=0.5, maxval=10.0, step=0.1, group="Risk Management")
range_start_hour = 19
range_start_minute = 15
range_end_hour = 19
range_end_minute = 30
// Function to check if current time is within session (IST)
is_session_time() =>
current_hour = hour(time, "Asia/Kolkata")
current_minute = minute(time, "Asia/Kolkata")
// Check if within session (19:00 to 05:30 IST next day)
if session_start_hour <= session_end_hour
current_hour >= session_start_hour and current_hour <= session_end_hour
else
current_hour >= session_start_hour or current_hour <= session_end_hour
// Function to check if current time is within range definition period (19:15 to 19:30 IST)
is_range_time() =>
current_hour = hour(time, "Asia/Kolkata")
current_minute = minute(time, "Asia/Kolkata")
(current_hour == range_start_hour and current_minute >= range_start_minute and current_minute <= range_end_minute)
// Variables to store range
var float range_high = na
var float range_low = na
var int range_start_time = na
var bool range_defined = false
var bool position_taken = false
// Reset variables at start of new session
new_session = ta.change(time("D")) != 0
if new_session
range_high := na
range_low := na
range_start_time := na
range_defined := false
position_taken := false
// Define range during 19:15 to 19:30 IST
if is_range_time() and timeframe.period == "15" and is_session_time()
if na(range_high) or na(range_low)
range_high := high
range_low := low
range_start_time := time
range_defined := false
else
range_high := math.max(range_high, high)
range_low := math.min(range_low, low)
// Mark range as defined at 19:30
if hour(time, "Asia/Kolkata") == 19 and minute(time, "Asia/Kolkata") == 30
range_defined := true
// Draw range box
var box range_box = na
if show_range and not na(range_high) and not na(range_low) and not na(range_start_time)
if not na(range_box)
box.delete(range_box)
// Strategy logic
if range_defined and is_session_time() and not position_taken and not na(range_high) and not na(range_low)
// Long entry on breakout above range
if close > range_high and strategy.position_size == 0
entry_price = close
sl_price = range_low
risk = entry_price - sl_price
tp_price = entry_price + (risk * rr_ratio) // User-defined RR target
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", "Long", stop=sl_price, limit=tp_price)
// Long entry alert
alert("LONG ENTRY: Price " + str.tostring(entry_price, "#.##") + " | SL: " + str.tostring(sl_price, "#.##") + " | TP: " + str.tostring(tp_price, "#.##"), alert.freq_once_per_bar)
// Visual labels
label.new(bar_index, high, "LONG\nEntry: " + str.tostring(entry_price, "#.##") + "\nSL: " + str.tostring(sl_price, "#.##") + "\nTP: " + str.tostring(tp_price, "#.##"),
style=label.style_label_right, color=color.green, textcolor=color.white, size=size.normal)
position_taken := true
// Short entry on breakout below range
else if close < range_low and strategy.position_size == 0
entry_price = close
sl_price = range_high
risk = sl_price - entry_price
tp_price = entry_price - (risk * rr_ratio) // User-defined RR target
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", "Short", stop=sl_price, limit=tp_price)
// Short entry alert
alert("SHORT ENTRY: Price " + str.tostring(entry_price, "#.##") + " | SL: " + str.tostring(sl_price, "#.##") + " | TP: " + str.tostring(tp_price, "#.##"), alert.freq_once_per_bar)
// Visual labels
label.new(bar_index, low, "SHORT\nEntry: " + str.tostring(entry_price, "#.##") + "\nSL: " + str.tostring(sl_price, "#.##") + "\nTP: " + str.tostring(tp_price, "#.##"),
style=label.style_label_right, color=color.red, textcolor=color.white, size=size.normal)
position_taken := true
// Exit alerts
if strategy.position_size[1] != 0 and strategy.position_size == 0
if strategy.position_size[1] > 0
alert("LONG EXIT: Position closed", alert.freq_once_per_bar)
else
alert("SHORT EXIT: Position closed", alert.freq_once_per_bar)
// Close positions at end of session (05:30 IST)
if not is_session_time() and strategy.position_size != 0
strategy.close_all("Session End")
// Plot range levels
plot(range_defined ? range_high : na, "Range High", color=color.red, linewidth=2, style=plot.style_linebr)
plot(range_defined ? range_low : na, "Range Low", color=color.green, linewidth=2, style=plot.style_linebr)
// Background color for range definition period
bgcolor(is_range_time() and is_session_time() ? color.new(color.teal, 70) : na, title="Range Definition Period")
// Background color for session
//bgcolor(is_session_time() ? color.new(color.blue, 95) : na, title="Trading Session")