মাল্টি-টাইমফ্রেম ডায়নামিক ATR ক্রসওভার কৌশল: নমনীয় পরামিতিগুলির সাহায্যে ট্রেন্ড ট্র্যাকিং এবং ঝুঁকি ব্যবস্থাপনা অপ্টিমাইজ করা

EMA RSI ATR 趋势跟踪 动态参数 多时间框 止损 止盈 尾随止损
সৃষ্টির তারিখ: 2025-03-26 16:40:51 অবশেষে সংশোধন করুন: 2025-03-26 16:40:51
অনুলিপি: 0 ক্লিকের সংখ্যা: 431
2
ফোকাস
319
অনুসারী

মাল্টি-টাইমফ্রেম ডায়নামিক ATR ক্রসওভার কৌশল: নমনীয় পরামিতিগুলির সাহায্যে ট্রেন্ড ট্র্যাকিং এবং ঝুঁকি ব্যবস্থাপনা অপ্টিমাইজ করা মাল্টি-টাইমফ্রেম ডায়নামিক ATR ক্রসওভার কৌশল: নমনীয় পরামিতিগুলির সাহায্যে ট্রেন্ড ট্র্যাকিং এবং ঝুঁকি ব্যবস্থাপনা অপ্টিমাইজ করা

ওভারভিউ

মাল্টি-টাইম ফ্রেম ডায়নামিক এটিআর ক্রস কৌশল একটি নমনীয় ট্রেডিং সিস্টেম যা বিভিন্ন সময় ফ্রেমের উপর নির্ভর করে স্বয়ংক্রিয়ভাবে মূল প্যারামিটারগুলিকে সামঞ্জস্য করতে সক্ষম। এই কৌশলটি সূচকীয় চলমান গড় (EMA) ক্রস সংকেত এবং অপেক্ষাকৃত শক্তিশালী সূচক (RSI) নিশ্চিতকরণকে একত্রিত করে এবং বাস্তব ওঠানামা গড় (ATR) ব্যবহার করে গতিশীল ঝুঁকি পরিচালনা করে। আপনি দিনরেখা চার্ট, ঘন্টা চার্ট বা বিভিন্ন মিনিট চার্ট (যেমন 5 মিনিট, 30 মিনিট, 60 মিনিট বা 4 ঘন্টা চার্ট) তে ট্রেড করুন না কেন, কৌশলটি বুদ্ধিমানের সাথে প্যারামিটারগুলিকে বিভিন্ন বাজারের পরিবেশের সাথে সামঞ্জস্য করে, কার্যকরভাবে মিথ্যা মিথ্যা সংকেতগুলিকে ফিল্টার করে এবং সফল ব্যবসায়ের হার বাড়ায়।

কৌশল নীতি

