অভিযোজিত ওপেনিং রেঞ্জ ব্রেকআউট মোমেন্টাম কৌশল এবং ঝুঁকি-অপ্টিমাইজড পজিশন ম্যানেজমেন্ট

ORB SPY R-multiple POSITION SIZING risk management BREAKOUT momentum INTRADAY
সৃষ্টির তারিখ: 2025-08-11 09:54:03 অবশেষে সংশোধন করুন: 2025-08-11 09:54:03
অনুলিপি: 0 ক্লিকের সংখ্যা: 212
2
ফোকাস
319
অনুসারী

অভিযোজিত ওপেনিং রেঞ্জ ব্রেকআউট মোমেন্টাম কৌশল এবং ঝুঁকি-অপ্টিমাইজড পজিশন ম্যানেজমেন্ট অভিযোজিত ওপেনিং রেঞ্জ ব্রেকআউট মোমেন্টাম কৌশল এবং ঝুঁকি-অপ্টিমাইজড পজিশন ম্যানেজমেন্ট

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটির মূল নীতিটি হল বাজারের খোলার পরে প্রথম 15 মিনিটের মধ্যে K লাইন দ্বারা গঠিত দিকনির্দেশক গতিশীলতা ব্যবহার করা। এর বাস্তবায়ন লজিকটি নিম্নরূপঃ

  1. নির্দিষ্ট ঘন্টা এবং মিনিট প্যারামিটার সেট করে মার্কেট খোলার সঠিক সময় নির্ধারণ করুন
  2. শুরুর পর প্রথম ১৫ মিনিটের জন্য K-লাইন শুরুর মূল্য, সর্বোচ্চ মূল্য, সর্বনিম্ন মূল্য এবং বন্ধের মূল্য চিহ্নিত করুন এবং রেকর্ড করুন
  3. K-রেখার দিকনির্দেশনাঃ
    • যদি বন্ধের মূল্য খোলার মূল্যের চেয়ে বেশি হয় (সবুজ K লাইন) এবং আরও বেশি করার অনুমতি দেওয়া হয়, তাহলে K লাইন বন্ধের সময় আরও বেশি করুন
    • যদি বন্ধের মূল্য খোলার মূল্যের চেয়ে কম হয় (লাল K লাইন) এবং খালি করার অনুমতি দেওয়া হয়, তাহলে K লাইন বন্ধের সময় খালি করুন
  4. ঝুঁকি ব্যবস্থাপনা প্যারামিটার সেট করুনঃ
    • রেফারেন্স K লাইনের সর্বনিম্ন বিন্দুতে একাধিক লেনদেনের জন্য স্টপ লস সেট করুন
    • খালি লেনদেনের জন্য স্টপ লস রেফারেন্স K-রেখার সর্বোচ্চ পয়েন্টে সেট করা হয়েছে
    • ঝুঁকি পরিমাণ ® হল প্রবেশ মূল্য এবং স্টপ মূল্যের মধ্যে পার্থক্যের পরম মান
  5. অ্যাকাউন্টের আকার এবং প্রতি লেনদেনের ঝুঁকির শতাংশের উপর ভিত্তি করে সঠিক পজিশনের আকারঃ
    • পজিশন = অ্যাকাউন্টের আকার × ঝুঁকির শতাংশ ÷ ঝুঁকির পরিমাণ
  6. একটি লাভজনক কৌশল নির্ধারণ করুনঃ
    • যদি “১০আর” মোড বেছে নেওয়া হয়, তাহলে লাভের লক্ষ্য হল ১০ গুণ ঝুঁকির পরিমাণ যোগ করা (অধিক) বা বিয়োগ করা (কম)
    • “EoDOnly” মোড নির্বাচন করলে, শুধুমাত্র ট্রেডিং দিনের শেষে প্লেইন করা হবে
  7. প্রতিদিনের লেনদেনের সীমাবদ্ধতা প্রয়োগ করুন (যদি এই বিকল্পটি চালু থাকে)
  8. সেট করা ট্রেডিং দিনের শেষে সমস্ত অব্যবহৃত পজিশনের জন্য বাধ্যতামূলক প্লেইন

