বহুমাত্রিক এনট্রপি মোমেন্টাম ট্রেন্ড অ্যাডাপ্টিভ ট্রেডিং সিস্টেম

CETP-Plus Shannon Entropy RSI ATR ADX EMA momentum 3D Histogram Volatility Filter
সৃষ্টির তারিখ: 2025-08-11 09:46:42 অবশেষে সংশোধন করুন: 2025-08-20 16:26:32
অনুলিপি: 4 ক্লিকের সংখ্যা: 353
2
ফোকাস
319
অনুসারী

বহুমাত্রিক এনট্রপি মোমেন্টাম ট্রেন্ড অ্যাডাপ্টিভ ট্রেডিং সিস্টেম বহুমাত্রিক এনট্রপি মোমেন্টাম ট্রেন্ড অ্যাডাপ্টিভ ট্রেডিং সিস্টেম

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটির মূল নীতিটি হল শ্যানন কোণকে আর্থিক বাজারের গ্রাফিকাল প্যাটার্ন বিশ্লেষণে প্রয়োগ করা। শ্যানন কোণটি তথ্য তত্ত্ব থেকে উদ্ভূত, যা র্যান্ডম ভেরিয়েবলের অনিশ্চয়তা বা “অশান্তির মাত্রা” পরিমাপ করতে ব্যবহৃত হয়। এই কৌশলটিতে কোণকে নিম্নলিখিত উপায়ে গণনা এবং প্রয়োগ করা হয়ঃ

  1. ক্যালোরির অনুপাতকৌশলটি প্রথমে তিনটি মূল প্রবণতা অনুপাত গণনা করে - প্রকৃত অনুপাত (যা প্রবণতার শক্তিকে প্রতিফলিত করে), শ্যাডো লাইন অনুপাত এবং নিম্ন শ্যাডো লাইন অনুপাত (যা সম্ভাব্য বিপরীতকে প্রতিফলিত করে) ।
  2. সূচকীয় অবনতি ওজনেরEMA-এর মত কাজ করার জন্য, সাম্প্রতিক ডেটাকে আরও বেশি গুরুত্ব দেওয়া হয়েছে।
  3. ত্রিমাত্রিক রৈখিক মানচিত্রের বাক্স: ত্রি-মাত্রিক রৈখিক মানচিত্রের মধ্যে রৈখিক অনুপাত স্থাপন করুন, যার মাত্রাগুলি সত্তা, উপ-ছায়া রেখা এবং নীচের-ছায়া রেখার সাথে মিলে যায়।
  4. ক্যালোরি গণনা: শ্যানন সূত্র ব্যবহার করে রৈখিক মানচিত্রের তির্যক গণনা করুন, নিম্ন তির্যক একটি শক্তিশালী প্যাটার্নের উপস্থিতি নির্দেশ করে।
  5. গতির বিচ্যুতি সমন্বয়: RSI-এর মতো একটি গণনা পদ্ধতি যা মূল্যের গতিবিধিকে ধারণ করে এবং স্কেল স্কোরকে সমন্বয় করে।
  6. প্রবণতা তীব্রতা সংশোধনADX-এর মতো একটি গণনা পদ্ধতি ট্রেন্ডের দিকনির্দেশনা এবং শক্তি সনাক্ত করে এবং স্কোরকে আরও সমন্বয় করে।
  7. অস্থিরতা সমন্বয়ATR ব্যবহার করে অস্থিরতা স্কেলিং, বিভিন্ন অস্থিরতা পরিবেশে সিগন্যাল সামঞ্জস্য নিশ্চিত করে।

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

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

  1. ইন্টিগ্রেটেড সংকেতসিইটিপি-প্লাস সূচকটি একাধিক ঐতিহ্যবাহী সূচকের (ইএমএ, আরএসআই, এটিআর, এডিএক্স) সুবিধাগুলিকে একত্রিত করে, একটি একক, পরিষ্কার ট্রেডিং সংকেত সরবরাহ করে, সূচক সংঘর্ষ এবং অত্যধিক ফিটনেস ঝুঁকি এড়াতে।

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

  3. সমান্তরাল ডাইফ্রিমেশনএই কৌশলটি হ’লঃ মুলধন এবং শূন্যধনকে সমান গুরুত্ব দেওয়া, যাতে এটি বুল বাজার এবং বিয়ার বাজার উভয় ক্ষেত্রেই কার্যকরভাবে কাজ করতে পারে এবং দিকনির্দেশমূলক পক্ষপাতের দ্বারা প্রভাবিত হয় না।

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

  5. নয়েজ ইফেক্ট কমানোক্যাশ বিশ্লেষণ এবং ডায়াগ্রাম বক্সিংয়ের মাধ্যমে, কৌশলটি সত্যিকারের সংকেত এবং বাজারের শব্দকে আলাদা করতে পারে, যা মিথ্যা সংকেতের ঘটনা হ্রাস করে।

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

  7. সম্পূর্ণ ঝুঁকি ব্যবস্থাপনা: একীভূত বহু স্তরীয় ঝুঁকি নিয়ন্ত্রণ ব্যবস্থা, যার মধ্যে রয়েছে শতাংশ বন্ধ, এটিআর ভিত্তিক গতিশীল বন্ধ এবং ট্র্যাকিং বন্ধ, এবং একটি মিনিমাম ট্রেডিং ফিল্টার, কার্যকরভাবে প্রত্যাহার নিয়ন্ত্রণ করে।

