মাল্টি-সোর্স নিশ্চিতকরণ সূচক ব্যাকটেস্টিং কাঠামো: ঝুঁকি ব্যবস্থাপনা এবং সংকেত সনাক্তকরণকে একীভূত করে একটি পরিমাণগত ট্রেডিং পরীক্ষা ব্যবস্থা

SMA EMA MACD RSI TP/SL R/R ROI VWAP ATR
সৃষ্টির তারিখ: 2025-07-08 17:21:11 অবশেষে সংশোধন করুন: 2025-07-08 17:21:11
অনুলিপি: 0 ক্লিকের সংখ্যা: 256
2
ফোকাস
319
অনুসারী

মাল্টি-সোর্স নিশ্চিতকরণ সূচক ব্যাকটেস্টিং কাঠামো: ঝুঁকি ব্যবস্থাপনা এবং সংকেত সনাক্তকরণকে একীভূত করে একটি পরিমাণগত ট্রেডিং পরীক্ষা ব্যবস্থা মাল্টি-সোর্স নিশ্চিতকরণ সূচক ব্যাকটেস্টিং কাঠামো: ঝুঁকি ব্যবস্থাপনা এবং সংকেত সনাক্তকরণকে একীভূত করে একটি পরিমাণগত ট্রেডিং পরীক্ষা ব্যবস্থা

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটির মূল নীতিটি হল একটি বিস্তৃত পরীক্ষার পরিবেশ প্রদান করা যা ব্যবসায়ীদের বিভিন্ন সূচকের কার্যকারিতা মূল্যায়ন করতে দেয়। কোডটি নিম্নলিখিত মূল বৈশিষ্ট্যগুলি সম্পাদন করেঃ

  1. একাধিক সংকেত সনাক্তকরণ পদ্ধতি: কৌশল detectLongSignal () এবং detectShortSignal () ফাংশন দ্বারা পাঁচটি ভিন্ন সংকেত সনাক্তকরণ পদ্ধতি বাস্তবায়ন করা হয়ঃ

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

  3. প্রবেশ ও প্রস্থান লজিক

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

  5. ভিজ্যুয়ালাইজেশন এবং মনিটরিং: কৌশলটি প্লটশেপ ফাংশন ব্যবহার করে সমস্ত ইনপুট এবং আউটপুট সিগন্যালকে একটি চার্টে চিহ্নিত করে এবং table.new এর মাধ্যমে একটি রিয়েল-টাইম স্ট্যাটাস টেবিল তৈরি করে যা বর্তমান কৌশল সেটিংস এবং লেনদেনের অবস্থা দেখায়।

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

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

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

  3. সামগ্রিক ঝুঁকি ব্যবস্থাপনা: এই কৌশলটি পেশাদার-স্তরের ঝুঁকি ব্যবস্থাপনার বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করেঃ

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

  5. সামঞ্জস্যপিন স্ক্রিপ্ট v6 এর সাথে সামঞ্জস্যপূর্ণ, যে কোন ট্রেডিং প্ল্যাটফর্মের সাথে কাজ করে যা এই সংস্করণটি সমর্থন করে এবং ট্রেডারদের ঐতিহাসিক পারফরম্যান্সের মূল্যায়ন করার জন্য একটি ব্যাক-এন্ড ফাংশন সমর্থন করে।