এই কৌশলটি ঐতিহ্যগত প্রযুক্তিগত সূচকগুলির উপর নির্ভর করে না, বরং এটি মূল্যের আচরণ এবং সময় কাঠামোর উপর ভিত্তি করে তৈরি করা হয়েছে, যা ওভারফিট হওয়ার ঝুঁকি হ্রাস করে এবং কৌশলটির ধারণাটি সংক্ষিপ্ত এবং কার্যকর রাখে।

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

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

  1. স্পষ্ট প্রবেশের সংকেত: এই কৌশলটি প্রথম 15 মিনিটের মধ্যে K লাইনের দিকনির্দেশের উপর ভিত্তি করে একটি পরিষ্কার এবং নিরপেক্ষ প্রবেশের সংকেত সরবরাহ করে, যা বিষয়গত বিচারকে এড়িয়ে যায়।

  2. সঠিক ঝুঁকি নিয়ন্ত্রণ: প্রতিটি লেনদেনের জন্য একটি পূর্বনির্ধারিত স্টপ লস পজিশন রয়েছে, যা নিশ্চিত করে যে ঝুঁকির পরিমাণটি সঠিকভাবে পরিমাপ করা যায়। কৌশলটি স্বয়ংক্রিয়ভাবে অ্যাকাউন্টের আকার এবং পূর্বনির্ধারিত ঝুঁকির শতাংশের উপর ভিত্তি করে আদর্শ পজিশনের আকার গণনা করে, যা ঝুঁকির গাণিতিক অপ্টিমাইজেশনের জন্য উপলব্ধ।

  3. নমনীয়তা: কৌশলটি একই সাথে একাধিক এবং শূন্যপদ ট্রেডিং সমর্থন করে, যা এটিকে বিভিন্ন বাজার পরিস্থিতির সাথে খাপ খাইয়ে নিতে সক্ষম করে, এটি উত্থান বা পতনের প্রবণতা হোক না কেন।

  4. স্বনির্ধারিত পজিশনের আকার: প্রতি লেনদেনের প্রকৃত ঝুঁকির গতিশীলতার উপর ভিত্তি করে পজিশনের আকারের সমন্বয় করা হয়, যার অর্থ উচ্চ অস্থিরতার পরিবেশে পজিশনের আকার স্বয়ংক্রিয়ভাবে হ্রাস করা হয় এবং নিম্ন অস্থিরতার পরিবেশে পজিশনের আকার বৃদ্ধি করা হয়, যা ঝুঁকির ভারসাম্য অর্জন করে।

  5. সময় দক্ষতা

  6. অতিরিক্ত সুরক্ষা“প্রতিদিন একটি লেনদেন” অপশনটি অতিরিক্ত লেনদেন প্রতিরোধে কার্যকরী, যা অনেক দিনের ব্যবসায়ীদের জন্য একটি সাধারণ সমস্যা।

  7. বাধ্যতামূলক প্যাকেজিং: ট্রেডিং দিবসের শেষে বাধ্যতামূলক পজিশনিং ফাংশন রাতারাতি ঝুঁকি দূর করে এবং বাজার বন্ধ হওয়ার পরে যে প্রতিকূল ঘটনা ঘটতে পারে তার প্রভাব এড়ায়।

  8. সংক্ষিপ্ত লজিকাল কাঠামো: কৌশলটি জটিল সূচক প্যাকেজের উপর নির্ভর করে না, বরং সহজ এবং স্পষ্ট মূল্য আচরণের নীতির উপর ভিত্তি করে, কৌশল ব্যর্থতা এবং ওভারফিট হওয়ার ঝুঁকি হ্রাস করে।

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