কৌশলগত ঝুঁকি

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

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

  3. গণনার জটিলতা৩ডি রৈখিক মানচিত্রের বক্স বিভাজক এবং কক্ষ গণনা রিয়েল-টাইমে সম্পাদনের জন্য উচ্চতর কম্পিউটিং সংস্থান প্রয়োজন হতে পারে, যা সম্পাদন বিলম্বের কারণ হতে পারে, বিশেষত স্বল্প সময়ের ফ্রেমে।

  4. অ্যালগরিদমের ঝুঁকি অনুমান: কৌশলটি এমন একটি অনুমানের উপর ভিত্তি করে তৈরি করা হয়েছে যে, মার্কেট প্যাটার্নকে কার্যকরভাবে ক্যাপচার করতে পারে, কিন্তু বাজারের কাঠামো সময়ের সাথে সাথে পরিবর্তিত হতে পারে, যা এই অনুমানকে অকার্যকর করে তোলে।

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

  6. ইতিহাসের ঝুঁকিযদিও কৌশলটি একাধিক সূচকের সুবিধা নিয়ে গঠিত, তবুও ঐতিহাসিক তথ্যের সাথে অতিরিক্ত সামঞ্জস্যের ঝুঁকি রয়েছে, যা ভবিষ্যতে বাজারের অবস্থার পরিবর্তনের ফলে কার্যকারিতা হ্রাস করতে পারে।

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

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

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

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

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

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

  5. মাল্টি-অ্যাসেট সম্পর্ক বিশ্লেষণ: সংশ্লিষ্ট বাজার (যেমন সূচক, সংশ্লিষ্ট শেয়ার বা পণ্য) সম্পর্কিত তথ্য একত্রিত করা, যখন একাধিক সংশ্লিষ্ট বাজার একমত সংকেত দেয় তখন লেনদেনের দৃঢ়তা বৃদ্ধি করা।

  6. অস্থিরতা পূর্বাভাস মডেল: উদ্বায়ীতা পূর্বাভাস কম্পোনেন্ট বিকাশ, আগাম ট্রিগার এবং ঝুঁকি পরামিতি সামঞ্জস্য, আসন্ন উদ্বায়ী পরিবেশের জন্য প্রস্তুত।

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

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

সারসংক্ষেপ

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

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

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

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

// @version=6
strategy("Canuck Trading Traders Strategy [Candle Entropy Edition]", overlay=true, default_qty_value = 10)
// Note: Set Properties "Order size" to "100% of equity" for equity-based sizing or fixed contracts (e.g., 100).

