মাল্টিপল অসিলেটর মোমেন্টাম ফিল্টার করা গড় রিভার্সন বিটকয়েন ট্রেডিং কৌশল

RSI WT STOCH RSI MEAN REVERSION OSCILLATOR SCALPING FIBONACCI momentum
সৃষ্টির তারিখ: 2025-08-15 12:00:17 অবশেষে সংশোধন করুন: 2025-08-15 12:00:17
অনুলিপি: 0 ক্লিকের সংখ্যা: 286
2
ফোকাস
319
অনুসারী

মাল্টিপল অসিলেটর মোমেন্টাম ফিল্টার করা গড় রিভার্সন বিটকয়েন ট্রেডিং কৌশল মাল্টিপল অসিলেটর মোমেন্টাম ফিল্টার করা গড় রিভার্সন বিটকয়েন ট্রেডিং কৌশল

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটি তিনটি মূল প্রযুক্তিগত সূচকের উপর ভিত্তি করে কাজ করেঃ

  1. আরএসআই চ্যানেলকৌশলটি আরএসআইয়ের ওভারবয় (৭০) এবং ওভারসোল (৩০) স্তরের উপর ভিত্তি করে আরএসআইয়ের একটি উন্নত সংস্করণ ব্যবহার করে, দামের উচ্চতর, নিম্নতর এবং মধ্যম ট্র্যাকগুলি গণনা করে। যখন দাম নিম্নতর ট্র্যাকটি ভেঙে দেয় তখন একটি মাল্টিসিগন্যাল তৈরি হয় এবং যখন এটি উচ্চতর ট্র্যাকটি ভেঙে যায় তখন একটি শূন্য সংকেত তৈরি হয়। এই প্রক্রিয়াটি বাজারের গড় মানের প্রত্যাবর্তনের বৈশিষ্ট্যটি ব্যবহার করে।

  2. ওয়েভট্রেন্ড (WT) সূচক: LazyBear এর WT1 সূচক ব্যবহার করে, ডিফল্টরূপে চ্যানেল দৈর্ঘ্য 11 এবং গড় দৈর্ঘ্য 12 সেট করা হয়েছে। ওভারবয় লেভেল +60 এবং ওভারসেল লেভেল -60। এই সূচকটি একটি গতিশীল ওসিলার যা বাজারটি ওভারবয় বা ওভারসেল অবস্থায় রয়েছে কিনা তা নির্ধারণ করতে ব্যবহৃত হয়।

  3. স্টোক্যাস্টিক আরএসআই: শুধুমাত্র K লাইন ব্যবহার করে, K দৈর্ঘ্য 5 সেট করুন, আরএসআই দৈর্ঘ্য 14 এবং এলোমেলো দৈর্ঘ্য 10। এই সূচকটি বাজার ওভার-বিক্রয় ওভার-বিক্রয় অবস্থা আরও নিশ্চিত করে, সংকেতের নির্ভরযোগ্যতা বাড়ায়।