কৌশলগত ঝুঁকি

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

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

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

  3. তরলতা ঝুঁকি: এই কৌশলটি উচ্চতর তরলতাসম্পন্ন নয় এমন সম্পদগুলিতে প্রয়োগ করা যেতে পারে, বিশেষত দ্রুত বাজারে। এই কৌশলটি উচ্চ তরলতাসম্পন্ন সম্পদ যেমন এসপিওয়াইয়ের ক্ষেত্রে প্রয়োগ করা উচিত এবং অত্যধিক অস্থির বাজার পরিবেশে লেনদেন করা এড়ানো উচিত।

  4. স্থির R-এর গুণিতকের সীমাবদ্ধতাস্থির 10R লাভের লক্ষ্যমাত্রা বাজার পরিস্থিতির উপর নির্ভর করে অত্যধিক আগ্রাসী বা রক্ষণশীল হতে পারে। বাজারের অস্থিরতা বা সেই দিনের জন্য প্রত্যাশিত অস্থিরতার গতিশীলতার উপর নির্ভর করে R এর গুণকগুলি সামঞ্জস্য করার বিষয়টি বিবেচনা করা যেতে পারে।

  5. সময় অঞ্চল নির্ভরতাকৌশলঃ নির্দিষ্ট সময় অঞ্চল (ইউরোপ / স্টকহোম) ব্যবহার করে লেনদেনের সময় নির্ধারণ করা হয়, যা সময় অঞ্চল সেট করার সময় ভুল হলে ভুল প্রবেশের কারণ হতে পারে। সময় অঞ্চল যাচাইকরণ ব্যবস্থা যুক্ত করার বা আপেক্ষিক সময় গণনা ব্যবহার করার পরামর্শ দেওয়া হয়েছে।

  6. একক সময় ফ্রেম নির্ভরতা: কৌশলটি শুধুমাত্র ১৫ মিনিটের সময় ফ্রেমের উপর ভিত্তি করে, মাল্টি-টাইম ফ্রেম নিশ্চিতকরণের অভাব রয়েছে। ট্রেডিংয়ের দিকটি বৃহত্তর প্রবণতাগুলির সাথে সামঞ্জস্যপূর্ণ তা নিশ্চিত করার জন্য উচ্চতর সময় ফ্রেমের ট্রেন্ড ফিল্টার যুক্ত করা যেতে পারে।

  7. বাজারের অভাব

  8. সঠিক খোলার সময়ের উপর নির্ভর করে: যদি ওপেন টাইম প্যারামিটারটি ভুলভাবে সেট করা হয়, তবে পুরো কৌশলটি ব্যর্থ হতে পারে। ওপেন টাইম স্বয়ংক্রিয়ভাবে সনাক্তকরণ ব্যবস্থা যুক্ত করার পরামর্শ দেওয়া হয়, যা মানুষের ত্রুটি হ্রাস করে।

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

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

  1. অস্থিরতা ফিল্টার যোগ করুনএটি অস্বাভাবিকভাবে কম অস্থিরতার পরিবেশে ট্রেড করা এড়াতে পারে, কারণ এই পরিবেশে সাধারণত সংকেতের গুণমান কম থাকে।

  2. মাল্টিটাইম ফ্রেম বিশ্লেষণ: উচ্চতর সময় ফ্রেম (যেমন 1 ঘন্টা বা দিনরেখা) ট্রেডিংয়ের দিকনির্দেশনা নিশ্চিত করুন, শুধুমাত্র যখন 15 মিনিটের সংকেত উচ্চতর সময় ফ্রেমের ট্রেডিংয়ের দিকনির্দেশনার সাথে সামঞ্জস্যপূর্ণ হয় তখনই ট্রেড করুন। এটি সংকেতের গুণমানকে উল্লেখযোগ্যভাবে উন্নত করতে পারে, যেহেতু সামনের ট্রেডিং সাধারণত আরও কার্যকর হয়।

  3. গতিশীল সমন্বয় R গুণক: বাজারের অস্থিরতার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে লাভের লক্ষ্যমাত্রার আর-মোডালগুলিকে সামঞ্জস্য করে। উদাহরণস্বরূপ, উচ্চ অস্থিরতার পরিবেশে উচ্চতর আর-মোডালগুলি ব্যবহার করুন (যেমন 12-15 আর) এবং কম অস্থিরতার পরিবেশে আরও রক্ষণশীল লক্ষ্যগুলি ব্যবহার করুন (যেমন 6-8 আর) । এই স্বয়ংক্রিয় পদ্ধতিটি বাজারের অবস্থার সাথে আরও ভালভাবে মেলে।

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

  5. সমন্বিত লেনদেনের পরিমাণ: খোলার পরে প্রথম 15 মিনিটের K লাইনের লেনদেনের পরিমাণ বিশ্লেষণ করুন, কেবলমাত্র লেনদেনের পরিমাণ আগের দিনের একই সময়ের গড়ের তুলনায় উল্লেখযোগ্যভাবে বেশি হলেই লেনদেন করুন। উচ্চ লেনদেনের পরিমাণ সাধারণত একটি ব্রেকআউটকে আরও নির্ভরযোগ্য করে তোলে এবং ভুয়া ব্রেকআউটের ঝুঁকি হ্রাস করতে পারে।

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

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

  8. পজিশন ম্যানেজমেন্ট অ্যালগরিদম: মৌলিক ঝুঁকির শতাংশের মডেলের উপর ভিত্তি করে, ক্যালি সূত্র বা সর্বোত্তম f-মান পদ্ধতি যুক্ত করার বিষয়টি বিবেচনা করুন যাতে দীর্ঘমেয়াদী মূলধন বৃদ্ধির হারকে সর্বাধিক করে তোলা যায়। এই পদ্ধতিটি কৌশলটির ঐতিহাসিক বিজয় এবং লাভ-ক্ষতির অনুপাতের উপর ভিত্তি করে অবস্থানের আকারকে গতিশীলভাবে সামঞ্জস্য করতে পারে।

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