// === CETP-Plus Settings ===
cetp_window = input.int(5, "CETP Window", minval=1, maxval=20, group="CETP-Plus Settings")
cetp_bins = input.int(3, "CETP Bins per Dimension", minval=1, maxval=10, group="CETP-Plus Settings")
long_threshold = input.float(0.1, "Long Threshold", minval=0.01, maxval=5.0, step=0.01, group="CETP-Plus Settings")
short_threshold = input.float(-0.1, "Short Threshold", minval=-0.8, maxval=-0.01, step=0.01, group="CETP-Plus Settings")
cetp_k = input.float(0.8, "CETP Momentum Weight", minval=0.1, maxval=5.0, step=0.1, group="CETP-Plus Settings")
mom_scale = input.float(6.0, "Momentum Scale", minval=1.0, maxval=20.0, step=1.0, group="CETP-Plus Settings")
body_weight = input.float(1.0, "Body Ratio Weight", minval=0.0, maxval=2.0, step=0.1, group="CETP-Plus Settings")
upper_weight = input.float(0.8, "Upper Wick Ratio Weight", minval=0.0, maxval=2.0, step=0.1, group="CETP-Plus Settings")
lower_weight = input.float(1.0, "Lower Wick Ratio Weight", minval=0.0, maxval=2.0, step=0.1, group="CETP-Plus Settings")
decay_factor = 0.8  // Hardcoded decay for exponential weighting (recent candles weighted more)

