মাল্টি-টাইমফ্রেম MACD-RSI ক্রসওভার ভোলাটিলিটি ফিল্টার পরিমাণগত ট্রেডিং কৌশল

MACD RSI VWAP ATR SMA
সৃষ্টির তারিখ: 2025-06-09 15:50:55 অবশেষে সংশোধন করুন: 2025-06-09 15:50:55
অনুলিপি: 0 ক্লিকের সংখ্যা: 326
2
ফোকাস
319
অনুসারী

মাল্টি-টাইমফ্রেম MACD-RSI ক্রসওভার ভোলাটিলিটি ফিল্টার পরিমাণগত ট্রেডিং কৌশল মাল্টি-টাইমফ্রেম MACD-RSI ক্রসওভার ভোলাটিলিটি ফিল্টার পরিমাণগত ট্রেডিং কৌশল

ওভারভিউ

এই কৌশলটি একটি বহু-সময় ফ্রেম বিশ্লেষণের উপর ভিত্তি করে একটি পরিমাণগত ট্রেডিং সিস্টেম, যা মূলত 30 মিনিট এবং 1 ঘন্টা সময় ফ্রেমে MACD সূচক, RSI সূচক, VWAP গড় এবং ATR ওঠানামার হার ফিল্টার ব্যবহার করে ট্রেডিং সম্পাদন করে। এই কৌশলটি একই সাথে মুনাফা এবং শূন্যতা সমর্থন করে, বিভিন্ন সময় ফ্রেমের প্রযুক্তিগত সূচক ক্রস সংকেত দ্বারা নিশ্চিত করা হয় এবং লেনদেনের গুণমান বাড়ানোর জন্য ওঠানামার শর্ত ফিল্টারিংয়ের সাথে মিলিত হয়।

কৌশল নীতি