সারসংক্ষেপ

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

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

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

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

কৌশল সোর্স কোড
/*backtest
start: 2025-07-11 00:00:00
end: 2025-08-10 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("ORB 15m – SE First 15min Breakout (Long/Short)",
     overlay=true, initial_capital=25000, pyramiding=0,
     calc_on_every_tick=false, process_orders_on_close=true)

// ===== Inputs =====
accountSize     = input.float(25000, "Account Size", minval=1)
riskPct         = input.float(1.0,   "Risk per Trade (%)", minval=0.01, step=0.1)
oneTradePerDay  = input.bool(true,   "Limit to 1 Trade per Day?")
useLongs        = input.bool(true,   "Allow Longs?")
useShorts       = input.bool(true,   "Allow Shorts?")
tpMode          = input.string("10R","Take Profit Mode", options=["10R","EoDOnly"])
R_multiple      = input.float(10.0,  "TP = R multiple (if 10R)", minval=0.1, step=0.5)
sessEndHourSE   = input.int(22, "Session End Hour (Europe/Stockholm)", minval=0, maxval=23)
sessEndMinSE    = input.int(0,  "Session End Minute", minval=0, maxval=59)
sessionOpenHour = input.int(15, "Session Open Hour (Europe/Stockholm)", minval=0, maxval=23)
sessionOpenMin  = input.int(30, "Session Open Minute", minval=0, maxval=59)

// ===== Detect first 15-min candle after open =====
isSessionOpen = hour(time, "Europe/Stockholm") == sessionOpenHour and minute(time, "Europe/Stockholm") == sessionOpenMin
is15m         = timeframe.isintraday and timeframe.multiplier == 15
plotchar(not is15m, title="Timeframe Warning", char="X", location=location.top, color=color.red, size=size.tiny)

// Reference candle vars
var int   refBarIndex = na
var float refOpen     = na
var float refHigh     = na
var float refLow      = na
var float refClose    = na

if barstate.isnew and isSessionOpen
    refBarIndex := bar_index
    refOpen     := open
    refHigh     := high
    refLow      := low
    refClose    := close

if bar_index == refBarIndex
    refHigh  := math.max(refHigh, high)
    refLow   := math.min(refLow, low)
    refClose := close

// Direction
refIsGreen = not na(refOpen) and not na(refClose) and (refClose > refOpen)
refIsRed   = not na(refOpen) and not na(refClose) and (refClose < refOpen)

// One trade per day
var int lastTradeYmd = 0
todayYmd    = year * 10000 + month * 100 + dayofmonth
tradedToday = (lastTradeYmd == todayYmd)

// Trade vars
var float entry     = na
var float stopPrice = na
var float r         = na
var float tp        = na
var int   qty       = 0

// Entry at close of first 15-min candle
isRefBarClose = barstate.isconfirmed and (bar_index == refBarIndex)
if isRefBarClose and not tradedToday and strategy.position_size == 0
    entry := close

    // Long
    if refIsGreen and useLongs
        stopPrice := refLow
        r := math.abs(entry - stopPrice)
        qty := r > 0 ? int(math.floor((accountSize * (riskPct * 0.01)) / r)) : 1
        qty := qty < 1 ? 1 : qty
        strategy.entry("L", strategy.long, qty=qty)
        if tpMode == "10R"
            tp := entry + (R_multiple * r)
            strategy.exit("L-Exit", from_entry="L", stop=stopPrice, limit=tp)
        else
            strategy.exit("L-Exit", from_entry="L", stop=stopPrice)
        lastTradeYmd := todayYmd

    // Short
    if refIsRed and useShorts
        stopPrice := refHigh
        r := math.abs(entry - stopPrice)
        qty := r > 0 ? int(math.floor((accountSize * (riskPct * 0.01)) / r)) : 1
        qty := qty < 1 ? 1 : qty
        strategy.entry("S", strategy.short, qty=qty)
        if tpMode == "10R"
            tp := entry - (R_multiple * r)
            strategy.exit("S-Exit", from_entry="S", stop=stopPrice, limit=tp)
        else
            strategy.exit("S-Exit", from_entry="S", stop=stopPrice)
        lastTradeYmd := todayYmd

// Flatten at session end
sessEndTsSE = timestamp("Europe/Stockholm", year, month, dayofmonth, sessEndHourSE, sessEndMinSE)
if time_close == sessEndTsSE and strategy.position_size != 0
    strategy.close_all()