মাল্টি-ইন্ডিকেটর ব্রেকআউট এবং রিভার্সাল ট্রেডিং কৌশল: খোলার মূল্য পরিসর অপ্টিমাইজেশনের সাথে মিলিত একটি দ্বৈত প্রবেশ ব্যবস্থা

EMA SMA RSI ATR VWAP ORB
সৃষ্টির তারিখ: 2025-04-01 16:00:37 অবশেষে সংশোধন করুন: 2025-04-01 16:00:37
অনুলিপি: 0 ক্লিকের সংখ্যা: 382
2
ফোকাস
319
অনুসারী

মাল্টি-ইন্ডিকেটর ব্রেকআউট এবং রিভার্সাল ট্রেডিং কৌশল: খোলার মূল্য পরিসর অপ্টিমাইজেশনের সাথে মিলিত একটি দ্বৈত প্রবেশ ব্যবস্থা মাল্টি-ইন্ডিকেটর ব্রেকআউট এবং রিভার্সাল ট্রেডিং কৌশল: খোলার মূল্য পরিসর অপ্টিমাইজেশনের সাথে মিলিত একটি দ্বৈত প্রবেশ ব্যবস্থা

ওভারভিউ

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

কৌশল নীতি

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

  1. বিপরীত ট্রেডিং সিগন্যাল

    • মাল্টি-হেড রিভার্সঃ যখন দাম 50 পিরিয়ডের সরল মুভিং এভারেজ (SMA50) অতিক্রম করে, আরএসআই ওভারসোল্ড থ্রেশহোল্ডের (ডিফল্ট 30) নীচে থাকে, এবং দাম ভিডাব্লুএপি-র নীচে থাকে, এবং সামগ্রিক প্রবণতা উপরে থাকে (SMA200-এর উপরে) তখন এটি ট্রিগার হয়।
    • শূন্যমুখী বিপরীতমুখী: যখন দাম SMA50 এর নীচে অতিক্রম করে, আরএসআই ওভারবাইট থ্রেশহোল্ডের (ডিফল্ট 70) উপরে থাকে এবং দাম ভিডাব্লুএপি-র উপরে থাকে, এবং সামগ্রিক প্রবণতা নীচে থাকে (মূল্য SMA200 এর নীচে থাকে) তখন এটি ট্রিগার করা হয়।
  2. ট্রেন্ড ব্রেকিং সিগন্যাল

    • মাল্টি-হেড ব্রেকআউটঃ যখন 9-মেয়াদী ইন্ডেক্স মুভিং এভারেজ (EMA9) 20-মেয়াদী ইন্ডেক্স মুভিং এভারেজ (EMA20) অতিক্রম করে, দাম VWAP এর চেয়ে বেশি হয় এবং সামগ্রিক প্রবণতা উপরে থাকে তখন ট্রিগার করা হয়।
    • উড়োজাহাজের ব্রেকআউটঃ যখন EMA9 এর নিচে EMA20 অতিক্রম করে, VWAP এর চেয়ে কম দাম হয় এবং সামগ্রিক প্রবণতা নীচে থাকে তখন ট্রিগার করা হয়।
  3. ওআরবি সংকেত

    • মাল্টি হেড ওআরবিঃ যখন দামটি খোলার আগে নির্দিষ্ট সংখ্যক কলাম (ডিফল্ট 15 কলাম) গঠিত সর্বোচ্চ মূল্যকে অতিক্রম করে এবং লেনদেনের পরিমাণ খোলার সময়কালের গড় লেনদেনের পরিমাণের পূর্বনির্ধারিত গুণিতক (ডিফল্ট 1.5 গুণ) অতিক্রম করে তখন এটি ট্রিগার হয়।
    • শূন্য ORB: যখন দাম খোলার আগে গঠিত সর্বনিম্ন মূল্য থেকে পড়ে এবং লেনদেনের পরিমাণ মূল্য হ্রাসের শর্ত পূরণ করে তখন ট্রিগার করা হয়।