এই কৌশলটির মূল নীতি হল একাধিক প্রযুক্তিগত সূচকের সমন্বয় এবং গতিশীল প্যারামিটার সমন্বয় প্রক্রিয়াঃ

  1. মাল্টি টাইমফ্রেম প্যারামিটার স্বনির্ধারিতকৌশলঃ বর্তমান সময় ফ্রেম (সূর্যরেখা, ঘূর্ণিরেখা, ৩০ মিনিট, ৬০ মিনিট, ৪ ঘন্টা বা ৫ মিনিট) অনুযায়ী স্বয়ংক্রিয়ভাবে সর্বোত্তম সূচক প্যারামিটার নির্বাচন করুন। উদাহরণস্বরূপ, সূর্যরেখার চার্টে দীর্ঘ সময়ের ইএমএ এবং স্ট্যান্ডার্ড আরএসআই প্যারামিটার ব্যবহার করুন, এবং ৩০ মিনিটের চার্টে “দিন” কে সংশ্লিষ্ট “স্তম্ভের সংখ্যা” তে রূপান্তর করুন এবং প্রতিক্রিয়া গতি বাড়ানোর জন্য সময়ের মানটি সামান্য হ্রাস করুন।

  2. সিগন্যাল জেনারেশন লজিক

    • মাল্টি-হেড প্রবেশঃ যখন দ্রুত EMA উপর ধীর EMA এবং RSI 50 এর উপরে থাকে তখন উত্পন্ন হয়।
    • খালি মাথা প্রবেশঃ যখন দ্রুত ইএমএর অধীনে ধীর ইএমএ অতিক্রম করে এবং আরএসআই 50 এর নীচে থাকে তখন উত্পন্ন হয়। এই দ্বৈত-নিশ্চিতকরণ ব্যবস্থাটি ভুয়া সংকেত কমাতে কার্যকর।
  3. ঝুঁকি ব্যবস্থাপনা কাঠামো

    • এটিআর-ভিত্তিক স্টপ লসঃ মাল্টি হেড পজিশনের স্টপ লস সেট করা হয় “বর্তমান মূল্য - (এটিআর × স্টপ লস গুণিতক) “; খালি হেড পজিশন সেট করা হয় “বর্তমান মূল্য + (এটিআর × স্টপ লস গুণিতক) “।
    • এটিআর-ভিত্তিক স্টপ লেভেলঃ একইভাবে, এটিআর-এর মাধ্যমে মুনাফার গুণিতক দ্বারা স্টপ লেভেল নির্ধারণ করা হয়।
    • ডায়নামিক ট্র্যাকিং স্টপ লসঃ এটিআর ডায়নামিকের উপর ভিত্তি করে স্টপ লস সামঞ্জস্য করার জন্য একটি বিকল্প বৈশিষ্ট্য, দামের সুবিধাজনক দিকের দিকে অগ্রসর হওয়ার সাথে সাথে আংশিক মুনাফা লক করে।
  4. অর্থ বরাদ্দপ্রতি লেনদেনের জন্য মোট তহবিলের ১০% ব্যবহার করা হয়। এই শতাংশ-ভিত্তিক পজিশন ব্যবস্থাপনা কৌশলকে অ্যাকাউন্টের আকারের সাথে প্রসারিত করার অনুমতি দেয়।

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

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

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

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

  4. ভিজ্যুয়াল বন্ধুত্বপূর্ণ প্রদর্শনকৌশলঃ রঙিন অন্ধদের জন্য বন্ধুত্বপূর্ণ রঙিন প্যানেল (ওকাবে-ইটো রঙিন প্যানেল) ব্যবহার করে, যা বিভিন্ন দৃষ্টিশক্তি সহ ব্যবসায়ীদের চার্টের বিভিন্ন সূচক এবং সংকেতগুলি সহজেই সনাক্ত করতে দেয়।

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

কৌশলগত ঝুঁকি

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

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

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

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

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

  1. স্বনির্ধারিত প্যারামিটার অপ্টিমাইজেশনবর্তমান কৌশলঃ বিভিন্ন টাইম ফ্রেমের জন্য পূর্বনির্ধারিত মানের উপর ভিত্তি করে প্যারামিটার নির্বাচন করুন। এটি বাজারের অবস্থার উপর ভিত্তি করে গতিশীল সমন্বয় প্যারামিটার (যেমন উদ্বায়ীতা, প্রবণতা শক্তি) হিসাবে আরও উন্নত করা যেতে পারে, যেমন উচ্চ উদ্বায়ী বাজারে দীর্ঘতর ইএমএ চক্র ব্যবহার করা যাতে শব্দ কম হয়।

  2. মাল্টিমিডিয়েটর ইন্টিগ্রেশনসংকেতের গুণমান বাড়ানোর জন্য অন্যান্য পরিপূরক সূচক যেমন লেনদেনের পরিমাণ বা প্রবণতা শক্তির সূচক (যেমন এডিএক্স) সংহত করার বিষয়টি বিবেচনা করা যেতে পারে। বিশেষত, লেনদেনের পরিমাণকে নিশ্চিতকরণ হিসাবে গ্রহণ করা ভুয়া বিঘ্নের সম্ভাবনাকে ব্যাপকভাবে হ্রাস করতে পারে।

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

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

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

সারসংক্ষেপ

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

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

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

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

//@version=6
strategy("FlexATR", overlay=true, initial_capital=100000, currency=currency.USD, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=true)



// =====================
// Determinazione del timeframe
// ---------------------
// "resString" contiene il valore del timeframe (es. "D", "1D", "30", "60", "240", "5", "W", "1W", ecc.)
// "res_minutes" è il numero di minuti per barra; gestiamo anche i casi per D, W e M.
resString = timeframe.period
var float res_minutes = na
if resString == "D" or resString == "1D"
    res_minutes := 1440.0
else if resString == "W" or resString == "1W"
    res_minutes := 10080.0
else if resString == "M" or resString == "1M"
    res_minutes := 43200.0
else
    res_minutes := nz(str.tonumber(resString), 1)  // ad es. "30", "60", "240", "5", ecc.

// Se il grafico è intraday (minuti/barra < 1440)
intraday = res_minutes < 1440.0
// Calcolo del numero di barre in un giorno (utile per convertire "giorni" in barre)
barsPerDay = intraday ? (1440.0 / res_minutes) : 1.0

// =====================
// INPUT PARAMETRI MODIFICABILI VIA FORM PER OGNI TIMEFRAME
// =====================