কৌশলগত ঝুঁকি

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

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

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

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

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

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

  1. গতিশীল ঝুঁকি ব্যবস্থাপনাবর্তমান কৌশলটি স্থির পয়েন্টের স্টপ/লস ব্যবহার করে, যা বাজারের অস্থিরতার উপর ভিত্তি করে একটি গতিশীল ঝুঁকি ব্যবস্থাপনার জন্য অনুকূলিত করা যেতে পারে। উদাহরণস্বরূপ, স্টপ/লস পয়েন্টটি ATR ((Average True Range) এর সাথে সংযুক্ত করে, যখন অস্থিরতা বৃদ্ধি পায় তখন স্টপ রেঞ্জকে প্রসারিত করে এবং যখন অস্থিরতা হ্রাস পায় তখন স্টপ রেঞ্জকে সঙ্কুচিত করে। এটি বিভিন্ন বাজারের অবস্থার সাথে আরও ভালভাবে মানিয়ে নিতে পারে।

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

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

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

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

সারসংক্ষেপ

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

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

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

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

//@version=6
strategy("FULLY FUNCTIONAL INDICATOR TESTER", overlay=true, margin_long=100, margin_short=100)

// Entry/Exit Signal Inputs
longEntry = input.source(close, 'Long Entry Trigger', 'Source for long signal (connect your indicator here)')
shortEntry = input.source(close, 'Short Entry Trigger', 'Source for short signal (connect your indicator here)')
activateLongExit = input.bool(false, 'Activate Long Exit Signals')
longExit = input.source(high, 'Long Exit Trigger', 'Source for long exit signal')
activateShortExit = input.bool(false, 'Activate Short Exit Signals')
shortExit = input.source(low, 'Short Exit Trigger', 'Source for short exit signal')

// Signal Detection Method
signalMethod = input.string('Value Change', 'Signal Detection Method', options=['Value Change', 'Crossover Above', 'Crossover Below', 'Value Above Threshold', 'Value Below Threshold'])
signalThreshold = input.float(0, 'Signal Threshold', tooltip='Threshold value for signal detection methods')

// Take Profit and Stop Loss
fixedTp = input.int(0, 'Static TP (in ticks)', 0, tooltip='0 = disabled')
initialSL = input.int(0, 'Initial SL (in ticks)', 0, tooltip='0 = disabled')

// Break Even Settings
breakEvenTrigger = input.int(0, 'Break Even Trigger (in ticks)', 0, tooltip='Move SL to break even after this many ticks profit. 0 = disabled')

// Confluence Settings
useConfluence = input.bool(false, 'Use Confluence Filter', 'Activate confluence filter for entries')
longConfluence = input.source(high, 'Long Signal Confluence', 'Source for long confluence filter')
longConfluenceTrigger = input.source(low, 'Long Confluence Trigger', 'Value that must be below confluence source for long entry')
shortConfluence = input.source(high, 'Short Signal Confluence', 'Source for short confluence filter')
shortConfluenceTrigger = input.source(low, 'Short Confluence Trigger', 'Value that must be above confluence source for short entry')
confluenceLookback = input.int(0, 'Confluence Lookback Period', 0, 10, 1, 'Number of candles to look back for confluence')

// Variables to track entry prices for break-even
var float longEntryPrice = na
var float shortEntryPrice = na

// Signal Detection Functions
detectLongSignal() =>
    switch signalMethod
        'Value Change' => longEntry != longEntry[1] and longEntry > 0
        'Crossover Above' => ta.crossover(longEntry, signalThreshold)
        'Crossover Below' => ta.crossunder(longEntry, signalThreshold)
        'Value Above Threshold' => longEntry > signalThreshold and longEntry[1] <= signalThreshold
        'Value Below Threshold' => longEntry < signalThreshold and longEntry[1] >= signalThreshold
        => false

detectShortSignal() =>
    switch signalMethod
        'Value Change' => shortEntry != shortEntry[1] and shortEntry > 0
        'Crossover Above' => ta.crossover(shortEntry, signalThreshold)
        'Crossover Below' => ta.crossunder(shortEntry, signalThreshold)
        'Value Above Threshold' => shortEntry > signalThreshold and shortEntry[1] <= signalThreshold
        'Value Below Threshold' => shortEntry < signalThreshold and shortEntry[1] >= signalThreshold
        => false

detectLongExit() =>
    switch signalMethod
        'Value Change' => longExit != longExit[1] and longExit > 0
        'Crossover Above' => ta.crossover(longExit, signalThreshold)
        'Crossover Below' => ta.crossunder(longExit, signalThreshold)
        'Value Above Threshold' => longExit > signalThreshold and longExit[1] <= signalThreshold
        'Value Below Threshold' => longExit < signalThreshold and longExit[1] >= signalThreshold
        => false

detectShortExit() =>
    switch signalMethod
        'Value Change' => shortExit != shortExit[1] and shortExit > 0
        'Crossover Above' => ta.crossover(shortExit, signalThreshold)
        'Crossover Below' => ta.crossunder(shortExit, signalThreshold)
        'Value Above Threshold' => shortExit > signalThreshold and shortExit[1] <= signalThreshold
        'Value Below Threshold' => shortExit < signalThreshold and shortExit[1] >= signalThreshold
        => false

// Confluence confirmation functions
longConfirmation() => 
    confirmation = false
    if confluenceLookback == 0
        confirmation := longConfluenceTrigger < longConfluence
    else
        for x = 0 to confluenceLookback
            if longConfluenceTrigger[x] < longConfluence[x]
                confirmation := true
                break
    confirmation

shortConfirmation() => 
    confirmation = false
    if confluenceLookback == 0
        confirmation := shortConfluenceTrigger > shortConfluence
    else
        for x = 0 to confluenceLookback
            if shortConfluenceTrigger[x] > shortConfluence[x]
                confirmation := true
                break
    confirmation

// Entry conditions
longConfirmed = useConfluence ? longConfirmation() : true
shortConfirmed = useConfluence ? shortConfirmation() : true

longCondition = detectLongSignal() and longConfirmed
shortCondition = detectShortSignal() and shortConfirmed

// Entry logic
if (longCondition and strategy.opentrades == 0)
    strategy.entry('Long', strategy.long)
    longEntryPrice := close
    // Set initial exit orders
    if fixedTp > 0 or initialSL > 0
        strategy.exit('Long Exit', 'Long', 
                     profit = fixedTp > 0 ? fixedTp : na, 
                     loss = initialSL > 0 ? initialSL : na, 
                     comment_profit = 'TP Hit', 
                     comment_loss = 'SL Hit')

if (shortCondition and strategy.opentrades == 0)
    strategy.entry('Short', strategy.short)
    shortEntryPrice := close
    // Set initial exit orders
    if fixedTp > 0 or initialSL > 0
        strategy.exit('Short Exit', 'Short', 
                     profit = fixedTp > 0 ? fixedTp : na, 
                     loss = initialSL > 0 ? initialSL : na, 
                     comment_profit = 'TP Hit', 
                     comment_loss = 'SL Hit')

// Custom exit signal logic
if (activateLongExit and detectLongExit() and strategy.position_size > 0)
    strategy.close('Long', 'Custom Long Exit')

if (activateShortExit and detectShortExit() and strategy.position_size < 0)
    strategy.close('Short', 'Custom Short Exit')

// Break-even logic
if (breakEvenTrigger > 0)
    // Long position break-even
    if (strategy.position_size > 0 and not na(longEntryPrice))
        ticksProfit = math.round((high - longEntryPrice) / syminfo.mintick)
        if (ticksProfit >= breakEvenTrigger)
            strategy.exit('Long Exit', 'Long', stop = longEntryPrice, comment_loss = 'Break Even')
    
    // Short position break-even  
    if (strategy.position_size < 0 and not na(shortEntryPrice))
        ticksProfit = math.round((shortEntryPrice - low) / syminfo.mintick)
        if (ticksProfit >= breakEvenTrigger)
            strategy.exit('Short Exit', 'Short', stop = shortEntryPrice, comment_loss = 'Break Even')

// Reset entry prices when no position
if (strategy.position_size == 0)
    longEntryPrice := na
    shortEntryPrice := na

// Plot signals for debugging
plotshape(longCondition, title='Long Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortCondition, title='Short Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(activateLongExit and detectLongExit() and strategy.position_size > 0, title='Long Exit', location=location.abovebar, color=color.orange, style=shape.xcross, size=size.small)
plotshape(activateShortExit and detectShortExit() and strategy.position_size < 0, title='Short Exit', location=location.belowbar, color=color.orange, style=shape.xcross, size=size.small)

// Display current settings in a table for easy reference
if barstate.islast
    var table infoTable = table.new(position.top_right, 2, 8, bgcolor=color.white, border_width=1)
    table.cell(infoTable, 0, 0, "Signal Method:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 0, signalMethod, text_color=color.black)
    table.cell(infoTable, 0, 1, "Threshold:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 1, str.tostring(signalThreshold), text_color=color.black)
    table.cell(infoTable, 0, 2, "TP (ticks):", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 2, str.tostring(fixedTp), text_color=color.black)
    table.cell(infoTable, 0, 3, "SL (ticks):", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 3, str.tostring(initialSL), text_color=color.black)
    table.cell(infoTable, 0, 4, "Break Even:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 4, str.tostring(breakEvenTrigger), text_color=color.black)
    table.cell(infoTable, 0, 5, "Confluence:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 5, useConfluence ? "ON" : "OFF", text_color=color.black)
    table.cell(infoTable, 0, 6, "Position:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 6, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT", text_color=color.black)
    table.cell(infoTable, 0, 7, "Status:", text_color=color.black, bgcolor=color.gray)
    table.cell(infoTable, 1, 7, "FULLY FUNCTIONAL", text_color=color.green)