ট্রিপল মাইক্রো-চ্যানেল মোমেন্টাম প্রোবাবিলিটি মাল্টি-ফ্যাক্টর ট্রেডিং কৌশল

ATR MC EOD TP SL RR
সৃষ্টির তারিখ: 2025-05-20 14:16:22 অবশেষে সংশোধন করুন: 2025-05-20 14:16:22
অনুলিপি: 0 ক্লিকের সংখ্যা: 450
2
ফোকাস
319
অনুসারী

ট্রিপল মাইক্রো-চ্যানেল মোমেন্টাম প্রোবাবিলিটি মাল্টি-ফ্যাক্টর ট্রেডিং কৌশল ট্রিপল মাইক্রো-চ্যানেল মোমেন্টাম প্রোবাবিলিটি মাল্টি-ফ্যাক্টর ট্রেডিং কৌশল

ওভারভিউ

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

কৌশল নীতি

ট্রিপল মাইক্রোক্যানেল ডায়নামিক সম্ভাব্যতা মাল্টিফ্যাক্টর ট্রেডিং কৌশলটির মূল নীতিটি হ’ল বাজারগুলিতে তিনটি ক্রমাগত কে-লাইন গঠনের একমুখী গতিশীল চ্যানেল সনাক্ত করা। কৌশলটি নিম্নলিখিত পদক্ষেপের মাধ্যমে কাজ করেঃ

  1. মাইক্রো-চ্যানেল সনাক্তকরণকৌশলঃ প্রথমে ক্রমাগত তিনটি সম-মুখী K লাইন খুঁজুন ((সমস্তই বাণ বা সমস্তই ঋণ), যা নির্দেশ করে যে বাজারটি সম্ভবত স্বল্পমেয়াদী একমুখী প্রবণতার মধ্যে রয়েছে।

  2. মাল্টি-ফ্যাক্টর স্কোরিং সিস্টেম: দশটি মূল কারণের উপর ভিত্তি করে আকারের গুণমানের পরিমাণগত মূল্যায়ন করা হয়েছেঃ

    • ফ্যাক্টর ১ঃ তিনটি K লাইনের আকারের একতা
    • ফ্যাক্টর ২ঃ উপরের/নীচের ছায়া ন্যূনতম করা
    • ফ্যাক্টর ৩ঃ ক্ষুদ্র ফাঁক বিদ্যমান ((মাল্টিহেডের বর্তমান K লাইনটির নিম্নতম পয়েন্টটি তিনটি K লাইনের পূর্বের উচ্চতম পয়েন্টের চেয়ে বেশি)
    • ফ্যাক্টর ৪ঃ কে-লাইন সত্তার মধ্যে ফাঁক
    • ফ্যাক্টর ৫ঃ ক্লোজিং প্রাইস রিলেশন ((মাল্টিহেডের বর্তমান ক্লোজিং প্রাইস পূর্ববর্তী কে-লাইনের উচ্চতম পয়েন্টের চেয়ে বেশি)
    • ফ্যাক্টর ৬ঃ উচ্চতর নিম্ন/নিম্ন উচ্চতা
    • ফ্যাক্টর ৭ঃ ওপেনিং প্রাইস পূর্ববর্তী K লাইন এর ওপেন প্রাইস থেকে বেশি/কম
    • ফ্যাক্টর ৮ঃ নিম্নে/উপরে কোন লাইন নেই
    • ফ্যাক্টর ৯ঃ কোন ক্রস স্টার বা বিপরীত K-রেখা
  3. সম্ভাব্যতা স্কোর: বেসিক বিজয়ী হার (70%) এবং ফ্যাক্টর স্কোরের উপর ভিত্তি করে, প্রতিটি ট্রেডিং সিগন্যালের প্রত্যাশিত বিজয়ী হার গণনা করা হয়েছে।

  4. প্রবেশের শর্ত: যখন সামগ্রিক স্কোর পূর্বনির্ধারিত থ্রেশহোল্ড (<50%) অতিক্রম করে, তখন সিস্টেমটি একটি লেনদেনের সংকেত দেয়।

  5. ঝুঁকি ব্যবস্থাপনা

    • মাল্টি-হেড এন্ট্রি পয়েন্টগুলি টার্গেট কে লাইনের উচ্চতম পয়েন্ট বা ক্লোজ-আউট মূল্য ((উপরের শ্যাডো লাইনের আকারের উপর নির্ভর করে))
    • স্টপ লস সেট করুন শুরুতে K লাইনের ওপেনিং প্রাইসের নিচে
    • টার্গেট মূল্যের উপর ভিত্তি করে রিস্ক-রিটার্ন অনুপাত
  6. পজিশন ব্যবস্থাপনা: অ্যাকাউন্টের তহবিল এবং প্রতি লেনদেনের ঝুঁকির অনুপাতের উপর ভিত্তি করে (ডিফল্ট 1%) ।

  7. প্রস্থান ব্যবস্থা: ট্র্যাকিং স্টপ লস কৌশল ব্যবহার করুন, লক্ষ্যমাত্রা অর্জনের পরে লাভের কিছু অংশ লক করুন, পাশাপাশি ফিক্সড স্টপ লস এবং দিনের মধ্যে বাধ্যতামূলক প্লেইন সময় সেট করুন।

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

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

  1. বস্তুনিষ্ঠ পরিমাণগত রেটিংকৌশলঃ প্রতিটি ট্রেডিং সিগন্যালকে 10 টি ফ্যাক্টর দ্বারা পরিমাণগতভাবে রেট দেওয়া, স্বতন্ত্র বিচারকে হ্রাস করা এবং লেনদেনের ধারাবাহিকতা এবং উদ্দেশ্যকে উন্নত করা।

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

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

  4. নিখুঁত ঝুঁকি নিয়ন্ত্রণ: প্রতিটি লেনদেনের একটি সুস্পষ্ট স্টপ লস পজিশন রয়েছে এবং অ্যাকাউন্টের তহবিলের একটি নির্দিষ্ট শতাংশের মধ্যে ঝুঁকিকে সীমাবদ্ধ করে গতিশীল পজিশন অ্যাডজাস্টমেন্টের মাধ্যমে।

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

  6. ভিজ্যুয়াল প্রতিক্রিয়াকৌশলঃ একটি চার্টে বিস্তারিত ট্রেডিং সিগন্যাল মার্কিং এবং ফ্যাক্টর স্কোর প্রদান করে, যাতে ট্রেডাররা প্রতিটি সিগন্যালের গুণমানকে স্বজ্ঞাতভাবে বুঝতে পারে।

  7. সঠিক সময় ব্যবস্থাপনা

কৌশলগত ঝুঁকি

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

  1. অতিরিক্ত ফিট হওয়ার ঝুঁকি১০-ফ্যাক্টর ওজনের এবং থ্রেশহোল্ডের সেটিংগুলি ঐতিহাসিক তথ্যের সাথে অত্যধিক মিলিত হওয়ার ঝুঁকি রয়েছে, যা ভবিষ্যতে খারাপ পারফরম্যান্সের কারণ হতে পারে।

  2. কম তরলতা বাজার ঝুঁকি: কম তরলতাযুক্ত বাজারে, প্রবেশ এবং প্রস্থান মূল্যের স্লাইড পয়েন্ট থাকতে পারে যা প্রকৃত লেনদেনের ফলাফলকে প্রভাবিত করে।

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

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

  5. সংকেত দুর্লভতা: একাধিক কঠোর শর্ত পূরণ করার কারণে, কৌশলটি কিছু সময়ের মধ্যে খুব কম ট্রেডিং সিগন্যাল তৈরি করতে পারে, যা সামগ্রিক রিটার্নকে প্রভাবিত করে।

  6. গণনাগত জটিলতামাল্টি ফ্যাক্টর অ্যাসেসমেন্ট কৌশলগত জটিলতা বৃদ্ধি করে এবং রিয়েল-টাইম ট্রেডিংয়ের ক্ষেত্রে বিলম্বিত চ্যালেঞ্জের সম্মুখীন হতে পারে।

এই ঝুঁকিগুলি হ্রাস করার উপায়গুলির মধ্যে রয়েছেঃ

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

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

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

  1. ফ্যাক্টর ওজন অপ্টিমাইজেশানএই অপ্টিমাইজেশানটি কিছু গুরুত্বপূর্ণ ফ্যাক্টরকে আরও বেশি ওজন দিতে পারে এবং অন্যদের প্রভাবকে হ্রাস করতে পারে।

  2. বাজার পরিবেশ ফিল্টার: প্রবণতা শক্তি বা অস্থিরতা পরিমাপের মতো বাজার পরিবেশের মূল্যায়ন উপাদান যুক্ত করুন এবং কেবলমাত্র অনুকূল বাজার পরিস্থিতিতে লেনদেন করুন। এটি ADX, অস্থিরতা শতাংশ এবং অন্যান্য সূচক যুক্ত করে করা যেতে পারে, যাতে প্রতিকূল বাজার পরিস্থিতিতে লেনদেনের সংকেত তৈরি করা যায় না।

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

  4. স্বনির্ধারিত প্যারামিটার: স্থির পরামিতি (যেমন ATR দৈর্ঘ্য, রিস্ক-রিটার্ন অনুপাত) বাজারের অবস্থার উপর ভিত্তি করে গতিশীল সমন্বয় পরামিতি রূপান্তর করুন। উদাহরণস্বরূপ, উচ্চ অস্থিরতার বাজারে রিস্ক-রিটার্ন অনুপাত বাড়ানো যেতে পারে, কম অস্থিরতার বাজারে হ্রাস করা যায়।

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

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

  7. ইন্টিগ্রেটেড মেশিন লার্নিং: মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে কোন সিগন্যালগুলি আরও সফল হওয়ার সম্ভাবনা রয়েছে তা পূর্বাভাস দিতে, প্রতিটি লেনদেনের সংকেতকে আরও সুনির্দিষ্ট সম্ভাব্যতা স্কোর বরাদ্দ করা যায়। উদাহরণস্বরূপ, আরও জটিল প্যাটার্নগুলি বের করার জন্য, র্যান্ডম ফরেস্ট বা গ্রেডিয়েন্ট লিফট ট্রি মডেল ব্যবহার করে historicalতিহাসিক সংকেতগুলিকে শ্রেণিবদ্ধ করা যেতে পারে।

সারসংক্ষেপ

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

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

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

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

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



//@version=5
strategy("Ali 3-Bar MC v6 10 Factor", overlay=true, pyramiding=0)

// === INPUTS ===
showLabels = input.bool(true, title="Show Entry Labels")
rewardMultiple = input.float(1, title="Reward : Risk")


atrLength = input.int(4, title="ATR Length")
var int bullSignalBarIndex = na
var int bearSignalBarIndex = na

// === ATR ===
atr = ta.sma(ta.tr(true), atrLength)

signalTimeout = 1  // 例如3根bar




// === 风险控制参数 ===
riskPerTradePercent = input.float(1, title="每笔风险占比 (%)")  // 如 1%
pointValue = input.float(5, title="每点价值,例如 ES 是 $50/pt")

// 10 Factor 
//@version=5

baseWinRate = 0.70
tick = syminfo.mintick
tolerance = 0.2  // 用于判断 bar 大小一致的容忍比例


// 获取3根 bar 的关键数据
body(i) => math.abs(close[i] - open[i])
barSize(i)  => math.abs(high[i] - low[i])
upperTailRatio(i) => (high[i] - math.max(close[i], open[i])) / barSize(i)
lowerTailRatio(i) => (math.min(close[i], open[i]) - low[i])/barSize(i)

upperTailTolerance = 0.15
lowerTailTolerance = 0.15
bodyTolerance = 0.7
barUniformTolerance = 0.3
win_threshold = 0.5
// 检测 BL MC(3-bar micro channel 向上)
isBLMC = close[2] > open[2] and close[1] > open[1] and close > open

// === 各项因子判断 ===
//f1_uniform = math.max(barSize(2)/barSize(1), barSize(1)/barSize(2)) < 1 + barUniformTolerance and  math.max(barSize(1)/barSize(0), barSize(1)/barSize(0)) < 1 + barUniformTolerance
f1_uniform = math.max(barSize(2)/barSize(0) , barSize(0)/barSize(2)) < 1 + barUniformTolerance 


f2_mostCOH = ((upperTailRatio(2) < upperTailTolerance? 1:0) +  (upperTailRatio(1) < upperTailTolerance? 1:0)  +  (upperTailRatio(0) < upperTailTolerance? 1:0) )>=2
f3_microGap = low > high[2] 
f4_tickGap = open > close[1] or open[1] > close[2] 
f5_closesAboveHigh = close > high[1] and close[1] > high[2]
f6_higherLows = low > low[1] and low[1] > low[2]
f7_opensAbovePriorClose = open >= close[1] or open[1] >= close[2]
f8_noLowerTail =  ((lowerTailRatio(2) < lowerTailTolerance? 1:0) +  (lowerTailRatio(1) < lowerTailTolerance? 1:0)  +  (lowerTailRatio(0) < lowerTailTolerance? 1:0) )>=1
f9_noDojiOrOpposite  =body(2) /  barSize(2) > bodyTolerance and body(1) /  barSize(1) > bodyTolerance and body(0) /  barSize(0) > bodyTolerance

// === 总评分计算 ===
score = 0
score := score - (f1_uniform ? 0 : 1)
score := score - (f2_mostCOH ? 0 : 1)
score := score - (f3_microGap ? 0 : 4)
score := score - (f4_tickGap ? 0 : 1)
score := score - (f5_closesAboveHigh ? 0 : 1)
score := score - (f6_higherLows ? 0 : 1)
score := score - (f7_opensAbovePriorClose ? 0 : 1)
score := score - (f8_noLowerTail ? 0 : 1)
score := score - (f9_noDojiOrOpposite ? 0 : 1)

winProb = baseWinRate + (score * 0.05)  // 每个因子加5%,最高 1.20

// === 图上标记 ===
if isBLMC


    labelText = str.tostring(winProb * 100, "#.##") + "%\n" +        "1️⃣ uniform: " + str.tostring(f1_uniform) + "\n" +         "2️⃣ mostCOL: " + str.tostring(f2_mostCOH) + "\n" +        "3️⃣ microGap: " + str.tostring(f3_microGap) + "\n" +        "4️⃣ tickGap: " + str.tostring(f4_tickGap) + "\n" +        "5️⃣ closes<priorLow: " + str.tostring(f5_closesAboveHigh) + "\n" +        "6️⃣ lowerHighs: " + str.tostring(f6_higherLows) + "\n" +        "7️⃣ opensBelowClose: " + str.tostring(f7_opensAbovePriorClose) + "\n" +        "8️⃣ noLowerTail: " + str.tostring(f8_noLowerTail) + "\n" +        "9️⃣ noDoji: " + str.tostring(f9_noDojiOrOpposite)    ,
    label.new(        bar_index,         low,         text=labelText,         style=label.style_label_up,         color=color.new(color.green, 0),         textcolor=color.white,         size=size.small    )



// === Ali BULL MC ===


isAliBull =  isBLMC and  winProb>=win_threshold

// === 检测 Bear Micro Channel ===
isBRMC = close[2] < open[2] and close[1] < open[1] and close < open

// === Bear 各项因子 ===
br_f1_uniform = math.max(barSize(2)/barSize(0) , barSize(0)/barSize(2)) < 1 + barUniformTolerance 
br_f2_mostCOL = ((lowerTailRatio(2) < lowerTailTolerance ? 1:0) +  (lowerTailRatio(1) < lowerTailTolerance ? 1:0) +  (lowerTailRatio(0) < lowerTailTolerance ? 1:0)) >= 2
br_f3_microGap = low[2] > high 
br_f4_tickGap = open < close[1] or open[1] < close[2]
br_f5_closesBelowLow = close < low[1] and close[1] < low[2]
br_f6_lowerHighs = high < high[1] and high[1] < high[2]
br_f7_opensBelowPriorClose = open < close[1] or open[1] < close[2]
br_f8_noUpperTail = ((upperTailRatio(2) < upperTailTolerance ? 1:0) +  (upperTailRatio(1) < upperTailTolerance ? 1:0) +  (upperTailRatio(0) < upperTailTolerance ? 1:0)) >= 1
br_f9_noDojiOrOpposite = body(2)/barSize(2) > bodyTolerance and body(1)/barSize(1) > bodyTolerance and body(0)/barSize(0) > bodyTolerance

// === Bear 总评分计算 ===
br_score = 0
br_score := br_score - (br_f1_uniform ? 0 : 1)
br_score := br_score - (br_f2_mostCOL ? 0 : 1)
br_score := br_score - (br_f3_microGap ? 0 : 4)
br_score := br_score - (br_f4_tickGap ? 0 : 1)
br_score := br_score - (br_f5_closesBelowLow ? 0 : 1)
br_score := br_score - (br_f6_lowerHighs ? 0 : 1)
br_score := br_score - (br_f7_opensBelowPriorClose ? 0 : 1)
br_score := br_score - (br_f8_noUpperTail ? 0 : 1)
br_score := br_score - (br_f9_noDojiOrOpposite ? 0 : 1)

br_winProb = baseWinRate + (br_score * 0.05)

// === Bear 图上标记 ===
if isBRMC

    labelText = str.tostring(br_winProb * 100, "#.##") + "%\n" +        "1️⃣ uniform: " + str.tostring(br_f1_uniform) + "\n" +         "2️⃣ mostCOL: " + str.tostring(br_f2_mostCOL) + "\n" +        "3️⃣ microGap: " + str.tostring(br_f3_microGap) + "\n" +        "4️⃣ tickGap: " + str.tostring(br_f4_tickGap) + "\n" +        "5️⃣ closes<priorLow: " + str.tostring(br_f5_closesBelowLow) + "\n" +        "6️⃣ lowerHighs: " + str.tostring(br_f6_lowerHighs) + "\n" +        "7️⃣ opensBelowClose: " + str.tostring(br_f7_opensBelowPriorClose) + "\n" +        "8️⃣ noUpperTail: " + str.tostring(br_f8_noUpperTail) + "\n" +        "9️⃣ noDoji: " + str.tostring(br_f9_noDojiOrOpposite)    ,
    label.new(        bar_index,         low,         text=labelText,         style=label.style_label_up,         color=color.new(color.red, 0),         textcolor=color.white,         size=size.small    )







// === Ali BEAR MC ===



isAliBear = isBRMC  and br_winProb >=win_threshold

// === ENTRY/RISK/TARGET ===
bullEntry = (upperTailRatio(0)<0.1 ? close :high + tick) 
bullStop =  open[2] - tick
bullRisk = bullEntry - bullStop
bullTarget = bullEntry + bullRisk * rewardMultiple

bearEntry = (lowerTailRatio(0)<0.1? close :low - tick) 
bearStop = open[2]  + tick
bearRisk =  bearStop - bearEntry 
bearTarget = bearEntry - bearRisk * rewardMultiple

// === 动态仓位计算(基于账户资金和止损大小) ===
riskAmount = strategy.equity * (riskPerTradePercent / 100)
bullContracts = math.max(math.floor(riskAmount / (bullRisk * pointValue)),1)
bearContracts = math.max(math.floor(riskAmount / (bearRisk * pointValue)),1)


// === STATE ===
var float bullGapCloseLine = na
var float bearGapCloseLine = na
var bool inLong = false
var bool inShort = false
var bool bullStructureExitArmed = false
var bool bearStructureExitArmed = false
var float lastBullOpen = na
var float lastBearOpen = na
var line currentTPLine = na
var line currentSLLine = na
var float fixedBullStop = na
var float fixedBullTarget = na
var float fixedBearStop = na
var float fixedBearTarget = na

canTradeNow = not na(time(timeframe.period, "0930-1545", "America/New_York"))  // 只在盘中前6小时交易




// === BULL ENTRY ===
if isAliBull and na(bullSignalBarIndex) and canTradeNow and strategy.position_size  == 0
    strategy.entry("Ali Long", strategy.long, stop=bullEntry, qty=bullContracts)
    strategy.exit("Close Long", from_entry = "Ali Long", stop = bullStop, trail_price = bullTarget, trail_offset =    atrLength )
    bullSignalBarIndex := bar_index
    fixedBullStop := bullStop
    fixedBullTarget := bullTarget

// === BEAR ENTRY ===
if isAliBear and na(bearSignalBarIndex) and canTradeNow and strategy.position_size  == 0
    strategy.entry("Ali Short", strategy.short, stop=bearEntry, qty=bearContracts)
    strategy.exit("Close Short", from_entry = "Ali Short", stop = bearStop,trail_price = bearTarget, trail_offset =    atrLength)
    bearSignalBarIndex := bar_index
    fixedBearStop := bearStop
    fixedBearTarget := bearTarget





// === RESET ===
if strategy.position_size != 0
    bullSignalBarIndex := na
    bearSignalBarIndex := na

if not na(bullSignalBarIndex) and (bar_index - bullSignalBarIndex >= signalTimeout) and strategy.opentrades == 0
    strategy.cancel("Ali Long")
    bullSignalBarIndex := na
    fixedBullStop := na
    fixedBullTarget := na

if not na(bearSignalBarIndex) and (bar_index - bearSignalBarIndex >= signalTimeout) and strategy.opentrades == 0
    strategy.cancel("Ali Short")
    bearSignalBarIndex := na
    fixedBearStop := na
    fixedBearTarget := na



eodTime = timestamp("America/New_York", year, month, dayofmonth, 15, 55)

if time >= eodTime and strategy.position_size != 0
    strategy.close_all(comment="EOD Exit")
    label.new(bar_index, close, "Exit: EOD", style=label.style_label_down, color=color.gray, textcolor=color.white, size=size.small)
    bearSignalBarIndex := na
    bullSignalBarIndex:=na
    fixedBearStop := na
    fixedBearTarget := na


plot(fixedBearTarget, title="Bull TP", color=color.green, style=plot.style_linebr)
plot(fixedBearStop, title="Bull SL", color=color.red, style=plot.style_linebr)