প্রাতিষ্ঠানিক অর্ডার ব্লক এবং ফিবোনাচি রিট্রেসমেন্টের উপর ভিত্তি করে সুনির্দিষ্ট ডে ট্রেডিং কৌশল

ATR RSI FIBONACCI OB RR 15分钟模型 日内交易
সৃষ্টির তারিখ: 2025-04-30 11:21:41 অবশেষে সংশোধন করুন: 2025-04-30 11:21:41
অনুলিপি: 6 ক্লিকের সংখ্যা: 604
2
ফোকাস
319
অনুসারী

প্রাতিষ্ঠানিক অর্ডার ব্লক এবং ফিবোনাচি রিট্রেসমেন্টের উপর ভিত্তি করে সুনির্দিষ্ট ডে ট্রেডিং কৌশল প্রাতিষ্ঠানিক অর্ডার ব্লক এবং ফিবোনাচি রিট্রেসমেন্টের উপর ভিত্তি করে সুনির্দিষ্ট ডে ট্রেডিং কৌশল

কৌশল ওভারভিউ

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

এই কৌশলটির মূল বিষয় হল অর্ডার ব্লকগুলি চিহ্নিত করা এবং ফিবোনাচি ৬১.৮% বা ৭৯% প্রত্যাহারের স্তর ব্যবহার করে সর্বোত্তম প্রবেশের স্থান খুঁজে পাওয়া। স্টপ পয়েন্টের ব্রেকআপের জন্য অপেক্ষা করার মাধ্যমে, কৌশলটি সম্ভাব্য মূল্যের বিপর্যয় সনাক্ত করতে সক্ষম হয়, যার ফলে আরও নির্ভরযোগ্য ট্রেডিং সংকেত সরবরাহ করা হয়। কঠোর সময় ফিল্টারিং নিশ্চিত করে যে কৌশলটি কেবলমাত্র 9:30 থেকে 16:00 EST এর মধ্যে ট্রেড করে এবং 16:30 এ সমস্ত পজিশনের উপর জোর দেয়, কার্যকরভাবে রাতারাতি ঝুঁকি এড়ানো যায়।

কৌশল নীতি