// === Trade Settings ===
min_score_strength = input.float(0.03, "Min CETP Score Strength", minval=0.0, maxval=5, step=0.01, group="Trade Settings")
stop_loss_pct = input.float(0.5, "Stop Loss (%)", minval=0.1, maxval=5.0, step=0.1, group="Trade Settings")
atr_mult = input.float(3.0, "ATR Multiplier", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings")
trail_mult = input.float(5.0, "Trailing ATR Mult", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings")
trail_offset_pct = input.float(1.0, "Trail Start Offset (%)", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings")
min_price_move_mult = input.float(2.0, "Min Price Move ATR Mult (to avoid tiny trades)", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings")  // Filter tiny moves

// Indicators (ATR for stops/trails only)
atr = nz(ta.atr(14), 0.0)

// Volatility Filter (CV < 15% to avoid chop)
vol_threshold = ta.stdev(close, 20) / ta.sma(close, 20) * 100
trade_allowed = vol_threshold < 15.0

// Minimum Price Move Filter (candle range > ATR multiple, floored by min tick)
min_price_move = math.max(atr * min_price_move_mult, syminfo.mintick * 10)  // Avoid sub-penny moves; 10x tick for robustness
price_move_condition = (high - low) > min_price_move  // Fixed: Use high - low instead of ta.range()

// CETP-Plus Calculation (Blended EMA, RSI, ATR, ADX theses)
epsilon = 1e-5
body_ratio = (close - open) / (high - low + epsilon) * body_weight
upper_wick_ratio = (high - math.max(open, close)) / (high - low + epsilon) * upper_weight
lower_wick_ratio = (math.min(open, close) - low) / (high - low + epsilon) * lower_weight

// EMA-like weighting: Exponentially weight recent candles with fixed-size rolling arrays
var float[] body_arr = array.new_float(cetp_window, 0.0)
var float[] upper_arr = array.new_float(cetp_window, 0.0)
var float[] lower_arr = array.new_float(cetp_window, 0.0)

// Shift and decay older values, add new at the end
for i = 0 to cetp_window - 2
    array.set(body_arr, i, array.get(body_arr, i + 1) * decay_factor)
    array.set(upper_arr, i, array.get(upper_arr, i + 1) * decay_factor)
    array.set(lower_arr, i, array.get(lower_arr, i + 1) * decay_factor)

array.set(body_arr, cetp_window - 1, body_ratio)
array.set(upper_arr, cetp_window - 1, upper_wick_ratio)
array.set(lower_arr, cetp_window - 1, lower_wick_ratio)

// Volatility scaling (ATR thesis)
bin_size = 2.0 / cetp_bins * (1 + atr / ta.sma(atr, 14))
hist_size = cetp_bins * cetp_bins * cetp_bins
var int[] hist = array.new_int(hist_size, 0)
array.fill(hist, 0)

for i = 0 to cetp_window - 1
    body_val = array.get(body_arr, i)
    upper_val = array.get(upper_arr, i)
    lower_val = array.get(lower_arr, i)
    
    body_bin = math.max(0, math.min(cetp_bins - 1, math.floor((body_val + 1) / bin_size)))
    upper_bin = math.max(0, math.min(cetp_bins - 1, math.floor((upper_val + 1) / bin_size)))
    lower_bin = math.max(0, math.min(cetp_bins - 1, math.floor((lower_val + 1) / bin_size)))
    
    bin_idx = body_bin * (cetp_bins * cetp_bins) + upper_bin * cetp_bins + lower_bin
    array.set(hist, bin_idx, array.get(hist, bin_idx) + 1)

entropy = 0.0
for i = 0 to hist_size - 1
    count = array.get(hist, i)
    p = count / cetp_window
    if p > 0
        entropy := entropy - p * math.log(p)

max_entropy = math.log(hist_size)
norm_entropy = max_entropy > 0 ? entropy / max_entropy : 0.0

// RSI-like momentum bias
avg_gain = ta.rma(math.max(close - close[1], 0), cetp_window)
avg_loss = ta.rma(math.max(close[1] - close, 0), cetp_window)
rsi_bias = avg_loss > 0 ? avg_gain / avg_loss : 1.0
momentum = ta.mom(close, cetp_window) / (close[cetp_window] != 0 ? close[cetp_window] : 1e-5)
momentum_adj = momentum * (1 + rsi_bias)

// ADX-like trend strength (automated and symmetric for bull/bear)
di_plus = ta.rma(math.max(high - high[1], 0), cetp_window) / atr
di_minus = ta.rma(math.max(low[1] - low, 0), cetp_window) / atr
trend_strength = di_plus > di_minus ? 1.2 : (di_minus > di_plus ? 1.2 : 1.0)

// CETP-Plus Score (optimized: no abs on momentum_adj to preserve sign for better short detection)
avg_body = nz(array.avg(body_arr), 0.0)
raw_score = avg_body * (1 - norm_entropy) * (cetp_k + momentum_adj * mom_scale)
cetp_score = nz(raw_score * trend_strength, 0.0)

// Position State
var float entry_price = na
var int bars_held = 0

if barstate.isconfirmed
    bars_held := strategy.position_size != 0 ? bars_held + 1 : 0

// Trade Logic: Rely solely on current CETP score for entries/exits/reversals, with min price move filter
if bar_index >= cetp_window and math.abs(cetp_score) > min_score_strength and trade_allowed and price_move_condition
    if cetp_score > long_threshold
        if strategy.position_size < 0
            strategy.close("Short", comment="Reverse to Long")
        if strategy.position_size <= 0
            strategy.entry("Long", strategy.long)
            entry_price := close
            sl = entry_price * (1 - stop_loss_pct / 100) - atr * atr_mult
            strategy.exit("Long Exit", "Long", stop=sl, trail_points=atr * trail_mult * syminfo.pointvalue, trail_offset=entry_price * (trail_offset_pct / 100))
            bars_held := 1
    else if cetp_score < short_threshold
        if strategy.position_size > 0
            strategy.close("Long", comment="Reverse to Short")
        if strategy.position_size >= 0
            strategy.entry("Short", strategy.short)
            entry_price := close
            sl = entry_price * (1 + stop_loss_pct / 100) + atr * atr_mult
            strategy.exit("Short Exit", "Short", stop=sl, trail_points=atr * trail_mult * syminfo.pointvalue, trail_offset=entry_price * (trail_offset_pct / 100))
            bars_held := 1