বহু-সময়কালীন গতিবেগ সহযোগী ট্রেডিং কৌশল: EMA/MA/RSI সংহত করে একটি পরিমাণগত ট্রেডিং সিস্টেম

EMA MA RSI ATR MTF
সৃষ্টির তারিখ: 2025-03-25 14:18:20 অবশেষে সংশোধন করুন: 2025-03-25 14:18:20
অনুলিপি: 2 ক্লিকের সংখ্যা: 340
2
ফোকাস
319
অনুসারী

বহু-সময়কালীন গতিবেগ সহযোগী ট্রেডিং কৌশল: EMA/MA/RSI সংহত করে একটি পরিমাণগত ট্রেডিং সিস্টেম বহু-সময়কালীন গতিবেগ সহযোগী ট্রেডিং কৌশল: EMA/MA/RSI সংহত করে একটি পরিমাণগত ট্রেডিং সিস্টেম

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটির মূল নীতিটি একাধিক প্রযুক্তিগত সূচকগুলির সমন্বিত বিশ্লেষণের উপর ভিত্তি করে একাধিক সময়কালের উপর ভিত্তি করে, প্রধানত নিম্নলিখিত কয়েকটি অংশে বিভক্তঃ

  1. মাল্টিটাইম সাইকেল বিশ্লেষণকৌশলঃ একই সময়ে 15 মিনিট (প্রবেশ) এবং 4 ঘন্টা (প্রবণতা নিশ্চিতকরণ) সময়কাল বিশ্লেষণ করে, যাতে ট্রেডিংয়ের দিকটি বৃহত্তর বাজার প্রবণতাগুলির সাথে সামঞ্জস্যপূর্ণ থাকে।

  2. প্রবেশের শর্তাবলী (১৫ মিনিটের চক্র):

    • মাল্টি হেড প্রবেশঃ EMA13 > EMA62 ((স্বল্পমেয়াদী গতিশীলতা উর্ধ্বমুখী), বন্ধের মূল্য > MA200 ((মূল্যে মূল প্রবণতা লাইন উপরে), দ্রুত RSI ((7) > ধীর RSI ((28) ((গতিশীলতা বৃদ্ধি), দ্রুত RSI > 50 ((গতিশীলতা পক্ষপাতী মাল্টি হেড), লেনদেনের পরিমাণ 20 চক্রের গড়ের চেয়ে বেশি।
    • খালি মাথা প্রবেশঃ মাল্টি-হেড শর্তের বিপরীতে, EMA13 < EMA62, ক্লোজিং প্রাইস < MA200, দ্রুত RSI ((7) < ধীর RSI ((28)), দ্রুত RSI < 50, একইভাবে লেনদেনের পরিমাণ বাড়ানোর প্রয়োজন।
  3. প্রবণতা নিশ্চিতকরণ (৪ ঘন্টার চক্র):

    • মাল্টি-হেড কনফার্মেশনঃ 15 মিনিটের চক্রের শর্তের মতো, তবে আরএসআইয়ের প্রয়োজনীয়তার ক্ষেত্রে কিছুটা আলাদা, যার জন্য ধীর আরএসআই > 40 প্রয়োজন।
    • খালি মাথা নিশ্চিতকরণ: একইভাবে 15 মিনিটের চক্রের অবস্থার বিপরীতে, ধীর গতির আরএসআই < 60
  4. সঠিক ভর্তির প্রয়োজনীয়তা: কৌশলটি দাবি করে যে EMA13 EMA62 ((ক্রসফর্মিং) কে অতিক্রম করেছে, অথবা দামটি MA200 কে অতিক্রম করেছে, যা আরও সুনির্দিষ্ট প্রবেশের পয়েন্ট সরবরাহ করে এবং দীর্ঘ সময়ের জন্য চলমান প্রবণতার মধ্যে অন্ধভাবে প্রবেশ করা এড়ায়।

  5. প্রস্থান ব্যবস্থা: প্রযুক্তিগত সূচক বিপরীতকরণ (ইএমএ সম্পর্ক পরিবর্তিত হয় বা আরএসআই ওভারবয়ে / ওভারসোল্ডে পৌঁছে যায়), এটিআর গতিশীল স্টপ, স্থির শতাংশ স্টপ স্টপ এবং ট্র্যাকিং স্টপ সহ একাধিক প্রস্থান বিকল্প সরবরাহ করা হয়।

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

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

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

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

  4. অর্ডার নিশ্চিত: লেনদেনের পরিমাণ বাড়ানোর শর্ত যুক্ত করা হয়েছে, যা সম্ভাব্য ভুয়া ব্রেকআউটগুলিকে আরও পরিস্রাবণ করে, কারণ সত্যিকারের দামের চলাচল সাধারণত লেনদেনের পরিমাণ বাড়ানোর সাথে থাকে।

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

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

কৌশলগত ঝুঁকি

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

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

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

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

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

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

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

  2. গতিশীল প্যারামিটার সমন্বয় প্রক্রিয়া: বর্তমান কৌশলটি নির্দিষ্ট প্রযুক্তিগত সূচক প্যারামিটার ব্যবহার করে, বাজারের ওঠানামার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সামঞ্জস্য করার জন্য প্যারামিটারগুলি বিবেচনা করা যেতে পারে। উদাহরণস্বরূপ, স্বল্প সময়ের ইএমএ ব্যবহার করে কম ওঠানামার পরিবেশে দ্রুত ওঠানামার ক্যাপচার করুন এবং উচ্চ ওঠানামার পরিবেশে দীর্ঘ সময়ের ইএমএ ব্যবহার করে শব্দ হ্রাস করুন।

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

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

  5. মৌলিক ফিল্টার যোগ করুনগুরুত্বপূর্ণ অর্থনৈতিক তথ্য প্রকাশের আগে, সম্ভাব্য উচ্চ-অস্থিরতার ঘটনাগুলির জন্য স্বয়ংক্রিয়ভাবে স্টপ-রেঞ্জ বা ট্রেডিং স্থগিত করুন।

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

  7. মৌসুমী বিশ্লেষণ যোগ করা: কিছু ট্রেডিং প্রজাতিতে সময়ের সাথে সাথে মৌসুমী বৈশিষ্ট্য থাকতে পারে, এবং ঐতিহাসিক তথ্য বিশ্লেষণ করে এই প্যাটার্নগুলি বের করা যেতে পারে, এবং সেই অনুযায়ী কৌশলগত প্যারামিটার বা ট্রেডিং সময়কে সামঞ্জস্য করা যেতে পারে।

সারসংক্ষেপ

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

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

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

ব্যবসায়ীদের জন্য, যারা ব্যবসায়ের পদ্ধতিগত, নিয়মানুবর্তিত পদ্ধতির সন্ধান করছেন, এই কৌশলটি একটি শক্ত কাঠামো সরবরাহ করে, যা সরাসরি প্রয়োগ করা যেতে পারে, তবে ব্যক্তিগত ব্যবসায়ের সিস্টেমের ভিত্তিতে কাস্টমাইজড এবং প্রসারিত হতে পারে।

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

// Advanced Multi-Timeframe EMA/MA/RSI Strategy
// Uses 4h for confluence and 15m for entry
// Version 6

//@version=6
strategy("Forex Fire EMA/MA/RSI Strategy", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, 
         initial_capital=10000, pyramiding=0, calc_on_every_tick=true)

// Input parameters with sections
// Timeframe inputs
tf_entry = input.string("15", title="Entry Timeframe", options=["1", "5", "15", "30", "60", "120"], group="Timeframes")
tf_confluence = input.string("240", title="Confluence Timeframe", options=["60", "240", "D", "W"], group="Timeframes")

// Indicator settings
ema_short_length = input.int(13, title="EMA Short Length", minval=5, maxval=50, group="EMAs")
ema_long_length = input.int(62, title="EMA Long Length", minval=20, maxval=200, group="EMAs")
ma_length = input.int(200, title="Moving Average Length", minval=50, maxval=500, group="Moving Average")
ma_type = input.string("SMA", title="MA Type", options=["SMA", "EMA", "WMA", "VWMA"], group="Moving Average")

// RSI settings
rsi_slow_length = input.int(28, title="RSI Slow Length", minval=14, maxval=50, group="RSI")
rsi_fast_length = input.int(7, title="RSI Fast Length", minval=3, maxval=14, group="RSI")
rsi_overbought = input.int(70, title="RSI Overbought Level", minval=60, maxval=90, group="RSI")
rsi_oversold = input.int(30, title="RSI Oversold Level", minval=10, maxval=40, group="RSI")

// Strategy parameters
use_atr_exits = input.bool(true, title="Use ATR for Exit Targets", group="Strategy Settings")
atr_multiplier = input.float(2.0, title="ATR Multiplier for Exits", minval=1.0, maxval=5.0, step=0.1, group="Strategy Settings")
atr_length = input.int(14, title="ATR Length", minval=5, maxval=30, group="Strategy Settings")
use_stop_loss = input.bool(true, title="Use Stop Loss", group="Risk Management")
stop_loss_percent = input.float(2.0, title="Stop Loss (%)", minval=0.5, maxval=10.0, step=0.5, group="Risk Management")
use_take_profit = input.bool(true, title="Use Take Profit", group="Risk Management")
take_profit_percent = input.float(4.0, title="Take Profit (%)", minval=1.0, maxval=20.0, step=1.0, group="Risk Management")
use_trailing_stop = input.bool(true, title="Use Trailing Stop", group="Risk Management")
trailing_percent = input.float(1.5, title="Trailing Stop (%)", minval=0.5, maxval=5.0, step=0.1, group="Risk Management")

// Visual settings
show_plot = input.bool(true, title="Show Indicator Plots", group="Visuals")
show_signals = input.bool(true, title="Show Entry/Exit Signals", group="Visuals")
show_table = input.bool(true, title="Show Info Table", group="Visuals")

// Helper function for MA type
f_ma(src, length, type) =>
    switch type
        "SMA" => ta.sma(src, length)
        "EMA" => ta.ema(src, length)
        "WMA" => ta.wma(src, length)
        "VWMA" => ta.vwma(src, length)
        => ta.sma(src, length)

// ATR for dynamic exits
atr_value = ta.atr(atr_length)

// Indicators for Entry timeframe
ema_short_entry = ta.ema(close, ema_short_length)
ema_long_entry = ta.ema(close, ema_long_length)
ma_entry = f_ma(close, ma_length, ma_type)
rsi_slow_entry = ta.rsi(close, rsi_slow_length)
rsi_fast_entry = ta.rsi(close, rsi_fast_length)

// Indicators for Confluence timeframe
ema_short_conf = request.security(syminfo.tickerid, tf_confluence, ta.ema(close, ema_short_length), barmerge.gaps_off, barmerge.lookahead_off)
ema_long_conf = request.security(syminfo.tickerid, tf_confluence, ta.ema(close, ema_long_length), barmerge.gaps_off, barmerge.lookahead_off)
ma_conf = request.security(syminfo.tickerid, tf_confluence, f_ma(close, ma_length, ma_type), barmerge.gaps_off, barmerge.lookahead_off)
rsi_slow_conf = request.security(syminfo.tickerid, tf_confluence, ta.rsi(close, rsi_slow_length), barmerge.gaps_off, barmerge.lookahead_off)
rsi_fast_conf = request.security(syminfo.tickerid, tf_confluence, ta.rsi(close, rsi_fast_length), barmerge.gaps_off, barmerge.lookahead_off)

// Volume confirmation
volume_increasing = volume > ta.sma(volume, 20)

// Plotting indicators - completely outside of conditional blocks
// We'll use the show_plot variable directly in the color transparency
ema_short_plot_color = show_plot ? color.new(color.green, 0) : color.new(color.green, 100)
ema_long_plot_color = show_plot ? color.new(color.red, 0) : color.new(color.red, 100)
ma_plot_color = show_plot ? color.new(color.blue, 0) : color.new(color.blue, 100)

plot(ema_short_entry, title="EMA Short (Entry)", color=ema_short_plot_color, linewidth=2)
plot(ema_long_entry, title="EMA Long (Entry)", color=ema_long_plot_color, linewidth=2)
plot(ma_entry, title="MA (Entry)", color=ma_plot_color, linewidth=2)

// Define entry conditions for Entry timeframe
long_entry_condition = ema_short_entry > ema_long_entry and close > ma_entry and rsi_fast_entry > rsi_slow_entry and rsi_fast_entry > 50 and volume_increasing
short_entry_condition = ema_short_entry < ema_long_entry and close < ma_entry and rsi_fast_entry < rsi_slow_entry and rsi_fast_entry < 50 and volume_increasing

// Define confluence conditions from Confluence timeframe
long_confluence = ema_short_conf > ema_long_conf and close > ma_conf and rsi_slow_conf > 40 and rsi_fast_conf > rsi_slow_conf
short_confluence = ema_short_conf < ema_long_conf and close < ma_conf and rsi_slow_conf < 60 and rsi_fast_conf < rsi_slow_conf

// Advanced entry conditions
ema_crossover = ta.crossover(ema_short_entry, ema_long_entry)
ema_crossunder = ta.crossunder(ema_short_entry, ema_long_entry)
price_crossover_ma = ta.crossover(close, ma_entry)
price_crossunder_ma = ta.crossunder(close, ma_entry)

// Enhanced strategy conditions combining both timeframes with crossovers
long_condition = (long_entry_condition and long_confluence) and (ema_crossover or price_crossover_ma)
short_condition = (short_entry_condition and short_confluence) and (ema_crossunder or price_crossunder_ma)

// Exit conditions
long_exit_technical = ema_short_entry < ema_long_entry or rsi_fast_entry > rsi_overbought
short_exit_technical = ema_short_entry > ema_long_entry or rsi_fast_entry < rsi_oversold

// Strategy execution
var float entry_price = 0.0
var float stop_loss_level = 0.0
var float take_profit_level = 0.0
var float trailing_stop_level = 0.0

if (long_condition)
    entry_price := close
    stop_loss_level := use_stop_loss ? close * (1 - stop_loss_percent / 100) : 0.0
    take_profit_level := use_take_profit ? close * (1 + take_profit_percent / 100) : 0.0
    trailing_stop_level := use_trailing_stop ? close * (1 - trailing_percent / 100) : 0.0
    strategy.entry("Long", strategy.long)

if (short_condition)
    entry_price := close
    stop_loss_level := use_stop_loss ? close * (1 + stop_loss_percent / 100) : 0.0
    take_profit_level := use_take_profit ? close * (1 - take_profit_percent / 100) : 0.0
    trailing_stop_level := use_trailing_stop ? close * (1 + trailing_percent / 100) : 0.0
    strategy.entry("Short", strategy.short)

// Handle stops and exits
if strategy.position_size > 0
    // Update trailing stop for longs
    if use_trailing_stop and close > entry_price
        trail_level = close * (1 - trailing_percent / 100)
        trailing_stop_level := math.max(trailing_stop_level, trail_level)
    
    // Exit conditions for longs
    if (use_stop_loss and low < stop_loss_level and stop_loss_level > 0) or 
       (use_take_profit and high > take_profit_level and take_profit_level > 0) or 
       (use_trailing_stop and low < trailing_stop_level and trailing_stop_level > 0) or
       (long_exit_technical)
        strategy.close("Long")

if strategy.position_size < 0
    // Update trailing stop for shorts
    if use_trailing_stop and close < entry_price
        trail_level = close * (1 + trailing_percent / 100)
        trailing_stop_level := math.min(trailing_stop_level, trail_level)
    
    // Exit conditions for shorts
    if (use_stop_loss and high > stop_loss_level and stop_loss_level > 0) or 
       (use_take_profit and low < take_profit_level and take_profit_level > 0) or 
       (use_trailing_stop and high > trailing_stop_level and trailing_stop_level > 0) or
       (short_exit_technical)
        strategy.close("Short")

// ATR-based exits
if use_atr_exits and strategy.position_size != 0
    atr_stop_long = strategy.position_size > 0 ? close - (atr_value * atr_multiplier) : 0.0
    atr_stop_short = strategy.position_size < 0 ? close + (atr_value * atr_multiplier) : 0.0
    
    if strategy.position_size > 0 and low <= atr_stop_long
        strategy.close("Long", comment="ATR Exit")
    
    if strategy.position_size < 0 and high >= atr_stop_short
        strategy.close("Short", comment="ATR Exit")

// Visual signals on chart - completely outside conditional blocks
// Define plot conditions with show_signals incorporated
longEntryPlot = long_condition and show_signals
shortEntryPlot = short_condition and show_signals
longExitPlot = strategy.position_size > 0 and (long_exit_technical or 
             (use_stop_loss and low < stop_loss_level and stop_loss_level > 0) or 
             (use_take_profit and high > take_profit_level and take_profit_level > 0) or 
             (use_trailing_stop and low < trailing_stop_level and trailing_stop_level > 0)) and show_signals
shortExitPlot = strategy.position_size < 0 and (short_exit_technical or 
             (use_stop_loss and high > stop_loss_level and stop_loss_level > 0) or 
             (use_take_profit and low < take_profit_level and take_profit_level > 0) or 
             (use_trailing_stop and high > trailing_stop_level and trailing_stop_level > 0)) and show_signals

// Move plotshape outside of any conditional block
plotshape(series=longEntryPlot, title="Long Entry", style=shape.triangleup, location=location.belowbar, 
         color=color.new(color.green, 0), size=size.small)
plotshape(series=shortEntryPlot, title="Short Entry", style=shape.triangledown, location=location.abovebar, 
         color=color.new(color.red, 0), size=size.small)
plotshape(series=longExitPlot, title="Long Exit", style=shape.circle, location=location.abovebar, 
         color=color.new(color.orange, 0), size=size.small)
plotshape(series=shortExitPlot, title="Short Exit", style=shape.circle, location=location.belowbar, 
         color=color.new(color.orange, 0), size=size.small)

// Info table
if show_table
    var table info = table.new(position.top_right, 3, 7, color.new(color.black, 0), color.new(color.white, 0), 2, color.new(color.gray, 0), 2)
    
    table.cell(info, 0, 0, "INDICATOR", bgcolor=color.new(color.blue, 10), text_color=color.white)
    table.cell(info, 1, 0, "ENTRY (" + tf_entry + ")", bgcolor=color.new(color.blue, 10), text_color=color.white)
    table.cell(info, 2, 0, "CONF (" + tf_confluence + ")", bgcolor=color.new(color.blue, 10), text_color=color.white)
    
    table.cell(info, 0, 1, "EMA Relation", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 1, ema_short_entry > ema_long_entry ? "Bullish" : "Bearish", 
         bgcolor=ema_short_entry > ema_long_entry ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 1, ema_short_conf > ema_long_conf ? "Bullish" : "Bearish", 
         bgcolor=ema_short_conf > ema_long_conf ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    
    table.cell(info, 0, 2, "Price vs MA", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 2, close > ma_entry ? "Above" : "Below", 
         bgcolor=close > ma_entry ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 2, close > ma_conf ? "Above" : "Below", 
         bgcolor=close > ma_conf ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    
    table.cell(info, 0, 3, "RSI Fast vs Slow", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 3, rsi_fast_entry > rsi_slow_entry ? "Bullish" : "Bearish", 
         bgcolor=rsi_fast_entry > rsi_slow_entry ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 3, rsi_fast_conf > rsi_slow_conf ? "Bullish" : "Bearish", 
         bgcolor=rsi_fast_conf > rsi_slow_conf ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
         
    table.cell(info, 0, 4, "Volume", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 4, volume_increasing ? "Increasing" : "Decreasing", 
         bgcolor=volume_increasing ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 4, "n/a", bgcolor=color.new(color.gray, 40), text_color=color.white)
    
    table.cell(info, 0, 5, "Entry Signal", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 5, long_entry_condition ? "Long" : (short_entry_condition ? "Short" : "None"), 
         bgcolor=long_entry_condition ? color.new(color.green, 20) : (short_entry_condition ? color.new(color.red, 20) : color.new(color.gray, 40)), 
         text_color=color.white)
    table.cell(info, 2, 5, long_confluence ? "Long" : (short_confluence ? "Short" : "None"), 
         bgcolor=long_confluence ? color.new(color.green, 20) : (short_confluence ? color.new(color.red, 20) : color.new(color.gray, 40)), 
         text_color=color.white)
    
    table.cell(info, 0, 6, "Final Signal", bgcolor=color.new(color.blue, 10), text_color=color.white)
    table.cell(info, 1, 6, long_condition ? "LONG" : (short_condition ? "SHORT" : "NONE"), 
         bgcolor=long_condition ? color.new(color.green, 0) : (short_condition ? color.new(color.red, 0) : color.new(color.gray, 20)), 
         text_color=color.white)
    table.cell(info, 2, 6, strategy.position_size > 0 ? "In LONG" : (strategy.position_size < 0 ? "In SHORT" : "No Position"), 
         bgcolor=strategy.position_size > 0 ? color.new(color.green, 20) : (strategy.position_size < 0 ? color.new(color.red, 20) : color.new(color.gray, 40)), 
         text_color=color.white)