কৌশলটি এটিআর সূচক ব্যবহার করে গতিশীল স্টপ লস অবস্থান গণনা করে এবং নির্দিষ্ট সময়ের সর্বনিম্ন / সর্বোচ্চ মূল্য (ডিফল্ট 7) এবং এটিআর মান (ডিফল্ট 0.5) এর গুণিতক যোগ করে সেট করে। প্রবেশের পরে, কৌশলটি দুটি স্টপ লস লক্ষ্য নির্ধারণ করেঃ

  • প্রথম লক্ষ্য (টিপি১): ঝুঁকির ০.৫ গুণ (ডিফল্ট), ২৫% পজিশন নিষ্ক্রিয় করা
  • দ্বিতীয় লক্ষ্যমাত্রা (টিপি২): ঝুঁকির ১.১ গুণ (ডিফল্ট), অবশিষ্ট ৭৫% পজিশন নিষ্ক্রিয় করা

যখন প্রথম স্টপ-অফ লক্ষ্যমাত্রা অর্জন করা হয়, তখন কৌশলটি স্বয়ংক্রিয়ভাবে স্টপ-অফকে প্রবেশ মূল্যের সাথে সামঞ্জস্য করে (লক্ষ্য-ক্ষতির ভারসাম্য পয়েন্ট) এবং কার্যকরভাবে অর্জিত মুনাফা রক্ষা করে।

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

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

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

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

  4. লেনদেনের পরিমাণবিশেষ করে ওআরবি সিগন্যালে লেনদেনের পরিমাণ নিশ্চিতকরণ ব্যবস্থা প্রবর্তন করা হয়েছে, যার ফলে নিম্নমানের ব্রেকআউটগুলিকে কার্যকরভাবে ফিল্টার করার জন্য ব্যবসায়ের পরিমাণের একটি নির্দিষ্ট গুণিতককে অতিক্রম করতে হবে।

  5. ট্রেন্ড ফিল্টার: দীর্ঘমেয়াদী প্রবণতার দিকনির্দেশনা নির্ধারণ করুন 200-মেয়াদী সরল চলমান গড় ((SMA200) এর মাধ্যমে, ট্রেডিংয়ের দিকটি মূল প্রবণতার সাথে সামঞ্জস্যপূর্ণ তা নিশ্চিত করুন, ট্রেডিংয়ের সাফল্যের হার বাড়ান।

  6. ফান্ড ম্যানেজমেন্ট ইন্টিগ্রেশনকৌশলঃ অন্তর্নির্মিত তহবিল ব্যবস্থাপনা ব্যবস্থা, প্রতিটি লেনদেনের জন্য ব্যবহৃত তহবিলের অনুপাত সীমাবদ্ধ করুন (ডিফল্ট 50% মূলধন), তহবিলের বৈচিত্র্য নিশ্চিত করুন, একক লেনদেনের ঝুঁকি হ্রাস করুন।

কৌশলগত ঝুঁকি

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

সমাধানঃ বাজার পরিবর্তনের প্রতি সংবেদনশীলতা বাড়ানোর জন্য মূল্য আচরণ প্যাটার্ন সনাক্তকরণের মতো ভবিষ্যদ্বাণীমূলক সূচকগুলি যুক্ত করার কথা বিবেচনা করুন বা দীর্ঘমেয়াদী চলমান গড়ের প্যারামিটারগুলি সংক্ষিপ্ত করুন।

  1. পরামিতি সংবেদনশীলতাঅনেকগুলি সামঞ্জস্যযোগ্য প্যারামিটার (যেমন EMA দৈর্ঘ্য, RSI threshold, ATR ফ্যাক্টর ইত্যাদি) কৌশলগত অপ্টিমাইজেশানকে জটিল করে তোলে এবং ভবিষ্যতের বাজারে দুর্বল পারফরম্যান্সের জন্য ঐতিহাসিক তথ্যের সাথে অতিরিক্ত মিলিত হতে পারে।

সমাধানঃ প্রাসঙ্গিক প্যারামিটার অপ্টিমাইজেশান পদ্ধতি ব্যবহার করুন, যেমন ফরোয়ার্ড ভ্যালিডেশন, মন্টে কার্লো সিমুলেশন, অত্যধিক অপ্টিমাইজেশন এড়ানো; অথবা স্থির প্যারামিটার ব্যবহার করুন, আরও শক্তিশালী নিয়ম ডিজাইনে মনোনিবেশ করুন।

  1. একাধিক সংকেত সংঘর্ষ: কিছু বাজারের পরিস্থিতিতে, বিভিন্ন প্রবেশের সংকেতগুলি পরস্পরবিরোধী ট্রেডিং পরামর্শ তৈরি করতে পারে, যার ফলে কৌশলটি অস্থির হয়ে পড়ে।

সমাধানঃ একটি কঠোর সংকেত অগ্রাধিকার সিস্টেম স্থাপন করা, অথবা অতিরিক্ত নিশ্চিতকরণ ব্যবস্থা চালু করা, যাতে নিশ্চিত করা যায় যে লেনদেন কেবলমাত্র উচ্চ সম্ভাব্যতার ক্ষেত্রে সম্পন্ন হয়।

  1. ঝুঁকিপূর্ণ উড়োজাহাজ: বাজারের উচ্চতর ও কম তরলতা বা কম তরলতার মধ্যে, দামগুলি স্টপ লস পজিশনের বাইরে চলে যেতে পারে, যার ফলে প্রকৃত ক্ষতি প্রত্যাশার চেয়ে বেশি হতে পারে।

সমাধানঃ বিকল্পের ব্যবহার বিবেচনা করুন hedging কৌশল, অথবা উচ্চ অস্থিরতা বাজার অবস্থার অধীনে স্টপ দূরত্ব বৃদ্ধি, এমনকি সাময়িকভাবে অবস্থানের আকার হ্রাস।

  1. সিস্টেমিক ঝুঁকি ফাটলকৌশলঃ একসাথে একাধিক সম্পর্কিত লেনদেন চালানো, বাজারের তীব্র ওঠানামা চলাকালীন সিস্টেমিক ঝুঁকির মুখোমুখি হতে পারে, যার ফলে একাধিক লেনদেন একই সাথে ক্ষতিগ্রস্থ হতে পারে।

সমাধানঃ সামগ্রিক ঝুঁকি নিয়ন্ত্রণ, সামগ্রিক অবস্থানের আকার সীমিত করা, বা বিভিন্ন সম্পদ শ্রেণীর মধ্যে বিচ্ছিন্নভাবে ট্রেডিং করা, প্রাসঙ্গিকতা ঝুঁকি হ্রাস করা।

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

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

অপ্টিমাইজেশনের কারণঃ ঐতিহ্যগত স্থির ওজনের সূচক সমন্বয়গুলি বিভিন্ন বাজারের পর্যায়ে অভিযোজিত করা কঠিন, এবং মেশিন লার্নিং ঐতিহাসিক তথ্য থেকে স্বয়ংক্রিয়ভাবে সর্বোত্তম সূচক সমন্বয় প্যাটার্ন শিখতে পারে।

  1. মার্কেট সেন্টিমেন্ট ইন্টিগ্রেটেড: ভোল্টেবিলিটি ইনডেক্স (VIX) বা হাই-ফ্রিকোয়েন্সি মার্কেট সেন্টিমেন্ট ইনডেক্স যুক্ত করুন, যা কৌশলকে বাজারের পরিবেশকে আরও ভালভাবে সনাক্ত করতে, প্রবেশের শর্ত এবং ঝুঁকির প্যারামিটারগুলিকে সামঞ্জস্য করতে সহায়তা করে।

অপ্টিমাইজেশনের কারণঃ বাজারের মেজাজের স্বল্পমেয়াদী মূল্যের গতিবিধির উপর উল্লেখযোগ্য প্রভাব রয়েছে। এই ধরনের সূচকগুলিকে একত্রিত করা বাজার পরিবর্তনের পয়েন্টগুলিকে অগ্রিমভাবে ক্যাপচার করতে পারে এবং প্রবেশ এবং প্রস্থান সময়কে অপ্টিমাইজ করতে পারে।

  1. ডায়নামিক অ্যাডজাস্ট স্টপ অনুপাত: ঐতিহাসিক অস্থিরতা বা সমর্থন প্রতিরোধের স্তরের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে স্টপ টার্গেটগুলিকে সামঞ্জস্য করে, যাতে কৌশলটি বিভিন্ন অস্থির পরিবেশে যুক্তিসঙ্গত মুনাফা অর্জন করতে পারে

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

  1. সময় ফিল্টার চালু করুনমার্কেট টাইমস-ভিত্তিক ফিল্টারিং পদ্ধতিতে যোগদান করুন, নিম্ন ওঠানামা বা প্রতিকূল সময়ে যেমন বাজারের খোলার প্রথম কয়েক মিনিট বা কম তরলতার মধ্যরাতের সময় ট্রেডিং এড়াতে।

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

  1. পজিশন স্কেল অপ্টিমাইজেশনস্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত থেকে স্থির মূলধন অনুপাত

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

সারসংক্ষেপ

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

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

//@version=5
strategy("Reversal & Breakout Strategy with ORB", overlay=true, pyramiding=2, initial_capital=50000)

// --- Inputs ---
ema9Length = input.int(9, "9 EMA Length", minval=1)
ema20Length = input.int(20, "20 EMA Length", minval=1)
sma50Length = input.int(50, "50 SMA Length", minval=1)
sma200Length = input.int(200, "200 SMA Length", minval=1)
rsiLength = input.int(14, "RSI Length", minval=1)
rsiOverbought = input.int(70, "RSI Overbought", minval=0, maxval=100)
rsiOversold = input.int(30, "RSI Oversold", minval=0, maxval=100)
atrLength = input.int(14, "ATR Length", minval=1)
stopMulti = input.float(0.5, "Stop Loss ATR Multiplier", minval=0.1, step=0.1)
stopLookback = input.int(7, "Stop Loss Lookback", minval=1)
rr1 = input.float(0.5, "Risk:Reward Target 1", minval=0.1, step=0.1)
rr2 = input.float(1.1, "Risk:Reward Target 2", minval=0.1, step=0.1)
target1Percent = input.float(25, "Profit % Target 1", minval=0, maxval=100)
orbBars = input.int(15, "Opening Range Bars", minval=1, tooltip="Number of bars to define the opening range (e.g., 15 bars = 30 min on 2-min chart)")
volThreshold = input.float(1.5, "Volume Threshold Multiplier", minval=1.0, step=0.1, tooltip="Volume must be this multiple of the opening range average")

// --- Indicators ---
// Moving Averages
ema9 = ta.ema(close, ema9Length)
ema20 = ta.ema(close, ema20Length)
sma50 = ta.sma(close, sma50Length)
sma200 = ta.sma(close, sma200Length)

// VWAP
vwapValue = ta.vwap(close)

// RSI
rsi = ta.rsi(close, rsiLength)

// ATR
atr = ta.atr(atrLength)

// --- Opening Range Breakout ---
var float openingRangeHigh = na
var float openingRangeLow = na
var float openingRangeAvgVol = na
if bar_index < orbBars
    openingRangeHigh := na
    openingRangeLow := na
    openingRangeAvgVol := na
else if bar_index == orbBars
    openingRangeHigh := ta.highest(high, orbBars)
    openingRangeLow := ta.lowest(low, orbBars)
    openingRangeAvgVol := ta.sma(volume, orbBars)

orbLong = not na(openingRangeHigh) and ta.crossover(close, openingRangeHigh) and volume > openingRangeAvgVol * volThreshold
orbShort = not na(openingRangeLow) and ta.crossunder(close, openingRangeLow) and volume > openingRangeAvgVol * volThreshold

// --- Trend Detection ---
trendUp = close > sma200
trendDown = close < sma200

// --- Reversal Conditions ---
reversalLong = ta.crossover(close, sma50) and rsi < rsiOversold and close < vwapValue and trendUp
reversalShort = ta.crossunder(close, sma50) and rsi > rsiOverbought and close > vwapValue and trendDown

// --- Range Breakout Conditions ---
breakoutLong = ta.crossover(ema9, ema20) and close > vwapValue and trendUp
breakoutShort = ta.crossunder(ema9, ema20) and close < vwapValue and trendDown

// Combine conditions
longCondition = (reversalLong or breakoutLong or orbLong)
shortCondition = (reversalShort or breakoutShort or orbShort)

// --- Calculate Position Size ---
equityPerPosition = 25000.0  // $50,000 / 2 positions
positionSizeLong = math.floor(equityPerPosition / close)
positionSizeShort = math.floor(equityPerPosition / close)

// --- Stop Loss Calculation ---
longStop = ta.lowest(low, stopLookback) - (atr * stopMulti)
shortStop = ta.highest(high, stopLookback) + (atr * stopMulti)

// --- Variables to Store Trade Levels ---
var float tradeStop = na
var float tradeTarget1 = na
var float tradeTarget2 = na
var float initialPositionSize = na
var bool breakEvenSet = false  // Track if stop has been moved to break-even
var float stopLevel = na       // Dedicated variable for stop loss in exits
var float target1Level = na    // Dedicated variable for first take profit
var float target2Level = na    // Dedicated variable for second take profit
var float qtyTotal = na        // Track total quantity

// --- Reset Levels Before New Trade ---
var bool newTrade = false
if longCondition or shortCondition
    newTrade := true
else
    newTrade := false

if strategy.position_size == 0 and newTrade
    tradeStop := na
    tradeTarget1 := na
    tradeTarget2 := na
    stopLevel := na
    target1Level := na
    target2Level := na
    initialPositionSize := na
    qtyTotal := na
    breakEvenSet := false

// --- Strategy Entries ---
if longCondition and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=positionSizeLong * 2)
    tradeStop := longStop
    stopLevel := longStop
    stopDistance = close - tradeStop
    tradeTarget1 := close + (stopDistance * rr1)
    tradeTarget2 := close + (stopDistance * rr2)
    target1Level := tradeTarget1
    target2Level := tradeTarget2
    initialPositionSize := positionSizeLong * 2
    qtyTotal := positionSizeLong * 2
    breakEvenSet := false  // Reset break-even flag

