সাপোর্ট এবং রেজিস্ট্যান্স ব্রেকথ্রু কৌশল এবং ট্রেন্ড-ADX ফিল্টার পরিমাণগত ট্রেডিং সিস্টেম

ADX SMA 支撑阻力位 趋势滤波器 突破策略 枢轴点 动向指标 风险管理
সৃষ্টির তারিখ: 2025-05-30 11:58:27 অবশেষে সংশোধন করুন: 2025-05-30 11:58:27
অনুলিপি: 0 ক্লিকের সংখ্যা: 367
2
ফোকাস
319
অনুসারী

সাপোর্ট এবং রেজিস্ট্যান্স ব্রেকথ্রু কৌশল এবং ট্রেন্ড-ADX ফিল্টার পরিমাণগত ট্রেডিং সিস্টেম সাপোর্ট এবং রেজিস্ট্যান্স ব্রেকথ্রু কৌশল এবং ট্রেন্ড-ADX ফিল্টার পরিমাণগত ট্রেডিং সিস্টেম

ওভারভিউ

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

কৌশল নীতি

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

  1. প্রতিরোধক বিট সনাক্তকরণ: সিস্টেমটি গুরুত্বপূর্ণ মূল্যের স্তরগুলিকে চিহ্নিত করার জন্য Pivot Points পদ্ধতি ব্যবহার করে।ta.pivothighএবংta.pivotlowফাংশন, যা 5 টি চক্রের জন্য ডিফল্ট প্যারামিটার হিসাবে মূল অক্ষের উচ্চতা এবং নিম্ন পয়েন্ট গণনা করে এবং এই পয়েন্টগুলিকে সম্ভাব্য প্রতিরোধের এবং সমর্থন পয়েন্ট হিসাবে ব্যবহার করে।

  2. গতিশীল অঞ্চল ব্যবস্থাপনা: সিস্টেম অ্যারে গঠন ব্যবহার করেsupportLevelsএবংresistanceLevelsপ্রতিরোধের বিট সংরক্ষণ এবং কাস্টম ফাংশন দ্বারা সমর্থনf_add_levelএই মূল্য স্তরগুলিকে বুদ্ধিমানভাবে পরিচালনা করুন। এই ফাংশনটি নিশ্চিত করে যে নতুন যুক্ত স্তরগুলি বিদ্যমান স্তরগুলির সাথে পর্যাপ্ত দূরত্ব রয়েছে (ডিফল্ট 2%) এবং অঞ্চলগুলিকে অত্যধিক জনাকীর্ণ হওয়া থেকে রক্ষা করে, তবে সর্বাধিক 5 টি সর্বশেষ স্তর সংরক্ষণের সীমাবদ্ধতা রয়েছে।

  3. ট্রেন্ড নিশ্চিতকরণ ফিল্টার

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

  5. প্রবেশ সংকেত উৎপন্ন:

    • মাল্টি হেড সিগন্যালঃ যখন দাম নীচে থেকে সমর্থন ভাঙবে (নিম্ন স্তরের নীচে কিন্তু বন্ধের দাম সমর্থন থেকে উপরে) এবং যখন দাম 50 চক্রের গড়ের উপরে থাকে এবং ADX মানটি হ্রাসের উপরে থাকে তখন ট্রিগার করা হয়।
    • খালি মাথা সংকেত: যখন দাম প্রতিরোধের সীমা অতিক্রম করে (উচ্চতা প্রতিরোধের সীমা অতিক্রম করে কিন্তু বন্ধের মূল্য প্রতিরোধের সীমা অতিক্রম করে) এবং যখন দাম 50 চক্রের গড়ের নীচে থাকে এবং ADX মানটি হ্রাসের চেয়ে বেশি থাকে তখন এটি ট্রিগার করা হয়।
  6. ঝুঁকি ব্যবস্থাপনা: কৌশলটি স্থির শতাংশের স্টপ-স্টপ-লস সেটিং ব্যবহার করে, মাল্টি-হেডের ডিফল্ট সেটিং 15% স্টপ-স্টপ এবং 10% স্টপ-লস, খালি-হেডের ডিফল্ট সেটিং 10% স্টপ-স্টপ এবং 10% স্টপ-লস। একবার দামগুলি এই স্তরে পৌঁছে গেলে, সিস্টেমটি স্বয়ংক্রিয়ভাবে পজিশনটি সরিয়ে দেয় এবং ট্রেডিংয়ের অবস্থা পুনরায় সেট করে।

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

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

  1. একাধিক নিশ্চিতকরণ ব্যবস্থা: সমর্থন প্রতিরোধের ব্রেকিং, প্রবণতা দিক এবং ADX শক্তির সাথে মিলিতভাবে ট্রিপল নিশ্চিতকরণ দ্বারা, মিথ্যা ব্রেকিংয়ের ঝুঁকি কার্যকরভাবে হ্রাস করা হয়েছে। একক সূচকের তুলনায় একাধিক নিশ্চিতকরণ প্রক্রিয়াটি ট্রেডিং সিগন্যালের নির্ভরযোগ্যতা বাড়ায়।

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

  3. স্মার্ট জোন ক্লাস্টারিং: সর্বাধিক জোন প্রস্থের শতাংশ প্যারামিটার ((maxZoneWidthPct) দ্বারা, অতিরিক্ত সংকেতের পুনরাবৃত্তি এড়ানো হয়েছে, খুব কাছাকাছি সমর্থন প্রতিরোধের বিট পুনরায় গণনা করা হয়েছে।

  4. কাস্টম ADX গণনা: কাস্টম ADX ফাংশন ব্যবহার করে কৌশল, সরাসরি প্রকৃত তরঙ্গদৈর্ঘ্য, দিকনির্দেশের সরানো এবং মসৃণ প্রক্রিয়াকরণের মাধ্যমে, সূচক গণনার সঠিকতা এবং নমনীয়তা নিশ্চিত করে।

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

  6. ঝুঁকি নিয়ন্ত্রণে স্পষ্টতা: একটি স্টপ-অফ-লস শতাংশের মাধ্যমে প্রতিটি লেনদেনের জন্য একটি সুস্পষ্ট ঝুঁকি ব্যবস্থাপনা কাঠামো সরবরাহ করা, একক লেনদেনের অত্যধিক ক্ষতি রোধ করা এবং যুক্তিসঙ্গত মুনাফা লক করা।

  7. স্বজ্ঞাত দৃশ্যমানতাকৌশলঃ সমর্থন প্রতিরোধের স্তর এবং ট্রেডিং সংকেতগুলি চার্টে চিহ্নিত করুন, রঙের কোডিংয়ের মাধ্যমে ((সমর্থন সবুজ, প্রতিরোধের স্থান লাল) এবং লেবেল ((লং, শর্ট, এক্সআইটি)) এর মাধ্যমে স্বজ্ঞাত ভিজ্যুয়াল প্রতিক্রিয়া সরবরাহ করুন, যা বিশ্লেষণ এবং রিয়েল-টাইম পর্যবেক্ষণে সহায়তা করে।

কৌশলগত ঝুঁকি

যদিও এই কৌশলটি যুক্তিসঙ্গতভাবে পরিকল্পিত, এর মধ্যে কিছু সম্ভাব্য ঝুঁকি এবং সীমাবদ্ধতা রয়েছেঃ

  1. বাজারে ভুয়া ব্রেকআপ: একটি উচ্চ অস্থির বাজার পরিবেশে, দামগুলি প্রায়শই সমর্থনকারী প্রতিরোধের স্তরটি ভেঙে পরে ফিরে আসে, যার ফলে মিথ্যা বিরতির সংকেত বৃদ্ধি পায়। সমাধানঃ নিশ্চিতকরণ চক্র বাড়ানোর বিষয়টি বিবেচনা করা যেতে পারে, যাতে মূল্যটি একটি নির্দিষ্ট সময় ধরে থাকার জন্য বা একটি নির্দিষ্ট আকৃতি তৈরি করার পরে একটি নির্দিষ্ট সময় ধরে থাকার জন্য একটি নিশ্চিতকরণ সংকেত তৈরি করতে পারে।

  2. ঐতিহাসিক সমর্থন ও প্রতিরোধের উপর অত্যধিক নির্ভরশীলতাকৌশলটি ঐতিহাসিকভাবে গঠিত সমর্থন ও প্রতিরোধের স্তরের উপর ভিত্তি করে তৈরি করা হয়েছে, যখন বাজার কাঠামোর মৌলিক পরিবর্তন ঘটে (যেমন বড় সংবাদ ইভেন্ট) তখন এই ঐতিহাসিক স্তরগুলি কার্যকর হতে পারে না। সমাধানঃ একটি গতিশীল সমন্বয় ব্যবস্থা যুক্ত করার কথা বিবেচনা করা যেতে পারে, যা বাজার ওঠানামা অনুযায়ী স্বয়ংক্রিয়ভাবে সমর্থন ও প্রতিরোধের স্তরগুলিকে সামঞ্জস্য করে।

  3. ফিক্সড শতাংশ স্টপ লস সীমাবদ্ধতা: স্থির শতাংশের স্টপ লস সব বাজার পরিস্থিতিতে উপযুক্ত নাও হতে পারে, কম ওঠানামা বাজারগুলিতে খুব বড় হতে পারে, উচ্চ ওঠানামা বাজারগুলিতে খুব ছোট হতে পারে। সমাধানঃ এটিআর (প্রকৃত তরঙ্গদৈর্ঘ্য) এর উপর ভিত্তি করে স্টপ লস স্তরের গতিশীল সমন্বয় বিবেচনা করা যেতে পারে।

  4. ট্রেন্ড রিভার্সাল ঝুঁকি: 50 পিরিয়ডের এসএমএ ট্রেন্ডিং সূচক হিসেবে ব্যবহার করলে ট্রেন্ডের শুরুতে প্রতিক্রিয়া বিলম্বিত হতে পারে, যার ফলে ট্রেন্ডের শেষের দিকে ট্রেন্ডিং শুরু হতে পারে। সমাধানঃ আরও সংবেদনশীল স্বল্পমেয়াদী ট্রেন্ডিং সূচক বা গতিশীলতা সূচক যুক্ত করার কথা বিবেচনা করা যেতে পারে।

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

  6. পরামিতি সংবেদনশীলতা: কৌশলগত কার্যকারিতা প্যারামিটার সেটিং (যেমন Pivot দৈর্ঘ্য, ADX থ্রেশহোল্ড) এর জন্য সংবেদনশীল, প্যারামিটারগুলির ভুল নির্বাচনটি অত্যধিক লেনদেন বা মিস করা সুযোগের কারণ হতে পারে। সমাধানঃ বিভিন্ন বাজারের অবস্থার অধীনে প্যারামিটার পারফরম্যান্সের পর্যালোচনা করে একটি প্যারামিটার অপ্টিমাইজেশন ফ্রেমওয়ার্ক তৈরি করুন।

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

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

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

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

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

  4. ডায়নামিক স্টপ লস: বাজার ওঠানামা (যেমন এটিআর) এর উপর ভিত্তি করে গতিশীলভাবে স্টপ লস লেভেল সেট করুন, স্থির শতাংশের পরিবর্তে। এটি ঝুঁকি ব্যবস্থাপনাকে আরও নমনীয় করে তোলে, বর্তমান বাজার অবস্থার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সুরক্ষা স্তরটি সামঞ্জস্য করতে সক্ষম, উচ্চ ওঠানামা বাজারে আরও আলগা স্টপ লস সেট করুন এবং কম ওঠানামা বাজারে আরও কঠোর স্টপ লস সেট করুন।

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

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

  7. সমর্থন প্রতিরোধের শক্তি শ্রেণীবদ্ধকরণ: সমর্থনকারী প্রতিরোধের স্তরের শক্তির মূল্যায়ন ব্যবস্থা চালু করুন, ইতিহাসের পরীক্ষার সংখ্যা, গঠনের সময়কালের দৈর্ঘ্য এবং অন্যান্য কারণের ভিত্তিতে স্তরের শক্তির মূল্যায়ন করুন। এইভাবে, মূল্যের স্তরগুলিতে অগ্রাধিকার দেওয়া যেতে পারে যা শক্তিশালী এবং কার্যকর প্রতিক্রিয়া সৃষ্টির সম্ভাবনা বেশি।

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

সারসংক্ষেপ

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

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

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

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

কৌশল সোর্স কোড
/*backtest
start: 2024-05-30 00:00:00
end: 2025-05-29 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("S/R Breakout Strategy (1H) with Trend and ADX Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ─────────────────────────────────────────────────────────────
// INPUTS
// ─────────────────────────────────────────────────────────────
pivotLen        = input.int(5, title="Pivot Length")
lookbackBars    = input.int(300, title="Lookback Bars")
maxZoneWidthPct = input.float(2.0, title="Max Zone Width %")
tpLong          = input.float(0.15, title="Take Profit % (Long)")
slLong          = input.float(0.10, title="Stop Loss % (Long)")
tpShort         = input.float(0.10, title="Take Profit % (Short)")
slShort         = input.float(0.10, title="Stop Loss % (Short)")
allowLong       = input.bool(true, title="Allow Long Trades")
allowShort      = input.bool(true, title="Allow Short Trades")

// ADX settings
adxThreshold    = input.float(25.0, title="ADX Threshold")
adxLen          = input.int(14, title="ADX Length")

// Trend filter: 50-period moving average
ma50 = ta.sma(close, 50)

// ─────────────────────────────────────────────────────────────
// CUSTOM ADX FUNCTION
// ─────────────────────────────────────────────────────────────
// This function calculates ADX using the common method based on true range,
// directional movement and smoothing it with the RMA.
f_adx(len) =>
    // true range for the current bar
    tr = ta.tr
    // Calculate upward and downward moves
    upMove   = high - high[1]
    downMove = low[1] - low
    // Determine directional movements
    plusDM  = (upMove > downMove and upMove > 0) ? upMove : 0.0
    minusDM = (downMove > upMove and downMove > 0) ? downMove : 0.0
    // Smooth the values using RMA (running moving average)
    smPlusDM  = ta.rma(plusDM, len)
    smMinusDM = ta.rma(minusDM, len)
    smTR      = ta.rma(tr, len)
    // Calculate the directional indicators, avoid division by zero
    plusDI  = (smTR != 0) ? 100 * smPlusDM / smTR : 0.0
    minusDI = (smTR != 0) ? 100 * smMinusDM / smTR : 0.0
    diSum   = plusDI + minusDI
    dx      = (diSum != 0) ? 100 * math.abs(plusDI - minusDI) / diSum : 0.0
    // Smooth the DX to get ADX
    ta.rma(dx, len)

// Compute ADX value using the custom function
adxValue = f_adx(adxLen)

// ─────────────────────────────────────────────────────────────
// PIVOT DETECTION & SUPPORT/RESISTANCE LEVELS
// ─────────────────────────────────────────────────────────────
pivotHigh = ta.pivothigh(high, pivotLen, pivotLen)
pivotLow  = ta.pivotlow(low, pivotLen, pivotLen)

// Declare arrays for support and resistance levels
var float[] supportLevels    = array.new_float()
var float[] resistanceLevels = array.new_float()

// Function to add a level into the provided array if it meets the criteria.
// Always returns a float (0.0) for consistency.
f_add_level(arr, newLevel) =>
    if array.size(arr) == 0
        array.push(arr, newLevel)
    else
        shouldAdd = true
        for i = 0 to (array.size(arr) - 1)
            existing = array.get(arr, i)
            if math.abs(existing - newLevel) / newLevel * 100 <= maxZoneWidthPct
                shouldAdd := false
        if shouldAdd
            array.push(arr, newLevel)
            if array.size(arr) > 5
                array.shift(arr)
    0.0

// Update support and resistance arrays once sufficient bars have formed
if bar_index > pivotLen * 2
    if not na(pivotLow)
        f_add_level(supportLevels, pivotLow)
    if not na(pivotHigh)
        f_add_level(resistanceLevels, pivotHigh)

// ─────────────────────────────────────────────────────────────
// TRADE MANAGEMENT VARIABLES
// ─────────────────────────────────────────────────────────────
var bool   inTrade    = false
var bool   isLong     = false
var float  entryPrice = na

// Signal flags
longSignal  = false
shortSignal = false

// Detect long signal: price crosses above support level
if array.size(supportLevels) > 0
    for i = 0 to (array.size(supportLevels) - 1)
        lvl = array.get(supportLevels, i)
        if low < lvl and close > lvl
            longSignal := true

// Detect short signal: price crosses below resistance level
if array.size(resistanceLevels) > 0
    for i = 0 to (array.size(resistanceLevels) - 1)
        lvl = array.get(resistanceLevels, i)
        if high > lvl and close < lvl
            shortSignal := true

// ─────────────────────────────────────────────────────────────
// ENTRY CONDITIONS & EXECUTION
// ─────────────────────────────────────────────────────────────
if not inTrade
    // Long entry: require long signal, price above 50MA, and ADX above threshold
    if allowLong and longSignal and close > ma50 and adxValue > adxThreshold
        strategy.entry("Long", strategy.long)
        label.new(x=bar_index, y=low, text="LONG", xloc=xloc.bar_index, style=label.style_label_up, color=color.green, textcolor=color.white)
        entryPrice := close
        isLong     := true
        inTrade    := true
    // Short entry: require short signal, price below 50MA, and ADX above threshold
    else if allowShort and shortSignal and close < ma50 and adxValue > adxThreshold
        strategy.entry("Short", strategy.short)
        label.new(x=bar_index, y=high, text="SHORT", xloc=xloc.bar_index, style=label.style_label_down, color=color.red, textcolor=color.white)
        entryPrice := close
        isLong     := false
        inTrade    := true

// ─────────────────────────────────────────────────────────────
// EXIT CONDITIONS
// ─────────────────────────────────────────────────────────────
if inTrade
    ret = isLong ? (close - entryPrice) / entryPrice : (entryPrice - close) / entryPrice
    tp  = isLong ? tpLong : tpShort
    sl  = isLong ? slLong : slShort
    if ret >= tp or ret <= -sl
        strategy.close_all()
        label.new(x=bar_index, y=close, text="EXIT", xloc=xloc.bar_index, style=label.style_label_left, color=color.orange, textcolor=color.black)
        inTrade    := false
        entryPrice := na

// ─────────────────────────────────────────────────────────────
// ALERT CONDITIONS
// ─────────────────────────────────────────────────────────────
alertcondition(longSignal and allowLong, title="Long Breakout", message="🚀 Long breakout on {{ticker}} at {{close}}")
alertcondition(shortSignal and allowShort, title="Short Breakout", message="🔻 Short breakout on {{ticker}} at {{close}}")