// [Daily Parameters]
fastDays_Daily = input.float(8.0,  title="EMA Veloce (giorni)",  group="Daily Parameters")
slowDays_Daily = input.float(21.0, title="EMA Lenta (giorni)",  group="Daily Parameters")
rsiDays_Daily  = input.float(14.0, title="RSI (giorni)",         group="Daily Parameters")
atrDays_Daily  = input.float(14.0, title="ATR Period (giorni)",  group="Daily Parameters")

// [Weekly Parameters]
fastDays_Weekly = input.float(40.0,  title="EMA Veloce (giorni)",  group="Weekly Parameters")
slowDays_Weekly = input.float(105.0, title="EMA Lenta (giorni)",  group="Weekly Parameters")
rsiDays_Weekly  = input.float(14.0,  title="RSI (giorni)",         group="Weekly Parameters")
atrDays_Weekly  = input.float(14.0,  title="ATR Period (giorni)",  group="Weekly Parameters")

// [30m Parameters] – MODIFICATI per maggiore reattività:
// EMA veloce ridotta da 0.4 a 0.35; EMA lenta da 1.0 a 0.9; RSI e ATR da 0.5 a 0.45.
fastDays_30m = input.float(0.35, title="EMA Veloce (giorni)", group="30m Parameters")
slowDays_30m = input.float(0.9,  title="EMA Lenta (giorni)",  group="30m Parameters")
rsiDays_30m  = input.float(0.45, title="RSI (giorni)",         group="30m Parameters")
atrDays_30m  = input.float(0.45, title="ATR Period (giorni)",  group="30m Parameters")

// [60m Parameters]
fastDays_60m = input.float(0.6, title="EMA Veloce (giorni)", group="60m Parameters")
slowDays_60m = input.float(1.6, title="EMA Lenta (giorni)",  group="60m Parameters")
rsiDays_60m  = input.float(0.6, title="RSI (giorni)",         group="60m Parameters")
atrDays_60m  = input.float(0.6, title="ATR Period (giorni)",  group="60m Parameters")

// [4h Parameters]
fastDays_4h = input.float(1.3, title="EMA Veloce (giorni)", group="4h Parameters")
slowDays_4h = input.float(3.5, title="EMA Lenta (giorni)",  group="4h Parameters")
rsiDays_4h  = input.float(1.3, title="RSI (giorni)",         group="4h Parameters")
atrDays_4h  = input.float(1.3, title="ATR Period (giorni)",  group="4h Parameters")

// [5m Parameters]
fastDays_5m = input.float(0.15, title="EMA Veloce (giorni)", group="5m Parameters")
slowDays_5m = input.float(0.45, title="EMA Lenta (giorni)",  group="5m Parameters")
rsiDays_5m  = input.float(0.15, title="RSI (giorni)",         group="5m Parameters")
atrDays_5m  = input.float(0.15, title="ATR Period (giorni)",  group="5m Parameters")

// =====================
// SELEZIONE DEI PARAMETRI IN BASE AL TIMEFRAME CORRENTE
// Se il timeframe corrente non corrisponde a nessuna categoria, uso i parametri Daily.
fastDays = (resString=="D" or resString=="1D")      ? fastDays_Daily  : 
           (resString=="W" or resString=="1W")      ? fastDays_Weekly : 
           (resString=="30")                        ? fastDays_30m    : 
           (resString=="60")                        ? fastDays_60m    : 
           (resString=="240")                       ? fastDays_4h     : 
           (resString=="5")                         ? fastDays_5m     : fastDays_Daily

slowDays = (resString=="D" or resString=="1D")      ? slowDays_Daily  : 
           (resString=="W" or resString=="1W")      ? slowDays_Weekly : 
           (resString=="30")                        ? slowDays_30m    : 
           (resString=="60")                        ? slowDays_60m    : 
           (resString=="240")                       ? slowDays_4h     : 
           (resString=="5")                         ? slowDays_5m     : slowDays_Daily

rsiDays  = (resString=="D" or resString=="1D")      ? rsiDays_Daily   : 
           (resString=="W" or resString=="1W")      ? rsiDays_Weekly  : 
           (resString=="30")                        ? rsiDays_30m     : 
           (resString=="60")                        ? rsiDays_60m     : 
           (resString=="240")                       ? rsiDays_4h      : 
           (resString=="5")                         ? rsiDays_5m      : rsiDays_Daily

