বুদ্ধিমান অস্থিরতা ট্র্যাকিং ডিসিএ কৌশল এবং ডুয়াল-ট্র্যাক স্টপ লস সিস্টেম

EMA ATR DCA USD SO
সৃষ্টির তারিখ: 2025-04-14 18:18:25 অবশেষে সংশোধন করুন: 2025-04-14 18:18:25
অনুলিপি: 0 ক্লিকের সংখ্যা: 521
2
ফোকাস
319
অনুসারী

বুদ্ধিমান অস্থিরতা ট্র্যাকিং ডিসিএ কৌশল এবং ডুয়াল-ট্র্যাক স্টপ লস সিস্টেম বুদ্ধিমান অস্থিরতা ট্র্যাকিং ডিসিএ কৌশল এবং ডুয়াল-ট্র্যাক স্টপ লস সিস্টেম

ওভারভিউ

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

কৌশল নীতি

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

  1. ট্রেন্ড সনাক্তকরণ সিস্টেম: দ্রুত EMA ((ডিফল্ট 9 চক্র) এবং ধীর EMA ((ডিফল্ট 21 চক্র) এর ক্রস ব্যবহার করে সম্ভাব্য উত্থান ট্রেন্ড সনাক্ত করুন। যখন দ্রুত EMA ঊর্ধ্বমুখী ধীর EMA অতিক্রম করে, সিস্টেমটি উত্থান ট্রেন্ডটি নিশ্চিত করে এবং বেসিক প্রবেশের আদেশগুলিকে ট্রিগার করে।

  2. মাল্টি-লেয়ার ডিসিএ অ্যাক্সেস সিস্টেম“এটি একটি অদ্ভুত অভিজ্ঞতা, কিন্তু আমি এটা নিয়ে চিন্তিত।

    • বেসিক অর্ডার (১০০০ মার্কিন ডলার): ইএমএ ক্রস সিগন্যাল নিশ্চিতকরণের সময় অর্ডার করুন
    • সিকিউরিটি অর্ডার 1 ((১২৫০ ডলার): যখন দাম বেস অর্ডারের দাম থেকে নিচে নেমে আসে তখন ট্রিগার করা হয়
    • সিকিউরিটি অর্ডার 2 ((১৭৫০ ডলার): দাম আরও নিচে নেমে গেলে ট্রিগার করা হবে
  3. স্বতঃস্ফূর্ত অভিযোজন প্রক্রিয়া: নিরাপত্তা অর্ডারের ট্রিগার মূল্যটি ATR (অর্ধ-সত্যিকারের পরিসীমা) সূচকের উপর ভিত্তি করে গতিশীলভাবে গণনা করা যেতে পারে, যাতে কৌশলটি বাজারের বর্তমান ওঠানামা অনুযায়ী স্বয়ংক্রিয়ভাবে প্রবেশের অবস্থানকে সামঞ্জস্য করতে পারে। ব্যবহারকারীরা ATR গুণক (ডিফল্ট SO1 1.2xATR, SO2 2.5xATR) বা নির্দিষ্ট শতাংশের পতন (ডিফল্ট SO1 4% এবং SO2 8%) ব্যবহার করে নিরাপত্তা অর্ডারের ট্রিগার পয়েন্ট গণনা করতে পারেন।

  4. দ্বৈত রেল ক্ষতি প্রতিরোধ ব্যবস্থা:

    • স্ট্যান্ডার্ড ট্র্যাকিং স্টপ লসঃ সর্বোচ্চ প্রবেশের মূল্য ট্র্যাকিং, শীর্ষ থেকে স্থির শতাংশ (ডিফল্ট 8%) দূরে সেট করা
    • লভ্যাংশ লক করা ট্র্যাকিং স্টপ লসঃ যখন অবস্থানটি নির্দিষ্ট লভ্যাংশের প্রান্তিকতা (ডিফল্ট 2.5%) পৌঁছে যায় তখন সক্রিয় করা হয়, একটি আরও ঘনিষ্ঠ ট্র্যাকিং শতাংশ ব্যবহার করে (ডিফল্ট 1.5%) অর্জিত লাভকে আরও সক্রিয়ভাবে লক করতে
  5. কুলিং সময় ব্যবস্থা: বেসিক অর্ডার কার্যকর করার পরে শীতল সময়কাল প্রয়োগ করা হয়েছে ((ডিফল্ট 4 কে লাইন), স্বল্প সময়ের মধ্যে অত্যধিক লেনদেন রোধ করা হয়েছে।

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

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

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

  2. তহবিল ব্যবস্থাপনা অপ্টিমাইজেশন: ক্রমবর্ধমান তহবিল বন্টন পদ্ধতির সাথে ((১০০০ ডলার→১২৫০ ডলার→১৭৫০ ডলার), “পিরামিড” পজিশন ম্যানেজমেন্ট নীতির সাথে সামঞ্জস্যপূর্ণ, যা কৌশলটিকে আরও বড় তহবিলের সাথে আরও ভাল গড় প্রবেশের দাম পেতে দেয় যখন দাম কমে যায়।

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

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

  5. অন্তর্ভুক্তি: কৌশলটি জেএসওএন বার্তায় ফর্ম্যাট করা সতর্কতা শর্তাবলী অন্তর্ভুক্ত করে যা তৃতীয় পক্ষের স্বয়ংক্রিয় ট্রেডিং প্ল্যাটফর্মের সাথে একীভূত করতে পারে (যেমন 3 কমাস) এবং সম্পূর্ণ স্বয়ংক্রিয় লেনদেনের বাস্তবায়ন করতে পারে।

কৌশলগত ঝুঁকি

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

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

  2. ঝুঁকি: ক্রমাগত পতনশীল বাজারে, এমনকি যদি সমস্ত সুরক্ষা আদেশ স্থাপন করা হয়, তবে গড় প্রবেশের মূল্য বাজারের দামের চেয়ে অনেক বেশি হতে পারে, যার ফলে দীর্ঘমেয়াদী ক্ষতি হয়। সর্বাধিক ক্ষতির সীমা বা সামগ্রিক অবস্থানের আকারের সীমা নির্ধারণের পরামর্শ দেওয়া হয়।

  3. অতিরিক্ত লেনদেনের ঝুঁকিউষ্ণ বাজারগুলিতে, EMAs ঘন ঘন ক্রস হতে পারে, অতিরিক্ত লেনদেনের কারণ হতে পারে। শীতল সময়কালের একটি অন্তর্নির্মিত প্রক্রিয়া সত্ত্বেও, আরও অপ্টিমাইজেশন বা অতিরিক্ত লেনদেনের ফ্রিকোয়েন্সি সীমাবদ্ধতা যুক্ত করার প্রয়োজন হতে পারে।

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

  5. প্যারামিটার অপ্টিমাইজেশনের অসুবিধা: কৌশলটির একাধিক প্যারামিটারগুলি সর্বোত্তম কার্যকারিতা অর্জনের জন্য একে অপরের সাথে সমন্বয় করতে হবে, প্যারামিটার অপ্টিমাইজেশনের জটিলতা বাড়ায়। রিটার্ন অপ্টিমাইজেশন সরঞ্জাম ব্যবহার করে একটি সম্পূর্ণ প্যারামিটার বিশ্লেষণ করার পরামর্শ দেওয়া হয়েছে।

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

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

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

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

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

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

  5. চক্র অপ্টিমাইজেশান সিস্টেম: স্বয়ংক্রিয় চক্র অপ্টিমাইজেশান ফাংশন তৈরি করা হয়েছে যাতে কৌশলগুলি স্বয়ংক্রিয়ভাবে EMA দৈর্ঘ্য, ATR চক্র এবং অন্যান্য সময় সম্পর্কিত প্যারামিটারগুলিকে সাম্প্রতিক বাজার অবস্থার উপর ভিত্তি করে বাজার অবস্থার পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে।

সারসংক্ষেপ

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

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

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

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

কৌশল সোর্স কোড
/*backtest
start: 2025-03-14 00:00:00
end: 2025-04-02 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy(
     title="BONK/USD (1H) - $4k DCA + Dual Trailing + Date Filter", // Updated Title
     overlay=true,
     initial_capital=4000,
     currency=currency.USD,
     default_qty_type=strategy.fixed,
     default_qty_value=0, // Quantity calculated dynamically based on USD value
     commission_type=strategy.commission.percent, // Example: Add commission settings
     commission_value=0.1 // Example: 0.1% commission
     )

// 1) USER INPUTS (Defaults adjusted for 1H timeframe - REQUIRES BACKTESTING/TUNING)


// --- Trend ---
fastMALen = input.int(9, title="Fast EMA Length (Default for 1H)")
slowMALen = input.int(21, title="Slow EMA Length (Default for 1H)")

// --- Trailing Stops ---
trailStopPerc   = input.float(8.0, title="Standard Trailing Stop (%) (Default for 1H)", minval=0.1) / 100
lockInThreshold = input.float(2.5,  title="Profit Lock-In Trigger (%) (Default for 1H)", minval=0.1) / 100
lockInTrailPct  = input.float(1.5,  title="Lock-In Trail (%) after Trigger (Default for 1H)", minval=0.1) / 100

// --- Safety Orders (SO) ---
useATRSpacing     = input.bool(true, title="Use ATR-Based Spacing?")
atrLength         = input.int(14,   title="ATR Length", minval=1)
atrSo1Multiplier  = input.float(1.2, title="ATR SO1 Multiplier (Default for 1H)", minval=0.1)
atrSo2Multiplier  = input.float(2.5, title="ATR SO2 Multiplier (Default for 1H)", minval=0.1)

// --- Fallback SO Spacing (if not using ATR) ---
fallbackSo1Perc = input.float(4.0,  title="Fallback SO1 Drop (%) (Default for 1H)", minval=0.1) / 100
fallbackSo2Perc = input.float(8.0, title="Fallback SO2 Drop (%) (Default for 1H)", minval=0.1) / 100

// --- Entry Cooldown ---
cooldownBars = input.int(4, "Cooldown Bars After Base Entry (Default for 1H)", minval=0)

// --- Order Sizes in USD ---
baseUsd = input.float(1000.0, title="Base Order Size (USD)", minval=1.0)
so1Usd  = input.float(1250.0, title="Safety Order 1 Size (USD)", minval=1.0)
so2Usd  = input.float(1750.0, title="Safety Order 2 Size (USD)", minval=1.0)

// 2) CALCULATIONS

// --- Trend & Reversal Detection ---
fastMA    = ta.ema(close, fastMALen)
slowMA    = ta.ema(close, slowMALen)
trendUp   = ta.crossover(fastMA, slowMA)
trendDown = ta.crossunder(fastMA, slowMA)

// --- ATR Value ---
atrValue = ta.atr(atrLength)

// 3) BASE ENTRY LOGIC

// Base Buy Signal: EMA crossover
baseBuySignal = trendUp

var int   lastBuyBar     = na // Tracks the bar index of the last base entry
inCooldown = not na(lastBuyBar) and (bar_index - lastBuyBar < cooldownBars)

var float baseEntryPrice = na // Stores the price of the initial base entry for SO calculations

// --- Execute Base Entry ---
// Added 'inDateRange' to the condition
if baseBuySignal and strategy.position_size == 0 and not inCooldown
    baseQty = baseUsd / close // Calculate quantity based on USD
    strategy.entry("Base Order", strategy.long, qty=baseQty, comment="Base Entry")
    baseEntryPrice := close
    lastBuyBar     := bar_index

// 4) SAFETY ORDERS LOGIC

// --- Calculate SO Trigger Prices ---
float so1TriggerPrice = na
float so2TriggerPrice = na

if not na(baseEntryPrice) // Only calculate if a base order has been placed
    so1TriggerPrice := useATRSpacing ?
         (baseEntryPrice - atrValue * atrSo1Multiplier) :
         (baseEntryPrice * (1 - fallbackSo1Perc))

    so2TriggerPrice := useATRSpacing ?
         (baseEntryPrice - atrValue * atrSo2Multiplier) :
         (baseEntryPrice * (1 - fallbackSo2Perc))

// --- Conditions for SO Execution ---
// Added 'inDateRange' check
// Ensure base order exists, price trigger hit, and the specific SO hasn't filled yet
bool so1Condition = not na(baseEntryPrice) and strategy.position_size > 0 and close <= so1TriggerPrice and strategy.opentrades == 1
bool so2Condition = not na(baseEntryPrice) and strategy.position_size > 0 and close <= so2TriggerPrice and strategy.opentrades == 2

// --- Execute SO1 ---
if so1Condition
    so1Qty = so1Usd / close // Calculate quantity based on USD
    strategy.entry("Safety Order 1", strategy.long, qty=so1Qty, comment="SO1")

// --- Execute SO2 ---
if so2Condition
    so2Qty = so2Usd / close // Calculate quantity based on USD
    strategy.entry("Safety Order 2", strategy.long, qty=so2Qty, comment="SO2")

// 5) AVERAGE ENTRY PRICE

// Use the built-in variable for the average price of the open position
avgEntryPrice = strategy.position_avg_price

// 6) DUAL TRAILING STOP LOGIC

// Variables to track trailing stop levels and states
var float highestSinceEntry = na
var float trailStopPrice    = na
var bool  stopHitNormal     = false

var bool  lockInTriggered = false
var float lockInPeak      = na
var float lockInStopPrice = na
var bool  stopHitLockIn   = false

// --- Update Trailing Logic when in a Position ---
if strategy.position_size > 0
    // --- Standard Trail ---
    highestSinceEntry := na(highestSinceEntry) ? close : math.max(highestSinceEntry, close)
    trailStopPrice    := highestSinceEntry * (1 - trailStopPerc)
    stopHitNormal     := close < trailStopPrice

    // --- Lock-In Trail ---
    if not lockInTriggered and close >= avgEntryPrice * (1 + lockInThreshold)
        lockInTriggered := true
        lockInPeak      := close

    if lockInTriggered
        lockInPeak      := math.max(lockInPeak, close)
        lockInStopPrice := lockInPeak * (1 - lockInTrailPct)
        stopHitLockIn   := close < lockInStopPrice
    else
        stopHitLockIn   := false
        lockInStopPrice := na

// --- Reset Variables when Flat ---
else
    highestSinceEntry := na
    trailStopPrice    := na
    stopHitNormal     := false

    lockInTriggered   := false
    lockInPeak        := na
    lockInStopPrice   := na
    stopHitLockIn     := false

    baseEntryPrice    := na
    // lastBuyBar is intentionally NOT reset here, cooldown depends on it

// 7) EXIT CONDITIONS

// Added 'inDateRange' check
// Exit if either trailing stop is hit OR if the trend reverses downward, within the active date range
exitCondition = (stopHitNormal or stopHitLockIn or trendDown) and strategy.position_size > 0

if exitCondition
    strategy.close_all(comment="Exit: SL / LockIn / TrendDown")

// 8) ALERT CONDITIONS (Potential 3Commas Integration)
// WARNING: Verify and adapt these JSON message strings for your specific 3Commas bot configuration!
//          The required format ('action', parameters, etc.) can vary.

// Added 'inDateRange[1]' check for Base Alert
alertcondition(inDateRange[1] and baseBuySignal and strategy.position_size[1] == 0 and not inCooldown[1],
     title="Base Buy Alert",
     message='{"action":"start_deal","order":"base"} // Verify/Adapt JSON for your 3Commas bot!')

// Added 'inDateRange' check for SO1 Alert
alertcondition(so1Condition, title="SO1 Alert",
     message='{"action":"add_funds","order":"so1"} // Verify/Adapt JSON for your 3Commas bot!')

// Added 'inDateRange' check for SO2 Alert
alertcondition(so2Condition, title="SO2 Alert",
     message='{"action":"add_funds","order":"so2"} // Verify/Adapt JSON for your 3Commas bot!')

// Added 'inDateRange' check for Exit Alert
alertcondition(exitCondition, title="Exit Alert",
     message='{"action":"close_at_market_price"} // Verify/Adapt JSON for your 3Commas bot!')


// 9) PLOTS & DEBUG TABLE

// --- Plot MAs ---
plot(fastMA, color=color.new(color.green, 0), title="Fast EMA", linewidth=2)
plot(slowMA, color=color.new(color.red, 0),   title="Slow EMA", linewidth=2)

// --- Plot Trailing Stops ---
plot(strategy.position_size > 0 ? trailStopPrice : na, color=color.new(color.orange, 0), title="Standard Trailing Stop", style=plot.style_linebr, linewidth=2)
plot(lockInTriggered ? lockInStopPrice : na, color=color.new(color.fuchsia, 0), title="Lock-In Trailing Stop", style=plot.style_linebr, linewidth=2)

// --- Debug Info Table ---
var table tradeInfo = table.new(position=position.bottom_right, columns=2, rows=10, border_width=1)