এই কৌশলটির মূল নীতিটি প্রতিষ্ঠানের অর্ডার প্রবাহ এবং মূল্যের কাঠামোর সনাক্তকরণের উপর ভিত্তি করে তৈরি করা হয়েছে, যার কার্যকারিতা নিম্নরূপঃ

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

  2. অর্ডার ব্লক চিহ্নিত করুন: একটি দোলন পয়েন্ট নিশ্চিত করার পরে, কৌশলটি এজেন্সি অর্ডার অঞ্চল চিহ্নিত করে। যখন একটি দোলন নিম্ন গঠন করা হয়, তখন এই পয়েন্টের মূল্য স্তরটি একটি বিউড অর্ডার ব্লক হিসাবে চিহ্নিত করা হয়; যখন একটি দোলন উচ্চ গঠন করা হয়, তখন এই পয়েন্টের মূল্য স্তরটি একটি বিউড অর্ডার ব্লক হিসাবে চিহ্নিত করা হয়।

  3. ফিবোনাচি পুনর্নির্মাণ প্রত্যাহার করেছেনকৌশলটি দাবি করে যে দামটি অবশ্যই 61.8% বা 79% এর ফিবোনাচি স্তরে ফিরে যেতে হবে, এই স্তরগুলি উচ্চ এবং নিম্ন স্তরের হিসাবের মাধ্যমে পাওয়া যায়। যখন দাম এই মূল স্তরে ফিরে যায়, কৌশলটি প্রবেশের সংকেত সন্ধান করতে শুরু করে।

  4. সময় ফিল্টার: সমস্ত ট্রেডিং কার্যক্রম অবশ্যই 9:30 থেকে 16:00 ইস্টার্ন টাইম এর মধ্যে পরিচালিত হতে হবে, যা নিশ্চিত করে যে কৌশলটি বাজারের সবচেয়ে সক্রিয় এবং তরলতার জন্য সর্বোত্তম সময়কালে কাজ করে। 16:00 এর পরে আর কোনও নতুন অবস্থান খোলা হবে না, এবং 16:30 এ সমস্ত পজিশনের জন্য বাধ্যতামূলকভাবে পজিশন বন্ধ করা হবে।

  5. ভর্তি পরীক্ষা

    • মাল্টি হেড প্রবেশঃ যখন দাম একটি পিক অর্ডার ব্লক স্পর্শ করে এবং ক্লোজিং মূল্য 61.8% বা 79% এর চেয়ে বেশি ফিবোনাচি স্তরের উপরে থাকে তখন সিস্টেমটি একটি মাল্টি হেড সংকেত দেয়।
    • শূন্যপদ প্রবেশঃ যখন দাম বিপরীত আদেশের ব্লককে স্পর্শ করে এবং বন্ধের দাম 61.8% বা 79% এর ফিবোনাচি স্তরের নীচে থাকে তখন সিস্টেমটি একটি শূন্যপদ সংকেত দেয়।
  6. ঝুঁকি ব্যবস্থাপনা

  7. ফিক্সড রিস্ক-রিটার্ন অনুপাত: কৌশলটি ডিফল্টরূপে 2: 1 এর ঝুঁকি-ফেরতের চেয়ে স্টপ পয়েন্ট সেট ব্যবহার করে, এটি ATR ((14) এর সাথে ঝুঁকি-ফেরতের পরামিতি গণনা করে তৈরি করা হয়েছে।

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

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

  1. প্রতিষ্ঠানের আচরণের উপর ভিত্তি করে লেনদেনের লজিকএই কৌশলটি বড় অর্থের চলাচলের দিকনির্দেশনা অনুসরণ করতে সক্ষম হয়, যার ফলে ব্যবসায়ের সাফল্যের সম্ভাবনা বৃদ্ধি পায়।

  2. সঠিক সময় ব্যবস্থাপনাকঠোর লেনদেনের সময়ের সীমাবদ্ধতা নিশ্চিত করে যে কৌশলটি কেবলমাত্র বাজারের সবচেয়ে সক্রিয় সময়ের মধ্যে কাজ করে, যার ফলে স্বল্প তরলতার সময়কালে স্লাইড পয়েন্ট এবং ওঠানামা ঝুঁকি এড়ানো যায়।

  3. বাধ্যতামূলক পজিশনিং ব্যবস্থাএই নিয়মটি রাতারাতি পজিশনের ঝুঁকি থেকে রক্ষা করে, বিশেষ করে যেহেতু বাজারে দিনে অনেক বেশি ওঠানামা হয়।

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

  5. গতিশীল ঝুঁকি ব্যবস্থাপনাএটিআর-ভিত্তিক স্টপ লস সেটিং যা মার্কেটের অস্থিরতার উপর ভিত্তি করে ঝুঁকি নিয়ন্ত্রণকে স্বয়ংক্রিয়ভাবে সামঞ্জস্য করতে এবং বিভিন্ন অস্থির পরিবেশে ধারাবাহিক ঝুঁকি প্রকাশের অনুমতি দেয়।

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

  7. কঠোর প্রবেশের শর্ত: একাধিক নিশ্চিতকরণ ফ্যাক্টর (অর্ডার ব্লক, ফিবোনাচি স্তর, কার্যকর ট্রেডিং সময়) এর সমন্বয় দ্বারা, কৌশলটি কার্যকরভাবে ভুল সংকেত হ্রাস করে এবং লেনদেনের গুণমান উন্নত করে।

কৌশলগত ঝুঁকি

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

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

  2. দ্রুত প্রবণতার ঝুঁকি: শক্তিশালী প্রবণতা বাজারে, দামগুলি নির্ধারিত ফিবোনাচি স্তরে ফিরে না আসতে পারে, যার ফলে সম্ভাব্য লাভজনক প্রবণতা মিস করা যায়। এই সমস্যাটি মোকাবেলায় প্রবণতা ট্র্যাকিং মডিউল যুক্ত করা বা ফিবোনাচি স্তরকে গতিশীলভাবে সামঞ্জস্য করার বিষয়টি বিবেচনা করা যেতে পারে।

  3. সময়ের সীমাবদ্ধতার কারণে সংযোগ বিচ্ছিন্ন হওয়ার ঝুঁকি১৬ঃ০০ এর পরে নতুন পজিশন না খোলার এবং ১৬ঃ৩০ এর পরে বাধ্যতামূলক পজিশনের নিয়মগুলি অনুকূল পরিস্থিতিতে বাধ্যতামূলক প্রস্থান বা অনুকূল দামের অধীনে বাধ্যতামূলক পজিশনের কারণ হতে পারে। বাজারের পরিস্থিতি এবং পজিশন হোল্ডারদের ক্ষতিগ্রস্থতার উপর নির্ভর করে আরও নমনীয় পজিশনের নিয়ম প্রবর্তন করা বিবেচনা করা যেতে পারে।

  4. দোলন বিন্দু সনাক্তকরণের পিছিয়ে পড়াকৌশলঃ ঐতিহাসিক ডেটা ব্যবহার করুন (৫ কে লাইন) ওলট-পালট চিহ্নিত করতে, যার ফলে সিগন্যাল বিলম্বিত হতে পারে, যার ফলে সর্বোত্তম প্রবেশের সময়টি মিস করা যায়। আপনি ওলট-পালট চিহ্নিতকরণ অ্যালগরিদমকে অনুকূলিতকরণ করতে চেষ্টা করতে পারেন বা অন্যান্য প্রাথমিক সূচকগুলি প্রবর্তন করতে পারেন যাতে সিগন্যালের সময়কারিতা উন্নত হয়।

  5. একক সময়সীমার সীমাবদ্ধতা: শুধুমাত্র ১৫ মিনিটের সময় ফ্রেম ব্যবহার করে বড় বা ছোট সময় স্কেলের গুরুত্বপূর্ণ বাজার কাঠামো উপেক্ষা করা যেতে পারে। বিবেচনা করুন যে একাধিক সময় ফ্রেম বিশ্লেষণ যুক্ত করা আরও বিস্তৃত বাজার দৃষ্টিভঙ্গি সরবরাহ করতে পারে।

  6. ফিক্সড রিস্ক-রিটার্ন অনুপাতের সীমাবদ্ধতাএকটি একক ২ঃ১ রিস্ক-রিটার্ন সেটিং সব বাজার পরিস্থিতির জন্য উপযুক্ত নাও হতে পারে, বিশেষ করে যখন উদ্বায়ীতা উল্লেখযোগ্যভাবে পরিবর্তিত হয়। বাজার উদ্বায়ীতা বা সমর্থনকারী প্রতিরোধের স্তরের গতিশীলতার উপর নির্ভর করে রিস্ক-রিটার্ন অনুপাতের পরিবর্তন বিবেচনা করা যেতে পারে।

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

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

  1. মাল্টি টাইম ফ্রেম নিশ্চিতকরণ: উচ্চতর সময় ফ্রেম (যেমন 1 ঘন্টা বা 4 ঘন্টা) প্রবণতা নিশ্চিত করুন, নিশ্চিত করুন যে দিনের মধ্যে ট্রেডিংয়ের দিকটি বৃহত্তর প্রবণতার সাথে সামঞ্জস্যপূর্ণ, বিজয়ী হার বাড়ান। এই অপ্টিমাইজেশানটি উচ্চতর সময় ফ্রেমের প্রবণতা সূচক বা মূল্য কাঠামোর বিশ্লেষণ যুক্ত করে করা যেতে পারে।

  2. ডায়নামিক ফিবোনাচি স্তরFibonacci retracement level: বাজারের অস্থিরতা বা বর্তমান প্রবণতার তীব্রতার উপর ভিত্তি করে ফিবোনাচি retracement level এর পরিবর্তনশীলতা। শক্তিশালী প্রবণতার মধ্যে একটি হালকা retracement প্রয়োজন হতে পারে (যেমন 38.2%) এবং একটি অস্থির বাজারে আরও গভীর retracement প্রয়োজন হতে পারে (যেমন 61.8% বা 79%) ।

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

  4. আংশিক মুনাফা লকডাউন: মুনাফা নির্দিষ্ট স্তরে পৌঁছে গেলে কিছু পজিশন প্লেইন করা, যেমন মুনাফা 1R এ প্লেইন হলে 50% পজিশন রাখা, বাকি অংশে স্টপ লস ট্র্যাকিং সেট করা, সম্ভাব্য বড় ট্রেন্ডের সুযোগকে সর্বাধিক করে তোলা।

  5. চলমান সূচক ফিল্টার করুন: ATR-এর পরিবর্তনের হার বা Bollinger Bandwidth Indicator-এর মতো ওভারল্যাপিং সূচকগুলি যুক্ত করুন যাতে কম ওভারল্যাপিং পরিবেশে ট্রেডিং সিগন্যালগুলি ফিল্টার করা যায় এবং ব্যাপ্তিযুক্ত অস্থির বাজারে অত্যধিক ট্রেডিং এড়ানো যায়।

  6. লেনদেনের পরিমাণ

  7. মেশিন লার্নিং: মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে ঐতিহাসিক ডেটাতে অর্ডার ব্লক এবং ফিবোনাচি প্রত্যাহারের কার্যকারিতা বিশ্লেষণ করে এবং এর ভিত্তিতে প্যারামিটার সেট বা বর্ধিত সংকেত ফিল্টারিংকে অপ্টিমাইজ করে।

  8. স্টপ লস অপ্টিমাইজেশানবর্তমান কৌশলটি স্থির ATR গুণক সেট করা স্টপ লস ব্যবহার করে, আপনি সাম্প্রতিক মূল্যের কাঠামো ব্যবহার করার কথা বিবেচনা করতে পারেন (যেমন সাম্প্রতিক দোলনা পয়েন্ট) আরও সুনির্দিষ্ট স্টপ অবস্থান সেট করার জন্য, তহবিল রক্ষা করার পাশাপাশি বাজার থেকে তাড়াতাড়ি ঝাঁকুনি এড়াতে।

সারসংক্ষেপ

ইনস্টিটিউট অর্ডার ব্লক এবং ফিবোনাচি প্রত্যাহারের উপর ভিত্তি করে একটি সুনির্দিষ্ট ইনডোর ট্রেডিং কৌশল একটি পদ্ধতিগত পদ্ধতির প্রতিনিধিত্ব করে যা ইনস্টিটিউট ট্রেডিং আচরণ বিশ্লেষণ এবং ক্লাসিক প্রযুক্তিগত বিশ্লেষণ সরঞ্জামগুলির সাথে মিলিত করে ইনডোর ট্রেডারদের প্রবেশ এবং প্রস্থান করার সুস্পষ্ট নিয়ম সরবরাহ করে।

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

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

সামগ্রিকভাবে, এই কৌশলটি একটি দৃ day় intraday ট্রেডিং ফ্রেমওয়ার্ক সরবরাহ করে, যা ব্যবসায়ীদের জন্য উপযুক্ত যারা ইনস্টিটিউশন ট্রেডিংয়ের আচরণ সম্পর্কে কিছুটা বোঝে, যুক্তিসঙ্গত প্যারামিটার সেট এবং অপ্টিমাইজেশনের মাধ্যমে বিভিন্ন বাজার পরিবেশে স্থিতিশীল পারফরম্যান্স বজায় রাখতে পারে। intraday সময়সীমার মধ্যে কাঠামোগত ট্রেডিং সুযোগগুলি সন্ধান করতে ইচ্ছুক ব্যবসায়ীদের জন্য এটি একটি বিবেচনাযোগ্য কৌশল বিকল্প।

কৌশল সোর্স কোড
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-29 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Rawstocks 15-Minute Model", overlay=true, margin_long=100, margin_short=100, pyramiding=0)

// ===== TIME CONTROL ===== (UTC-4 = Eastern Time)
startHour = input(9, "Start Hour (ET)")
startMin = input(30, "Start Minute")
entryCutoffHour = input(16, "Last Entry Hour (ET)") // 4:00 PM
entryCutoffMin = input(0, "Last Entry Minute")
closeHour = input(16, "Force Close Hour (ET)") // 4:30 PM
closeMin = input(30, "Force Close Minute")

// Define session in UTC-4 (ET)
sessionStart = timestamp("UTC-4", year, month, dayofmonth, startHour, startMin)
entryCutoffTime = timestamp("UTC-4", year, month, dayofmonth, entryCutoffHour, entryCutoffMin)
forceCloseTime = timestamp("UTC-4", year, month, dayofmonth, closeHour, closeMin)

// ===== CORE STRATEGY =====
// Inputs
fib1 = input.float(61.8, "Fib Level (%)")
minSwingSize = input.float(1.0, "Min Swing Size (%)") / 100
rrRatio = input.float(2.0, "Risk/Reward")

// Swing Detection
swingHigh = ta.highest(high, 5) == high[2] and (high[2] - low[2]) >= ta.atr(14) * minSwingSize
swingLow = ta.lowest(low, 5) == low[2] and (high[2] - low[2]) >= ta.atr(14) * minSwingSize

// Order Blocks
var float bullOB = na
var float bearOB = na
if swingLow
    bullOB := low[2]
if swingHigh
    bearOB := high[2]

// Fib Levels
var float swingTop = na
var float swingBot = na
if swingHigh
    swingTop := high[2]
if swingLow
    swingBot := low[2]

fib618 = swingBot + (swingTop - swingBot) * (fib1/100)
fib79 = swingBot + (swingTop - swingBot) * 0.79

// Entry Conditions
longCond = not na(bullOB) and (low <= bullOB) and (close >= fib618 or close >= fib79)
shortCond = not na(bearOB) and (high >= bearOB) and (close <= fib618 or close <= fib79)

// Time Filter - No entries after 4:00 PM
validEntryTime = (time >= sessionStart) and (time <= entryCutoffTime)

// ===== EXECUTION =====
// Entries (only before 4:00 PM)
if (longCond and validEntryTime)
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", "Long", stop=low - ta.atr(14), limit=close + (ta.atr(14) * rrRatio))

if (shortCond and validEntryTime)
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", "Short", stop=high + ta.atr(14), limit=close - (ta.atr(14) * rrRatio))

// Force Close at 4:30 PM ET
var bool forceClosedToday = false
if (time >= forceCloseTime and time < forceCloseTime + 60000) and (not forceClosedToday)
    strategy.close_all("EOD Close @ 4:30PM")
    forceClosedToday := true

// Reset daily flag
if dayofmonth != dayofmonth[1]
    forceClosedToday := false

// ===== VISUALS =====
// Signal Triangles (gray if after entry cutoff)
plotshape(series=longCond, title="Long Signal", style=shape.triangleup, location=location.belowbar, 
     color=validEntryTime ? color.new(color.green, 0) : color.new(color.gray, 0), size=size.small)
plotshape(series=shortCond, title="Short Signal", style=shape.triangledown, location=location.abovebar, 
     color=validEntryTime ? color.new(color.red, 0) : color.new(color.gray, 0), size=size.small)

// Execution Markers
var float longEntryPrice = na
var float shortEntryPrice = na

if (strategy.position_size > 0 and strategy.position_size[1] <= 0)
    longEntryPrice := close
if (strategy.position_size < 0 and strategy.position_size[1] >= 0)
    shortEntryPrice := close

plot(series=longEntryPrice, title="Long Entry", style=plot.style_circles, linewidth=3, color=color.new(color.green, 0))
plot(series=shortEntryPrice, title="Short Entry", style=plot.style_circles, linewidth=3, color=color.new(color.red, 0))

// Force Close Marker
if (time >= forceCloseTime and time < forceCloseTime + 60000)
    label.new(
         bar_index, 
         high, 
         "4:30 PM Close", 
         style=label.style_label_down, 
         color=color.red, 
         textcolor=color.white
     )