মাল্টি-ইন্ডিকেটর ডায়নামিক ট্রেন্ড ট্রেডিং কৌশল: সুপারট্রেন্ড, এডিএক্স এবং লিকুইডিটি ডেল্টা ব্যাপক বিশ্লেষণ সিস্টেম

PSAR supertrend ADX Liquidity Delta ATR 趋势交易 波段策略 风险管理 技术指标
সৃষ্টির তারিখ: 2025-05-15 16:37:32 অবশেষে সংশোধন করুন: 2025-05-15 16:37:32
অনুলিপি: 1 ক্লিকের সংখ্যা: 476
2
ফোকাস
319
অনুসারী

মাল্টি-ইন্ডিকেটর ডায়নামিক ট্রেন্ড ট্রেডিং কৌশল: সুপারট্রেন্ড, এডিএক্স এবং লিকুইডিটি ডেল্টা ব্যাপক বিশ্লেষণ সিস্টেম মাল্টি-ইন্ডিকেটর ডায়নামিক ট্রেন্ড ট্রেডিং কৌশল: সুপারট্রেন্ড, এডিএক্স এবং লিকুইডিটি ডেল্টা ব্যাপক বিশ্লেষণ সিস্টেম

ওভারভিউ

এই কৌশলটি একটি সমন্বিত প্রযুক্তিগত বিশ্লেষণ ট্রেডিং সিস্টেম যা একাধিক সূচককে একত্রিত করে উচ্চ-সম্ভাব্যতাযুক্ত ট্রেডিং সুযোগকে চিহ্নিত করে। এই সিস্টেমটি মূলত সুপারট্রেন্ড সূচককে ট্রেন্ডের দিকনির্দেশের ফিল্টার হিসাবে ব্যবহার করে, ADX ((গড় দিকনির্দেশের সূচক) এর সাথে মিলিত হয়ে ট্রেন্ডের শক্তি নিশ্চিত করে এবং তরল ত্রিভুজ ((Liquidity Delta) বিশ্লেষণের মাধ্যমে ক্রয়-বিক্রয় চাপের ভারসাম্যহীনতা ব্যবহার করে, যাতে বিভিন্ন বাজার পরিবেশে সঠিকভাবে প্রবেশ এবং প্রস্থান সংকেত তৈরি করা যায়। এই কৌশলটি একটি রক্ষণশীল ঝুঁকি ব্যবস্থাপনা পদ্ধতি গ্রহণ করে, একটি নির্দিষ্ট অনুপাতের স্টপ লস (ডিফল্ট 2%) এবং স্টপ লস (ডিফল্ট 4%) সেট করে, যাতে ভাল ঝুঁকি রিটার্ন হার নিশ্চিত করা যায়। এই সিস্টেমটি ক্রিপ্টোকারেন্সি, ফরেক্স স্টক বা ফরেক্স সূচকগুলির জন্য দৈনিক স্তরের তরঙ্গ ব্যবসায়ের জন্য ডিজাইন করা হয়েছে, বিশেষত প্রব

কৌশল নীতি

এই কৌশলটি নিম্নলিখিত চারটি মূল সূচকের সমন্বয়ে কাজ করে ট্রেডিং সিগন্যাল তৈরি করেঃ

  1. সুপার ট্রেন্ড সূচক: প্রধান ট্রেন্ড দিক ফিল্টার হিসাবে, প্রতিক্রিয়াশীলতা এবং নির্ভরযোগ্যতা ভারসাম্য করার জন্য অপ্টিমাইজেশন সেটিং ব্যবহার করা হয়েছেঃ {ফ্যাক্টরঃ3.0; এটিআর চক্রঃ10}। যখন দাম সুপারট্রেন্ড লাইনের উপরে থাকে, তখন এটি একটি উচ্চতর প্রবণতা হিসাবে চিহ্নিত হয়; যখন দাম সুপারট্রেন্ড লাইনের নীচে থাকে, তখন এটি একটি নিম্নমুখী প্রবণতা হিসাবে চিহ্নিত হয়।

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

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

  4. পিএসএআর(ঐচ্ছিক): প্রবণতা পরিবর্তনের অতিরিক্ত নিশ্চিতকরণ হিসাবে, সংকেত ফিল্টারিং হ্রাস করার জন্য ডিফল্টরূপে বন্ধ। যখন দাম পিএসএআর পয়েন্টের উপরে থাকে, তখন এটি একটি উচ্চ প্রবণতা হিসাবে বিবেচিত হয়; যখন দাম পিএসএআর পয়েন্টের নীচে থাকে, তখন এটি একটি নিম্ন প্রবণতা হিসাবে বিবেচিত হয়।

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

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

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

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

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

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

  4. বাস্তবিক লেনদেনের খরচ বিবেচনা করুনকৌশলগত মডেলের মধ্যে কমিশন (০.০৩৫%) এবং স্লাইড পয়েন্ট (২ পয়েন্ট) গণনা অন্তর্ভুক্ত রয়েছে, যা রিটার্নিং ফলাফলকে বাস্তব ট্রেডিং পরিবেশে আরও উপযুক্ত করে তোলে।

  5. ভিজ্যুয়াল ট্রেডিং সিগন্যাল: একটি স্পষ্ট ক্রয়/বিক্রয় সংকেত তীর প্রদান করে, কাস্টমাইজযোগ্য আকারের সাথে, যা চার্টে দ্রুত সনাক্তকরণের জন্য সহজ।

  6. তথ্য প্যানেলডায়নামিকঃ বর্তমান সক্রিয় সূচক এবং ঝুঁকি সেটিংস প্রদর্শন করে, কৌশল চলমান অবস্থা সম্পর্কে তাত্ক্ষণিক প্রতিক্রিয়া প্রদান করে।

  7. সংরক্ষনশীল পজিশন ব্যবস্থাপনাডিফল্টরূপে, প্রতিটি লেনদেনের পজিশনের আকার হিসাবে 5% এর একটি ক্রেডিট ব্যবহার করুন, যাতে অতিরিক্ত লেনদেনের ফলে তহবিলের ক্ষতি না হয়।

কৌশলগত ঝুঁকি

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

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

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

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

  4. ওভার-অপ্টিমাইজেশন ঝুঁকি: ২০২১-২০৩৩ সালের রিটার্নিং সময়কালে ভাল পারফরম্যান্সের অর্থ এই নয় যে এটি ভবিষ্যতের বাজারে একইভাবে কার্যকর হবে, বিশেষত যদি এই প্যারামিটারগুলি ঐতিহাসিক তথ্যের জন্য অতিরিক্ত অপ্টিমাইজেশনের ফলাফল হয়।

সমাধানঃ

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

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

এই কৌশলটি নিম্নলিখিত উপায়ে উন্নত করা যেতে পারেঃ

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

  2. সময় ফিল্টারসময়ভিত্তিক ফিল্টারিং ব্যবস্থা যুক্ত করা হয়েছে, যার ফলে ক্রিপ্টোকারেন্সি বাজার সপ্তাহান্তে বা বৈদেশিক মুদ্রার বাজারে গুরুত্বপূর্ণ অর্থনৈতিক তথ্য প্রকাশের মতো পরিচিত কম তরলতা বা উচ্চ ওঠানামা সময়ে লেনদেন করা এড়ানো যায়।

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

  4. স্মার্ট স্টপ লস স্ট্র্যাটেজিস্থির অনুপাতের স্টপকে এটিআর বা সমর্থন/প্রতিরোধের অবস্থার উপর ভিত্তি করে গতিশীল স্টপ দিয়ে প্রতিস্থাপন করুন, যা বাজারের প্রকৃত ওঠানামাকে আরও ভালভাবে প্রতিফলিত করে এবং বাজারের গোলমাল দ্বারা সৃষ্ট স্টপকে হ্রাস করে।

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

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

  7. মেশিন লার্নিং: মেশিন লার্নিং প্রযুক্তি ব্যবহার করে সূচকগুলির ওজন বন্টনকে অপ্টিমাইজ করুন, বিভিন্ন বাজার পরিবেশের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে প্রতিটি সূচককে চূড়ান্ত সংকেত গঠনে গুরুত্বের সাথে সামঞ্জস্য করুন।

সারসংক্ষেপ

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

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

কৌশল সোর্স কোড
/*backtest
start: 2025-01-27 00:00:00
end: 2025-05-14 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/
// © TiamatCrypto

//@version=6
// ====================================================================================
// Multi-Indicator Swing Trading Strategy [TIAMATCRYPTO]v6
// ====================================================================================
// DESCRIPTION:
// This strategy uses a combination of technical indicators to identify swing trading
// opportunities in various markets. The default settings are optimized for daily
// timeframes on cryptocurrency and forex markets.
// 
// RECOMMENDED DEFAULT SETTINGS:
// - Trading direction: Both (performs well in trending and ranging markets)
// - Position size: 5% (conservative position sizing to manage risk)
// - Stop Loss: 2% (conservative risk management for capital preservation)
// - Take Profit: 4% (realistic profit target with 1:2 risk-reward ratio)
// - Initial capital: $10,000 (realistic starting account size)
// - Timeframe: 2m (best performance on 2m charts)
// - Testing period: 2021-2033 (provides sufficient sample size of trades)
// ====================================================================================

strategy("Multi-Indicator Swing [TIAMATCRYPTO]v6", overlay=true, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=5, 
     initial_capital=10000, commission_type=strategy.commission.percent, 
     commission_value=0.035, slippage=2)

// === BASIC SETTINGS ===
// Backtesting time period set directly in the code for realistic testing
var startDateInput = timestamp("2021-01-01T00:00:00")
var endDateInput = timestamp("2033-12-31T23:59:59")
var inDateRange = time >= startDateInput and time <= endDateInput

// Trading direction settings
tradeDirection = input.string("Both", "Trading Direction", options=["Long Only", "Short Only", "Both"], group="Basic Settings")

// === INDICATOR SWITCHES ===
// PSAR is now disabled by default
usePSAR = input.bool(false, "Use PSAR", group="Indicator Switches")
useSupertrend = input.bool(true, "Use Supertrend", group="Indicator Switches")
useADX = input.bool(true, "Use ADX", group="Indicator Switches")
useLiquidityDelta = input.bool(true, "Use Liquidity Delta", group="Indicator Switches")

// === INDICATOR SETTINGS SECTION ===
// PSAR Settings
// Default PSAR settings are conservative and work well across multiple markets
psarStart = input.float(0.02, "PSAR Initial Value", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarIncrement = input.float(0.02, "PSAR Increment", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarMaximum = input.float(0.2, "PSAR Maximum", minval=0.1, maxval=0.5, step=0.05, group="PSAR Settings")

// Supertrend Settings
// Factor 3.0 provides a good balance between sensitivity and false signals
atrPeriod = input.int(10, "SuperTrend ATR Period", minval=1, maxval=50, group="SuperTrend Settings")
factor = input.float(3.0, "SuperTrend Multiplier", minval=1, maxval=10, step=0.1, group="SuperTrend Settings")

// ADX Settings
// ADX threshold of 25 is standard for identifying strong trends
adxLength = input.int(14, "ADX Length", minval=1, maxval=50, group="ADX Settings")
adxThreshold = input.int(25, "ADX Trend Strength Threshold", minval=10, maxval=50, group="ADX Settings")

// Liquidity Delta Settings
// These settings help identify significant volume imbalances for trend confirmation
deltaLength = input.int(14, "Liquidity Delta Length", minval=1, maxval=50, group="Liquidity Delta")
deltaSmooth = input.int(3, "Delta Smoothing", minval=1, maxval=20, group="Liquidity Delta")
deltaThreshold = input.float(0.5, "Delta Signal Threshold", minval=0.1, maxval=5, step=0.1, group="Liquidity Delta")

// Risk Management Settings
// Conservative settings to ensure capital preservation
useStopLoss = input.bool(true, "Use Stop Loss", group="Risk Management")
useTakeProfit = input.bool(true, "Use Take Profit", group="Risk Management")
stopLossPercent = input.float(2.0, "Stop Loss (%)", minval=0.5, maxval=5, step=0.1, group="Risk Management")
takeProfitPercent = input.float(4.0, "Take Profit (%)", minval=1.0, maxval=10, step=0.1, group="Risk Management")

// Visualization Settings
signalSize = input.string("Normal", "Signal Size", options=["Small", "Normal", "Large"], group="Visualization")
buyColor = input.color(color.green, "Buy Signal Color", group="Visualization")
sellColor = input.color(color.red, "Sell Signal Color", group="Visualization")

// === INDICATOR CALCULATIONS ===
// All remaining indicators set to initialize as true when their respective switch is off

// PSAR Calculations
psar = ta.sar(psarStart, psarIncrement, psarMaximum)
psarCondition = not usePSAR or (close > psar)
psarSellCondition = not usePSAR or (close < psar)

// Supertrend Calculations
[supertrendValue, supertrendDirection] = ta.supertrend(factor, atrPeriod)
supertrendCondition = not useSupertrend or (supertrendDirection > 0)
supertrendSellCondition = not useSupertrend or (supertrendDirection < 0)

// ADX Calculations - custom implementation
trueRange = math.max(high - low, math.abs(high - close[1]), math.abs(low - close[1]))
smoothedTrueRange = ta.sma(trueRange, adxLength)
dmPlus = high > high[1] ? math.max(high - high[1], 0) : 0
dmMinus = low[1] > low ? math.max(low[1] - low, 0) : 0
smoothedDmPlus = ta.sma(dmPlus, adxLength)
smoothedDmMinus = ta.sma(dmMinus, adxLength)
diPlus = smoothedTrueRange > 0 ? 100 * smoothedDmPlus / smoothedTrueRange : 0
diMinus = smoothedTrueRange > 0 ? 100 * smoothedDmMinus / smoothedTrueRange : 0
dx = (diPlus + diMinus) > 0 ? math.abs(diPlus - diMinus) / (diPlus + diMinus) * 100 : 0
adxValue = ta.sma(dx, adxLength)
adxCondition = not useADX or (adxValue > adxThreshold)

// Liquidity Delta Calculations
bidVolume = close < open ? volume : volume * (high - close) / (high - low + 0.000001)
askVolume = close > open ? volume : volume * (close - low) / (high - low + 0.000001)
deltaRaw = bidVolume - askVolume
deltaAvg = ta.sma(deltaRaw, deltaLength)
deltaNormalized = deltaAvg / ta.sma(volume, deltaLength)
deltaSmoothed = ta.ema(deltaNormalized, deltaSmooth)

// Delta Signals
bullishDelta = deltaSmoothed > deltaThreshold
bearishDelta = deltaSmoothed < -deltaThreshold
deltaCondition = not useLiquidityDelta or bullishDelta
deltaSellCondition = not useLiquidityDelta or bearishDelta

// === TRADING LOGIC ===
// Buy signal - combination of all active indicators
buySignal = psarCondition and supertrendCondition and adxCondition and deltaCondition

// Sell signal - combination of all active indicators
sellSignal = psarSellCondition and supertrendSellCondition and adxCondition and deltaSellCondition

// Apply trading direction
isLongAllowed = tradeDirection == "Long Only" or tradeDirection == "Both"
isShortAllowed = tradeDirection == "Short Only" or tradeDirection == "Both"
finalBuySignal = buySignal and isLongAllowed
finalSellSignal = sellSignal and isShortAllowed

// === POSITION ENTRY WITH RISK MANAGEMENT ===
// Conservative position management with defined risk parameters
if finalBuySignal and inDateRange
    strategy.entry("Long", strategy.long)

    // Conditional setting of stop-loss and take-profit
    if useStopLoss or useTakeProfit
        stopLevel = useStopLoss ? close * (1 - stopLossPercent / 100) : na
        takeProfitLevel = useTakeProfit ? close * (1 + takeProfitPercent / 100) : na
        strategy.exit("Long Exit", "Long", stop=stopLevel, limit=takeProfitLevel)

if finalSellSignal and inDateRange
    strategy.entry("Short", strategy.short)

    // Conditional setting of stop-loss and take-profit
    if useStopLoss or useTakeProfit
        stopLevel = useStopLoss ? close * (1 + stopLossPercent / 100) : na
        takeProfitLevel = useTakeProfit ? close * (1 - takeProfitPercent / 100) : na
        strategy.exit("Short Exit", "Short", stop=stopLevel, limit=takeProfitLevel)

// === SIGNAL VISUALIZATION ===
// Creating separate signals for different sizes
buySmallSignal = finalBuySignal and signalSize == "Small"
buyNormalSignal = finalBuySignal and signalSize == "Normal"
buyLargeSignal = finalBuySignal and signalSize == "Large"

sellSmallSignal = finalSellSignal and signalSize == "Small"
sellNormalSignal = finalSellSignal and signalSize == "Normal"
sellLargeSignal = finalSellSignal and signalSize == "Large"

// Draw signals for each size
plotshape(buySmallSignal and inDateRange, title="Buy Small", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.small)
plotshape(buyNormalSignal and inDateRange, title="Buy Normal", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.normal)
plotshape(buyLargeSignal and inDateRange, title="Buy Large", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.large)

plotshape(sellSmallSignal and inDateRange, title="Sell Small", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.small)
plotshape(sellNormalSignal and inDateRange, title="Sell Normal", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.normal)
plotshape(sellLargeSignal and inDateRange, title="Sell Large", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.large)

// === INFORMATION PANEL ===
// Building list of active indicators
indList = ""
indList := usePSAR ? indList + "PSAR, " : indList
indList := useSupertrend ? indList + "SuperT, " : indList
indList := useADX ? indList + "ADX, " : indList
indList := useLiquidityDelta ? indList + "Delta" : indList

// Remove last comma if it exists
if str.endswith(indList, ", ")
    indList := str.substring(indList, 0, str.length(indList) - 2)

// Building risk management text
riskText = ""
if useStopLoss and useTakeProfit
    riskText := str.tostring(stopLossPercent, "#.#") + "% SL, " + str.tostring(takeProfitPercent, "#.#") + "% TP"
else if useStopLoss
    riskText := str.tostring(stopLossPercent, "#.#") + "% SL"
else if useTakeProfit
    riskText := str.tostring(takeProfitPercent, "#.#") + "% TP"
else
    riskText := "Disabled"

// Display strategy information
var table infoTable = table.new(position.top_right, 2, 5, border_width=1)
table.cell(infoTable, 0, 0, "Strategy:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 0, "Multi-Indicator Swing", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 1, "Period:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 1, "2021-2023", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 2, "Direction:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 2, tradeDirection, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 3, "Indicators:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 3, indList, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 4, "Risk Management:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 4, riskText, bgcolor=color.new(color.blue, 90), text_color=color.white)