if shortCondition and strategy.position_size == 0
    strategy.entry("Short", strategy.short, qty=positionSizeShort * 2)
    tradeStop := shortStop
    stopLevel := shortStop
    stopDistance = tradeStop - close
    tradeTarget1 := close - (stopDistance * rr1)
    tradeTarget2 := close - (stopDistance * rr2)
    target1Level := tradeTarget1
    target2Level := tradeTarget2
    initialPositionSize := positionSizeShort * 2
    qtyTotal := positionSizeShort * 2
    breakEvenSet := false  // Reset break-even flag

// --- Trade Exits ---
if strategy.position_size > 0
    qty_tp1 = qtyTotal * (target1Percent / 100)
    qty_tp2 = qtyTotal * ((100 - target1Percent) / 100)
    strategy.exit("Long Exit 1", "Long", qty=qty_tp1, stop=stopLevel, limit=target1Level)
    strategy.exit("Long Exit 2", "Long", qty=qty_tp2, stop=stopLevel, limit=target2Level)

if strategy.position_size < 0
    qty_tp1 = qtyTotal * (target1Percent / 100)
    qty_tp2 = qtyTotal * ((100 - target1Percent) / 100)
    strategy.exit("Short Exit 1", "Short", qty=qty_tp1, stop=stopLevel, limit=target1Level)
    strategy.exit("Short Exit 2", "Short", qty=qty_tp2, stop=stopLevel, limit=target2Level)

// --- Move Stop to Break-even ---
if strategy.position_size != 0 and not na(initialPositionSize) and not breakEvenSet
    if math.abs(strategy.position_size) < math.abs(initialPositionSize)
        tradeStop := strategy.position_avg_price
        stopLevel := strategy.position_avg_price
        tradeTarget1 := na  // Clear first target for plotting
        breakEvenSet := true  // Mark break-even as set

// --- Manual Close Fallback ---
if strategy.position_size > 0
    if close >= target2Level or close <= stopLevel
        strategy.close("Long", qty=qtyTotal, comment="Manual Close")

if strategy.position_size < 0
    if close <= target2Level or close >= stopLevel
        strategy.close("Short", qty=qtyTotal, comment="Manual Close")

// --- Reset Levels When No Position ---
if strategy.position_size == 0 and not newTrade
    tradeStop := na
    tradeTarget1 := na
    tradeTarget2 := na
    stopLevel := na
    target1Level := na
    target2Level := na
    initialPositionSize := na
    qtyTotal := na
    breakEvenSet := false

// --- Plotting ---
plot(tradeStop, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(tradeTarget1, title="Take Profit 1", color=color.green, linewidth=1, style=plot.style_linebr)
plot(tradeTarget2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)