এই কৌশলটির মূল নীতিটি হল নিম্নমানের সংকেতগুলিকে একাধিক শর্তযুক্ত নিশ্চিতকরণের মাধ্যমে ফিল্টার করা, যার মূলত নিম্নলিখিত কয়েকটি মূল উপাদান রয়েছেঃ

  1. মাল্টি টাইম ফ্রেম MACD ক্রস সংকেত

    • ৩০ মিনিটের চার্টে MACD ((12,26,9) ব্যবহার করে প্রধান প্রবেশের সংকেত সনাক্ত করুন
    • 1 ঘন্টা MACD প্রবণতাকে বৈকল্পিকভাবে নিশ্চিতকরণ শর্ত হিসাবে ব্যবহার করা
  2. আরএসআই ওভারবয় ওভারসেল ফিল্টার

    • আরএসআই > 55
    • RSI < 45 30 মিনিটের জন্য শূন্যতা
    • 1 ঘন্টা RSI একটি অতিরিক্ত প্রবণতা হিসাবে নিশ্চিত
  3. ডাবল ভিডাব্লুএপি মূল্য অবস্থান নিশ্চিতকরণ

    • 30 মিনিট এবং 1 ঘন্টা ভিডাব্লুএপি এর উপরে একাধিক অনুরোধের দাম
    • 30 মিনিট এবং 1 ঘন্টা ভিডাব্লুএপি এর নীচে একই সময়ে ফাঁকা অনুরোধের দাম
  4. অস্থিরতা ফিল্টার

    • ৩০ মিনিটের চার্টে ATR ((১৪) এর সাথে তার ২০টি চক্রের গড়রেখার তুলনা করুন
    • শুধুমাত্র বর্তমান ওঠানামা তার গড়ের চেয়ে বড় বা সমান হলে প্রবেশ করুন, নিম্ন ওঠানামা পরিবেশে মিথ্যা সংকেত এড়াতে
  5. মাল্টি-লেভেল প্রস্থান ব্যবস্থা

    • ফিক্সড শতাংশ স্টপ লস (১.৫%) এবং স্টপ লস (০.৫%)
    • 30 মিনিট MACD বিপরীত ক্রস প্রস্থান
    • 1 ঘন্টা MACD প্রবণতা বিপরীত প্রস্থান

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

সামর্থ্য বিশ্লেষণ

  1. মাল্টি টাইম ফ্রেম নিশ্চিতকরণ: 30 মিনিট এবং 1 ঘন্টা সময় ফ্রেমের সংকেত একত্রিত করে, কৌশলটি সত্যিকারের প্রবণতাকে আরও ভালভাবে সনাক্ত করতে এবং মিথ্যা সংকেতের প্রভাবকে হ্রাস করতে পারে। বিশেষত 1 ঘন্টা MACD প্রবণতা নিশ্চিতকরণ বৈশিষ্ট্যটি বিপরীত প্রবণতা ব্যবসায় এড়াতে সহায়তা করে।

  2. অস্থিরতার সাথে সামঞ্জস্যএটিআর ওঠানামা ফিল্টার নিশ্চিত করে যে কৌশলটি কেবলমাত্র বাজারে প্রবেশের জন্য যথেষ্ট গতিশীলতা রয়েছে এবং কম ওঠানামা অঞ্চলে লেনদেন এড়ানো যায়, যা কার্যকরভাবে মৃত অঞ্চলের ঝড়ের ঝুঁকি হ্রাস করে।

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

  4. দ্বৈত মূল্য অবস্থান নিশ্চিতকরণ: দাম একই সময়ে দুটি টাইম ফ্রেমের VWAP এর উপরে ((অধিক) বা নীচে ((খালি) হতে হবে, যা মূল্যের গতি এবং দিকনির্দেশকে আরও নিশ্চিত করে এবং মিথ্যা ব্রেকআউটগুলি হ্রাস করে।

  5. ঝুঁকি ব্যবস্থাপনা অন্তর্নির্মিত: কৌশলটিতে স্টপ লস ম্যানেজমেন্ট এবং পজিশন ম্যানেজমেন্ট রয়েছে (ডিফল্ট অ্যাকাউন্ট ইকুইটি প্রতি লেনদেনে ৫% ব্যবহার করা হয়) যা প্রতিটি লেনদেনের ঝুঁকি হ্রাস নিয়ন্ত্রণে সহায়তা করে এবং মূলধনকে সুরক্ষিত করে।

ঝুঁকি বিশ্লেষণ

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

  2. পরামিতি সংবেদনশীলতাকৌশলটি একাধিক পরিবর্তনযোগ্য প্যারামিটার ব্যবহার করে, যার মধ্যে রয়েছে MACD দৈর্ঘ্য, RSI থ্রেশহোল্ড, ATR ফিল্টার প্যারামিটার ইত্যাদি। এই প্যারামিটারগুলির ক্ষুদ্র পরিবর্তনগুলি কৌশলটির কার্যকারিতার উপর উল্লেখযোগ্য প্রভাব ফেলতে পারে, অতিরিক্ত অপ্টিমাইজেশনের ঝুঁকি রয়েছে।

  3. ফিক্সড শতাংশ স্টপ লস সীমাবদ্ধতা: সকল মার্কেট পরিবেশে একই স্টপ (১.৫%) এবং স্টপ (০.৫%) অনুপাত ব্যবহার করা হয়, যা বিভিন্ন অস্থিরতার পরিবেশে অনুকূলিত হতে পারে না। উচ্চ অস্থিরতার বাজারে, স্টপ খুব টাইট হতে পারে; নিম্ন অস্থিরতার বাজারে, স্টপ খুব দীর্ঘ হতে পারে।

  4. মাল্টিটাইম ফ্রেমওয়ার্ক পিছিয়ে পড়া: দীর্ঘ সময়ের ফ্রেম (যেমন 1 ঘন্টা) ব্যবহার করে নিশ্চিতকরণ হিসাবে সংকেতটি বিলম্বিত হতে পারে, যার ফলে মিস করা প্রবেশের সুযোগ বা বিলম্বিত প্রস্থান হতে পারে।

  5. বাজার পরিস্থিতির সাথে সামঞ্জস্যের অভাব: কৌশলটিতে বিভিন্ন বাজার পরিস্থিতির মধ্যে পার্থক্য করার পদ্ধতি নেই (ট্রেন্ড / ঝড়) যা কিছু বাজার পরিস্থিতিতে খারাপ হতে পারে।

সমাধানঃ

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

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

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

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

  3. প্রবেশের সময় অপ্টিমাইজেশনবর্তমান কৌশলঃ বর্তমান K-লাইন প্রবেশের ক্ষেত্রে যা MACD ক্রসিংয়ে ঘটে, এটি স্লাইড পয়েন্ট বা এক্সিকিউশন বিলম্বের মুখোমুখি হতে পারে। ক্রসিং নিশ্চিত হওয়ার পরে পরবর্তী K-লাইন খোলার সময় প্রবেশের বিষয়টি বিবেচনা করুন, বা একটি নির্দিষ্ট দামের অঞ্চলে প্রবেশের জন্য সীমাবদ্ধ দাম সেট করুন যাতে আরও ভাল এক্সিকিউশন দাম পাওয়া যায়।

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

  5. সূচক প্যারামিটার স্বনির্ধারিত: এমএসিডি, আরএসআই এবং এটিআর এর প্যারামিটারগুলি স্ব-অনুকূলিতকরণের জন্য ডিজাইন করা হয়েছে, সাম্প্রতিক বাজার অস্থিরতা বা পর্যায়ক্রমিক স্বয়ংক্রিয়ভাবে সামঞ্জস্যপূর্ণ। উদাহরণস্বরূপ, উচ্চ অস্থিরতার বাজারে সংক্ষিপ্ত এমএসিডি প্যারামিটার ব্যবহার করা যেতে পারে এবং নিম্ন অস্থিরতার বাজারে দীর্ঘতর প্যারামিটার ব্যবহার করা যেতে পারে।

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

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

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

সারসংক্ষেপ

মাল্টি টাইম ফ্রেমওয়ার্ক MACD-RSI ক্রস ওভারল্যাপিং ট্রেডিং কৌশলটি একটি বিস্তৃত ট্রেডিং সিস্টেম যা একাধিক প্রযুক্তিগত সূচক এবং একাধিক টাইম ফ্রেমের সংকেতগুলির সমন্বয়ে উচ্চমানের ট্রেডিং সুযোগগুলি সনাক্ত করার জন্য ডিজাইন করা হয়েছে। কৌশলটির মূল সুবিধা হ’ল এর বহু স্তরের সংকেত নিশ্চিতকরণ প্রক্রিয়া এবং অন্তর্নির্মিত ঝুঁকি পরিচালনার বৈশিষ্ট্য যা এটিকে মূল্যের ওঠানামা ক্যাপচার করার সময় ঝুঁকি নিয়ন্ত্রণ করতে সক্ষম করে।

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

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

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

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

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © GentlemanOfTrading

//@version=6
strategy(title = "ETH Day Trader", overlay = true, margin_long = 100, margin_short  = 100, default_qty_type  = strategy.percent_of_equity, default_qty_value = 5)

// ==== 1) USER INPUTS ====
// MACD/RSI lengths
fastLen   = input.int(12,   title="MACD Fast EMA Length", minval=1)
slowLen   = input.int(26,   title="MACD Slow EMA Length", minval=1)
signalLen = input.int(9,    title="MACD Signal EMA Length", minval=1)
rsiLen    = input.int(14,   title="RSI Length", minval=1)

// RSI thresholds
rsiThreshLong30 = input.int(55, title="RSI30m > (Long)", minval=1, maxval=100)
rsiThreshShort30= input.int(45, title="RSI30m < (Short)", minval=1, maxval=100)
rsiThresh1h     = input.int(50, title="RSI1h Threshold", minval=1, maxval=100)

// ATR filter (30m)
atrLen     = input.int(14, title="ATR Length (30m)", minval=1)
atrMaLen   = input.int(20, title="ATR MA Length (30m)", minval=1)

// Take Profit / Stop Loss (percent)
tpPerc      = input.float(1.5,  title="Take Profit (%)", minval=0.1) / 100
slPerc      = input.float(0.5,  title="Stop Loss (%)",   minval=0.1) / 100

// Toggle whether to use 1h trend confirmation
use1hTrend  = input.bool(true, title="Use 1h MACD Trend Confirmation?")

// ==== 2) FETCH INDICATORS ON 30m ====
// We assume this script is applied on a chart ≤ 30m (e.g. 15m or 5m), 
// but if you apply it on a 30m chart it still works: security() with "30" just returns the same bar.

[macd30m, macdSig30m, _] = ta.macd(close, fastLen, slowLen, signalLen)
rsi30m                  = ta.rsi(close, rsiLen)
atr30m                  = ta.atr(atrLen)

// ==== 3) FETCH INDICATORS ON 1h & VWAPs via request.security() ====
// --- 1h MACD & RSI ---
[macd1h, macdSig1h, _] = request.security(syminfo.tickerid, "60", ta.macd(close, fastLen, slowLen, signalLen), lookahead=barmerge.lookahead_off)
rsi1h = request.security(syminfo.tickerid, "60", ta.rsi(close, rsiLen), lookahead=barmerge.lookahead_off)

// --- 30m VWAP & 1h VWAP (session VWAP) ---
vwap30m = request.security(syminfo.tickerid, "30", ta.vwap(close), lookahead=barmerge.lookahead_off)
vwap1h  = request.security(syminfo.tickerid, "60", ta.vwap(close), lookahead=barmerge.lookahead_off)

// ==== 4) BUILD VOLATILITY FILTER (30m ATR vs ATR MA) ====
atr30m_ma = ta.sma(atr30m, atrMaLen)
volatilityOK = atr30m >= atr30m_ma

// ==== 5) MULTI-TIMEFRAME CROSS CONDITIONS ====
// 30m MACD cross signals
longCross30m  = ta.crossover(macd30m, macdSig30m)
shortCross30m = ta.crossunder(macd30m, macdSig30m)

// 1h MACD trend confirmation
macdTrendUp1h   = macd1h > macdSig1h
macdTrendDown1h = macd1h < macdSig1h

// ==== 6) ENTRY & EXIT CONDITIONS ====
// LONG ENTRY: 
//   • 30m MACD crossover 
//   • 30m RSI > rsiThreshLong30 
//   • (optionally) 1h MACD line > 1h MACD signal 
//   • Price > 30m VWAP AND Price > 1h VWAP 
//   • 30m ATR ≥ 30m ATR MA (volatility filter)
longEntryCond = 
     longCross30m 
  and (rsi30m > rsiThreshLong30) 
  and (close > vwap30m) 
  and (close > vwap1h) 
  and volatilityOK 
  and (use1hTrend ? macdTrendUp1h : true)

// LONG EXIT: 
//   • fixed TP/SL 
//   OR • 30m MACD crossunder 
//   OR • 1h MACD falls below signal (trend flipped)
var float entryPriceLong = na
longExitCond = false

if (strategy.position_size > 0)
    // Price-based TP / SL checks
    entryPriceLong := nz(entryPriceLong[1], strategy.position_avg_price)
    longTPprice = entryPriceLong * (1 + tpPerc)
    longSLprice = entryPriceLong * (1 - slPerc)
    
    // check TP/SL first
    longExitTP = high >= longTPprice
    longExitSL = low  <= longSLprice
    
    // fallback: MACD crossunder on 30m OR 1h trend flips
    macdTrendFlip1h = macdTrendUp1h and (macd1h < macdSig1h)
    macdCross30m    = shortCross30m
    
    longExitCond := longExitTP or longExitSL or macdCross30m or macdTrendFlip1h
else
    entryPriceLong := na  // reset when no position

// SHORT ENTRY: 
//   • 30m MACD crossunder 
//   • 30m RSI < rsiThreshShort30 
//   • (optionally) 1h MACD line < 1h MACD signal 
//   • Price < 30m VWAP AND Price < 1h VWAP 
//   • 30m ATR ≥ 30m ATR MA (volatility filter)
shortEntryCond = 
     shortCross30m 
  and (rsi30m < rsiThreshShort30) 
  and (close < vwap30m) 
  and (close < vwap1h) 
  and volatilityOK 
  and (use1hTrend ? macdTrendDown1h : true)

// SHORT EXIT: 
//   • fixed TP/SL 
//   OR • 30m MACD crossover 
//   OR • 1h MACD flips up
var float entryPriceShort = na
shortExitCond = false

if (strategy.position_size < 0)
    entryPriceShort := nz(entryPriceShort[1], strategy.position_avg_price)
    shortTPprice = entryPriceShort * (1 - tpPerc)
    shortSLprice = entryPriceShort * (1 + slPerc)
    
    // check TP/SL first
    shortExitTP = low <= shortTPprice
    shortExitSL = high >= shortSLprice
    
    macdTrendFlipUp1h = macdTrendDown1h and (macd1h > macdSig1h)
    macdCrossUp30m    = longCross30m
    
    shortExitCond := shortExitTP or shortExitSL or macdCrossUp30m or macdTrendFlipUp1h
else
    entryPriceShort := na  // reset when no position

// ==== 7) EXECUTE STRATEGY ORDERS WITH LABELS & ALERTS ====
// — Long Entry —
if (longEntryCond and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, low, text="Buy (LT)", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, yloc=yloc.belowbar)
    alert("Buy (LT)", alert.freq_once_per_bar_close)

// — Long Exit —
if (strategy.position_size > 0 and longExitCond)
    strategy.close("Long")
    label.new(bar_index, high, text="Sell (LT)", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, yloc=yloc.abovebar)
    alert("Sell (LT)", alert.freq_once_per_bar_close)

// — Short Entry —
if (shortEntryCond and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, high, text="Sell (ST)", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, yloc=yloc.abovebar)
    alert("Sell (ST)", alert.freq_once_per_bar_close)

// — Short Exit —
if (strategy.position_size < 0 and shortExitCond)
    strategy.close("Short")
    label.new(bar_index, low, text="Buy (ST)", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, yloc=yloc.belowbar)
    alert("Buy (ST)", alert.freq_once_per_bar_close)


// ==== 8) OPTIONAL PLOTTING (for debugging) ====
// We’ve removed any `transp`/`opacity` arguments. Instead, we use `color.new(baseColor, α)` 
// for transparency, where α = 0 is fully opaque and α = 255 is fully transparent.

// 30m VWAP
plot(vwap30m, title = "VWAP 30m", color = color.new(color.teal, 80)) // ~31% transparentlinewidth= 1

// 1h VWAP
plot(vwap1h,  title = "VWAP 1h",  color = color.new(color.fuchsia, 80), linewidth= 1) // ~31% transparent

// 30m ATR vs ATR_MA
plot(atr30m, title = "ATR 30m", color = color.new(color.orange, 80))
plot(atr30m_ma, title = "ATR30m MA", color = color.new(color.yellow, 80))

// 30m MACD Histogram (bars)
plot(macd30m - macdSig30m, title = "MACD Histogram (30m)", style = plot.style_columns, color = (macd30m - macdSig30m >= 0 ? color.new(color.green, 80) : color.new(color.red, 80)))

// 1h MACD Histogram (area)
h1 = request.security(syminfo.tickerid, "60", macd1h - macdSig1h, lookahead=barmerge.lookahead_off)
plot(1, title = "MACD Hist (1h)", style = plot.style_area, color = (h1 >= 0 ? color.new(color.green, 80) : color.new(color.red, 80)))