atrDays  = (resString=="D" or resString=="1D")      ? atrDays_Daily   : 
           (resString=="W" or resString=="1W")      ? atrDays_Weekly  : 
           (resString=="30")                        ? atrDays_30m     : 
           (resString=="60")                        ? atrDays_60m     : 
           (resString=="240")                       ? atrDays_4h      : 
           (resString=="5")                         ? atrDays_5m      : atrDays_Daily

// =====================
// Conversione dei periodi (espresso in "giorni") in numero di barre
fastPeriod = intraday ? math.round(fastDays * barsPerDay) : math.round(fastDays)
slowPeriod = intraday ? math.round(slowDays * barsPerDay) : math.round(slowDays)
rsiPeriod  = intraday ? math.round(rsiDays * barsPerDay)  : math.round(rsiDays)
atrPeriod  = intraday ? math.round(atrDays * barsPerDay)  : math.round(atrDays)

// =====================
// Definizione dei colori "color-blind friendly" (palette Okabe-Ito)
// EMA Veloce: Blu (RGB 0,114,178)
// EMA Lenta: Arancione (RGB 230,159,0)
// Stop Loss: Vermilion (RGB 213,94,0)
// Profit Target: Azzurro (RGB 86,180,233)
emaFastColor = color.rgb(0,114,178)
emaSlowColor = color.rgb(230,159,0)
stopColor    = color.rgb(213,94,0)
targetColor  = color.rgb(86,180,233)

// =====================
// Calcolo degli indicatori
emaFast  = ta.ema(close, fastPeriod)
emaSlow  = ta.ema(close, slowPeriod)
rsiValue = ta.rsi(close, rsiPeriod)
atrValue = ta.atr(atrPeriod)

// =====================
// Input per la gestione del rischio (modificabili via form)
atrStopMult   = input.float(3.0, title="Moltiplicatore ATR per Stop Loss", step=0.1)
atrProfitMult = input.float(1.5, title="Moltiplicatore ATR per Profit Target", step=0.1)

// NUOVO: Abilitazione del Trailing Stop Dinamico
enableTrailingStop = input.bool(true, title="Abilita Trailing Stop Dinamico")
atrTrailMult       = input.float(1.0, title="Moltiplicatore ATR per Trailing Stop", step=0.1)

// =====================
// Condizioni di ingresso
// Long: quando l'EMA veloce incrocia al rialzo quella lenta e l'RSI è > 50
longCondition = ta.crossover(emaFast, emaSlow) and (rsiValue > 50)
// Short: quando l'EMA veloce incrocia al ribasso quella lenta e l'RSI è < 50
shortCondition = ta.crossunder(emaFast, emaSlow) and (rsiValue < 50)

// Calcolo dei livelli fissi di stop loss e profit target basati sull'ATR
longStop   = close - atrValue * atrStopMult
longTarget = close + atrValue * atrProfitMult
shortStop  = close + atrValue * atrStopMult
shortTarget= close - atrValue * atrProfitMult

// =====================
// Plot degli indicatori
plot(emaFast, title="EMA Veloce", color=emaFastColor)
plot(emaSlow, title="EMA Lenta", color=emaSlowColor)
hline(50, title="RSI 50", color=color.gray, linestyle=hline.style_dotted)
plot(rsiValue, title="RSI", color=color.blue, display=display.none)

// =====================
// Logica degli ingressi e gestione delle posizioni (attiva solo se time >= startDate)

if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
// Per le uscite, se il trailing stop dinamico è abilitato, lo usiamo; altrimenti l'uscita fissa
if (strategy.position_size > 0)
    if (enableTrailingStop)
        strategy.exit("Exit Long", from_entry="Long", trail_offset=atrValue * atrTrailMult, limit=longTarget)
    else
        strategy.exit("Exit Long", from_entry="Long", stop=longStop, limit=longTarget)
        
if (strategy.position_size < 0)
    if (enableTrailingStop)
        strategy.exit("Exit Short", from_entry="Short", trail_offset=atrValue * atrTrailMult, limit=shortTarget)
    else
        strategy.exit("Exit Short", from_entry="Short", stop=shortStop, limit=shortTarget)

// =====================
// Plot dei livelli di Stop Loss e Profit Target quando in posizione
plot(strategy.position_size > 0 ? longStop   : na, title="Stop Loss",   style=plot.style_linebr, color=stopColor)
plot(strategy.position_size > 0 ? longTarget : na, title="Profit Target", style=plot.style_linebr, color=targetColor)
plot(strategy.position_size < 0 ? shortStop  : na, title="Stop Loss",   style=plot.style_linebr, color=stopColor)
plot(strategy.position_size < 0 ? shortTarget: na, title="Profit Target", style=plot.style_linebr, color=targetColor)