কৌশলটির সংকেত উত্পাদন লজিক নিম্নরূপঃ

  • অতিরিক্ত সংকেতঃ দাম RSI ট্র্যাকের নীচে পড়ে এবং WT সূচকটি ওভারসোল্ডের নীচে ((-60) AND এলোমেলো RSI এর K মান ওভারসোল্ডের নীচে ((0+ tolerance)
  • ফাঁকা সংকেতঃ মূল্য RSI ট্র্যাকের উপরে এবং WT সূচকটি ওভার-বই স্তরের উপরে ((+60) AND এলোমেলো RSI এর K মান ওভার-বই স্তরের উপরে ((100-ক্যাম্পাস)

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

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

এই কৌশল কোডের গভীর বিশ্লেষণে নিম্নলিখিত উল্লেখযোগ্য সুবিধাগুলির কথা বলা যায়ঃ

  1. মাল্টি ফিল্টারিং সিস্টেম: তিনটি ভিন্ন প্রযুক্তিগত সূচক (আরএসআই চ্যানেল, ওয়েভট্রেন্ড এবং এলোমেলো আরএসআই) একত্রিত করে একটি শক্তিশালী মাল্টি-লেয়ার ফিল্টারিং সিস্টেম তৈরি করা হয়েছে, যা ভুয়া ব্রেকআউটের ঝুঁকি হ্রাস করে এবং ট্রেডিং সিগন্যালের গুণমান এবং নির্ভরযোগ্যতা বৃদ্ধি করে।

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

  3. কার্যকর ঝুঁকি ব্যবস্থাপনা বিল্ট-ইন শতাংশ স্টপ-অফ-লস সিস্টেম, যা প্রতিটি লেনদেনের রিস্ক-রিটার্ন অনুপাতকে সঠিকভাবে নিয়ন্ত্রণ করে, তহবিল সুরক্ষিত করে।

  4. স্বয়ংক্রিয় সতর্কতা ব্যবস্থা: টেলিগ্রাম সতর্কতা ফাংশন সমন্বিত, ট্রেডিং সংকেতগুলির রিয়েল-টাইম বিজ্ঞপ্তি উপলব্ধ, যা ব্যবসায়ীদের সময়মত ট্র্যাকিং এবং লেনদেন সম্পাদন করতে সহায়তা করে।

  5. জঞ্জালবিরোধী তথ্য ব্যবস্থা: কৌশলটি পুনরাবৃত্তির সতর্কতা প্রতিরোধের ব্যবস্থা বাস্তবায়ন করে, একই K-লাইনের মধ্যে কেবলমাত্র একবার সংকেত প্রেরণ করা নিশ্চিত করে, তথ্যের পুনরাবৃত্তি এড়াতে।

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

কৌশলগত ঝুঁকি

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

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

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

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

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

  5. সিস্টেম ঝুঁকি: টেলিগ্রাম নোটিফিকেশন সিস্টেমের উপর নির্ভর করে, যদি নোটিফিকেশন সিস্টেমটি ব্যর্থ হয় তবে ব্যবসায়ের সুযোগগুলি মিস হতে পারে। সমাধানঃ ব্যাকআপ নোটিফিকেশন চ্যানেল বা স্থানীয় সতর্কতা ব্যবস্থা বাস্তবায়ন।

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

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

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

  2. মাল্টি টাইম ফ্রেম বিশ্লেষণ: বাজার প্রবণতা তথ্যকে উচ্চতর সময় ফ্রেমের সাথে একত্রিত করুন, কেবলমাত্র মূল প্রবণতার দিকনির্দেশে ট্রেড করুন, বা বিভিন্ন প্রবণতার শর্তে বিভিন্ন প্যারামিটার সেট ব্যবহার করুন। উদাহরণস্বরূপ, আপনি একটি দৈনিক বা 4 ঘন্টা প্রবণতা বিচার করতে পারেন, কেবলমাত্র উত্থানের প্রবণতা এবং কেবলমাত্র নীচের প্রবণতার জন্য খালি।

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

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

  5. মেশিন লার্নিং এলিমেন্ট যোগ করুন: মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে স্বয়ংক্রিয়ভাবে সর্বোত্তম প্যারামিটার সমন্বয় বা সিগন্যাল কার্যকারিতা পূর্বাভাস দেয়। ঐতিহাসিক ডেটা প্রশিক্ষণ মডেলের মাধ্যমে প্রতিটি ট্রেডিং সিগন্যালকে সম্ভাব্যতা ওজন দেওয়া হয়।

  6. ঝুঁকি ব্যবস্থাপনা: অ্যাকাউন্টের নিট মূল্যের উপর ভিত্তি করে গতিশীল অবস্থানের স্কেল সমন্বয় অর্জন করুন, ক্রমাগত ক্ষতির পরে লেনদেনের আকার হ্রাস করুন, ক্রমাগত লাভের পরে লেনদেনের আকার বাড়ান, আরও বৈজ্ঞানিক তহবিল পরিচালনা করুন।

সারসংক্ষেপ

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

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

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

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

//@version=5
strategy("RS BTC 1", overlay=true, max_labels_count=500, initial_capital=100, commission_type=strategy.commission.percent, commission_value=0.003, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_every_tick=true, process_orders_on_close=false, pyramiding=0)

// ==== Inputs
// RSI Bands
rsiLen   = input.int(14, "RSI Length")
obLevel  = input.int(70, "RSI Overbought")
osLevel  = input.int(30, "RSI Oversold")

// WT (LazyBear)
wtLen1   = input.int(11, "WT Channel Length")
wtLen2   = input.int(12, "WT Avg Length")
wtOB     = input.float( 60.0, "WT Overbought (+)")
wtOS     = input.float(-60.0, "WT Oversold (-)")

// Stoch RSI (sadece K filtresi)
kLen     = input.int(5,  "StochRSI K")
rsiLenSR = input.int(14, "StochRSI RSI Length")
stLen    = input.int(10, "Stoch Length")
rsiSrc   = input.source(close, "RSI Source")
stochOB  = input.float(100.0, "StochRSI OB (K ≥)", step=0.1)
stochOS  = input.float(0.0,   "StochRSI OS (K ≤)", step=0.1)
eps      = input.float(0.5,   "Tolerance around 0/100", step=0.1)

// Tetik modu
triggerMode = input.string("Cross(close)", "Trigger mode", options=["Cross(close)","Touch(wick)"])
showMid     = input.bool(true,  "Show RSI mid band")

// Çıkış seçenekleri
useReverseExit = input.bool(true,  "Exit & reverse on opposite band cross (swing)")
useTP          = input.bool(true,  "Enable Take Profit %")
useSL          = input.bool(true,  "Enable Stop Loss %")
tpPerc         = input.float(1.00, "TP %", step=0.01, minval=0.01)
slPerc         = input.float(1.00, "SL %", step=0.01, minval=0.01)

// ==== RSI Bands (LazyBear) – Mantık aynı, sadece ince çizgi
src = close
ep  = 2 * rsiLen - 1
auc = ta.ema(math.max(src - src[1], 0), ep)
adc = ta.ema(math.max(src[1] - src, 0), ep)
x1  = (rsiLen - 1) * (adc * obLevel / (100 - obLevel) - auc)
x2  = (rsiLen - 1) * (adc * osLevel / (100 - osLevel) - auc)
ub  = x1 >= 0 ? src + x1 : src + x1 * (100 - obLevel) / obLevel
lb  = x2 >= 0 ? src + x2 : src + x2 * (100 - osLevel) / osLevel
mid = (ub + lb) / 2.0

plot(ub,  "RSI Upper", color=color.yellow, linewidth=1)
plot(lb,  "RSI Lower", color=color.aqua,   linewidth=1)
plot(showMid ? mid : na, "RSI Mid", color=color.gray, linewidth=1)

// ==== WaveTrend (LazyBear WT1)
ap  = hlc3
esa = ta.ema(ap, wtLen1)
d   = ta.ema(math.abs(ap - esa), wtLen1)
ci  = (ap - esa) / (0.015 * d)
wt1 = ta.ema(ci, wtLen2)

// ==== Stoch RSI K (0..100)
rsiVal   = ta.rsi(rsiSrc, rsiLenSR)
stochRaw = ta.stoch(rsiVal, rsiVal, rsiVal, stLen)
stochK   = ta.sma(stochRaw, kLen)

// ==== Sinyaller
longCrossRaw  = triggerMode == "Cross(close)" ? ta.crossunder(close, lb) : ta.crossunder(low,  lb)
shortCrossRaw = triggerMode == "Cross(close)" ? ta.crossover( close, ub) : ta.crossover( high, ub)

stochLongOK  = stochK <= (stochOS + eps)
stochShortOK = stochK >= (stochOB - eps)
wtLongOK     = wt1 < wtOS
wtShortOK    = wt1 > wtOB

longSig_raw  = longCrossRaw  and wtLongOK  and stochLongOK
shortSig_raw = shortCrossRaw and wtShortOK and stochShortOK

longSig  = useReverseExit ? longSig_raw  : (longSig_raw  and strategy.position_size == 0)
shortSig = useReverseExit ? shortSig_raw : (shortSig_raw and strategy.position_size == 0)

// ==== İşlemler
if longSig
    if useReverseExit and strategy.position_size < 0
        strategy.close("S")
    if strategy.position_size <= 0
        strategy.entry("L", strategy.long)

if shortSig
    if useReverseExit and strategy.position_size > 0
        strategy.close("L")
    if strategy.position_size >= 0
        strategy.entry("S", strategy.short)

// ==== TP / SL
if strategy.position_size > 0 and (useTP or useSL)
    longEntryPrice = strategy.position_avg_price
    longTP  = useTP ? longEntryPrice * (1 + tpPerc/100.0) : na
    longSL  = useSL ? longEntryPrice * (1 - slPerc/100.0) : na
    strategy.exit(id="L-EXIT", from_entry="L", limit=longTP, stop=longSL)

if strategy.position_size < 0 and (useTP or useSL)
    shortEntryPrice = strategy.position_avg_price
    shortTP = useTP ? shortEntryPrice * (1 - tpPerc/100.0) : na
    shortSL = useSL ? shortEntryPrice * (1 + slPerc/100.0) : na
    strategy.exit(id="S-EXIT", from_entry="S", limit=shortTP, stop=shortSL)


// ==== ENTRY alert (tek bar / tek kez) ====
// TV Alert -> Condition: Any alert() function call
// Webhook  -> https://api.telegram.org/bot<YOUR_TOKEN>/sendMessage
// Message  -> BOŞ (alert() JSON yolluyor)

chatId   = input.string("-1002849453919", "Telegram chat_id (channel)")
lotTxt   = input.string("0.20", "Lot (text)")
tpPips   = input.int(10000,  "TP (pip)")   // SL yok

makeJson(_txt) => '{"chat_id":"' + chatId + '","text":"' + _txt + '"}'

// MT5 sembolü sabit
longTxt  = 'BUY BTCUSD# '  + lotTxt + ' TP=' + str.tostring(tpPips) + 'pip'
shortTxt = 'SELL BTCUSD# ' + lotTxt + ' TP=' + str.tostring(tpPips) + 'pip'

// Giriş oldu mu? (bar içinde)
enteredLong  = strategy.position_size >  0 and strategy.position_size[1] <= 0
enteredShort = strategy.position_size <  0 and strategy.position_size[1] >= 0

// --- anti-spam: aynı barda yalnızca 1 kere gönder ---
var int  lastEntryBar = na
var int  lastDir      = 0   // +1: long, -1: short

if enteredLong and (lastEntryBar != bar_index or lastDir != 1)
    alert(makeJson(longTxt), alert.freq_once_per_bar)   // tek gönderim
    lastEntryBar := bar_index
    lastDir      := 1

if enteredShort and (lastEntryBar != bar_index or lastDir != -1)
    alert(makeJson(shortTxt), alert.freq_once_per_bar)
    lastEntryBar := bar_index
    lastDir      := -1