ADX ফিল্টারের সাথে অ্যাডাপ্টিভ রেঙ্কো মোমেন্টাম ট্রেন্ড অনুসরণ কৌশল

ATR RENKO EMA ADX DI+ DI- Trailing Stop momentum TREND FOLLOWING
সৃষ্টির তারিখ: 2025-07-07 14:16:15 অবশেষে সংশোধন করুন: 2025-07-07 14:16:15
অনুলিপি: 0 ক্লিকের সংখ্যা: 276
2
ফোকাস
319
অনুসারী

ADX ফিল্টারের সাথে অ্যাডাপ্টিভ রেঙ্কো মোমেন্টাম ট্রেন্ড অনুসরণ কৌশল ADX ফিল্টারের সাথে অ্যাডাপ্টিভ রেঙ্কো মোমেন্টাম ট্রেন্ড অনুসরণ কৌশল

কৌশল ওভারভিউ

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

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

কৌশল নীতি

এই কৌশলটি নিম্নলিখিত মূল উপাদানগুলির উপর ভিত্তি করে তৈরি করা হয়েছেঃ

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

  2. EMA ও স্টপ লিনের ক্রস: যখন দাম এবং ইএমএ ট্র্যাক স্টপ লাইন অতিক্রম করে, তখন একটি সম্ভাব্য ট্রেডিং সংকেত উত্পন্ন হয়। বিশেষত, যখন ইএমএ ঊর্ধ্বমুখী স্টপ লাইন অতিক্রম করে তখন একটি কেনার সংকেত উত্পন্ন হয় এবং যখন স্টপ লাইন ঊর্ধ্বমুখী ইএমএ অতিক্রম করে তখন বিক্রয় সংকেত উত্পন্ন হয়।

  3. এডিএক্স ভর ফিল্টার: ADX এবং এর সংশ্লিষ্ট সূচক DI+ এবং DI- এর গণনা করে বাজারের প্রবণতা শক্তি এবং দিকনির্দেশনা মূল্যায়ন করুন। ট্রেডিং সিগন্যালগুলি কেবল তখনই নিশ্চিত করা হয় যখন ADX মানটি সেট থ্রেশহোল্ডের চেয়ে বেশি হয় এবং সংশ্লিষ্ট দিকনির্দেশকটি ((মাল্টিহেড ট্রেডিংয়ের জন্য DI+ প্রয়োজন থ্রেশহোল্ডের চেয়ে বেশি, ফাঁকা ট্রেডিংয়ের জন্য DI- প্রয়োজন থ্রেশহোল্ডের চেয়ে বেশি) পূরণ করে।

  4. রেঙ্কো চার্ট অ্যাপ: কৌশলটি রেঙ্কো চার্টগুলির জন্য বিশেষভাবে ডিজাইন করা হয়েছে, যা রেঙ্কো চার্টগুলির বাজারের গোলমালকে ফিল্টার করার বৈশিষ্ট্যগুলি ব্যবহার করে এবং আরও স্পষ্ট প্রবণতা সংকেত সরবরাহ করে।

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

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

এই কৌশলটির উল্লেখযোগ্য সুবিধাগুলি হলঃ

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

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

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

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

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

  6. রেঙ্কো চার্ট-এর জন্য বিশেষভাবে অপ্টিমাইজ করা হয়েছে: কৌশলটি রেঙ্কো চার্টগুলির জন্য বিশেষভাবে ডিজাইন করা হয়েছে, যা রেঙ্কো চার্টগুলির শব্দ হ্রাস, প্রবণতা হাইলাইট করার বৈশিষ্ট্যগুলিকে পুরোপুরি ব্যবহার করে এবং কৌশলটির প্রবণতা ট্র্যাকিং প্রকৃতির সাথে অত্যন্ত মিলিত হয়।

কৌশলগত ঝুঁকি

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

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

  2. প্রবণতা বিপরীত হওয়ার ঝুঁকি: এডিএক্স ফিল্টার সত্ত্বেও, কৌশলটি শক্তিশালী প্রবণতার হঠাৎ বিপরীত হওয়ার সময় ক্ষতির কারণ হতে পারে। অতিরিক্ত স্টপ শর্ত বা অন্যান্য বিপরীতমুখী সূচকগুলির সাথে মিলিত হয়ে এই ঝুঁকিটি প্রশমিত করা যেতে পারে।

  3. কম তরলতা বাজার ঝুঁকি: কম তরলতার বাজারে, দামের ওঠানামা অনিয়মিত হতে পারে, যার ফলে এটিআর গণনা এবং স্টপ লিনের ট্র্যাকিং সঠিক নয়। এই কৌশলটি প্রচুর তরলতার বাজারে ব্যবহার করার পরামর্শ দেওয়া হয়।

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

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

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

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

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

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

  3. মুনাফা লক্ষ্য এবং ক্ষতি নিয়ন্ত্রণ যোগ করুনবর্তমান কৌশলগুলি প্রারম্ভিক সংকেতের উপর দৃষ্টি নিবদ্ধ করে এবং এটিআর-ভিত্তিক গতিশীল মুনাফা লক্ষ্যমাত্রা এবং আরও সুনির্দিষ্ট স্টপ লস ম্যানেজমেন্ট, যেমন একটি চলমান স্টপ লস বা ব্যাচেলিং লাভের কৌশল যুক্ত করা যেতে পারে।

  4. সমন্বিত মূল্য-মান বিশ্লেষণ: ট্রেডিং পরিমাণ বিশ্লেষণ সংকেত নিশ্চিতকরণের সাথে যুক্ত করুন, কেবলমাত্র ট্রেডিং পরিমাণ নিশ্চিতকরণের প্রবণতা থাকলে ট্রেডিং করুন, সংকেতের গুণমান আরও উন্নত করতে পারে।

  5. মৌসুমী এবং সময় ফিল্টার: ঐতিহাসিক পরিসংখ্যানের উপর ভিত্তি করে মৌসুমী বা নির্দিষ্ট সময়সীমার ফিল্টার যুক্ত করুন, যার ফলে কম কার্যকরী লেনদেনের সময়গুলো এড়ানো যায়।

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

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

সারসংক্ষেপ

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

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

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

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

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

//@version=6
strategy("Renko UT Bot Strategy v6 - ADX Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)

// === Inputs ===
atrPeriod       = input.int(5,    "ATR Period",               minval=1)
atrMult         = input.float(3.5, "ATR Multiplier",           step=0.1)
useAtrSmooth    = input.bool(false,"Use Wilder ATR Smooth")
adaptiveAtr     = input.bool(false,"Adaptive ATR Multiplier")
adaptiveFactor  = input.float(1.0, "Adaptive Mult Factor",    step=0.1)
emaPeriod       = input.int(1,    "EMA Period for Crossover", minval=1)
showStopLine    = input.bool(true, "Show Trailing Stop")
showStopLabel   = input.bool(true, "Show Stop Label")
labelOffset     = input.int(2,    "Label Horizontal Offset",  minval=-10, maxval=10)
labelSizeOpt    = input.string("small","Label Text Size",     options=["tiny","small","normal","large"])
arrowOffset     = input.int(0,    "Arrow Offset",             minval=-10, maxval=10)

// === ADX Filter Inputs ===
adxLen      = input.int(14, "ADX Length", minval=1)
adxThresh   = input.float(20, "ADX Threshold", step=0.1)
diplusThresh= input.float(20, "DI+ Threshold", step=0.1)
diminusThresh=input.float(20, "DI- Threshold", step=0.1)

// === Price & ATR ===
src      = close
atrRaw   = useAtrSmooth ? ta.rma(ta.tr, atrPeriod) : ta.atr(atrPeriod)
mult     = adaptiveAtr    ? atrMult * (atrRaw / ta.atr(atrPeriod)) * adaptiveFactor : atrMult
loss     = atrRaw * mult

// === UT Bot Trailing Stop ===
var float stopLine = na
prevStop        = nz(stopLine[1], src)
stp1            = src > prevStop ? src - loss : src + loss
stp2            = (src < prevStop and src[1] < prevStop) ? math.min(prevStop, src + loss) : stp1
stopLine        := (src > prevStop and src[1] > prevStop) ? math.max(prevStop, src - loss) : stp2

plot(showStopLine ? stopLine : na, title="Trailing Stop", color=color.orange)

// === Signals ===
ema1    = ta.ema(src, emaPeriod)
buyX    = ta.crossover(ema1, stopLine)
sellX   = ta.crossover(stopLine, ema1)

// === Manual ADX and DI Calculation ===
upMove   = high - high[1]
downMove = low[1] - low
plusDM   = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM  = (downMove > upMove and downMove > 0) ? downMove : 0
trur     = ta.rma(ta.tr, adxLen)
plusDI   = 100 * ta.rma(plusDM, adxLen) / trur
minusDI  = 100 * ta.rma(minusDM, adxLen) / trur
dx       = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx      = ta.rma(dx, adxLen)

// === ADX Filter ===
adxFilterLong  = adx > adxThresh and plusDI > diplusThresh
adxFilterShort = adx > adxThresh and minusDI > diminusThresh

// === Filtered Entry Signals ===
signalLongEntry  = buyX and src > stopLine and adxFilterLong
signalShortEntry = sellX and src < stopLine and adxFilterShort

// === Entries & Labels ===
if signalLongEntry
    strategy.entry("Long", strategy.long)
    if showStopLabel
        label.new(bar_index + labelOffset, stopLine,
           text="Stop: " + str.tostring(stopLine, "#.#####"), xloc=xloc.bar_index,
           style=label.style_label_left, color=color.orange, textcolor=color.white,
           size = labelSizeOpt == "tiny"  ? size.tiny  :
                  labelSizeOpt == "small" ? size.small :
                  labelSizeOpt == "normal"? size.normal : size.large)

if signalShortEntry
    strategy.entry("Short", strategy.short)
    if showStopLabel
        label.new(bar_index + labelOffset, stopLine,
           text="Stop: " + str.tostring(stopLine, "#.#####"), xloc=xloc.bar_index,
           style=label.style_label_left, color=color.orange, textcolor=color.white,
           size = labelSizeOpt == "tiny"  ? size.tiny  :
                  labelSizeOpt == "small" ? size.small :
                  labelSizeOpt == "normal"? size.normal : size.large)

plotshape(signalLongEntry,  title="Buy",  style=shape.triangleup,   location=location.belowbar, color=color.green,  offset=arrowOffset)
plotshape(signalShortEntry, title="Sell", style=shape.triangledown, location=location.abovebar, color=color.red,    offset=arrowOffset)

// === Alerts ===
alertcondition(signalLongEntry,  title="UT Bot Long",  message="UT Bot Long Signal")
alertcondition(signalShortEntry, title="UT Bot Short", message="UT Bot Short Signal")
if signalLongEntry
    alert("Long @" + str.tostring(close), alert.freq_once_per_bar_close)
if signalShortEntry
    alert("Short @" + str.tostring(close), alert.freq_once_per_bar_close)