2
ফোকাস
319
অনুসারী

প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: "অস্থিরতা পরিসংখ্যানগত সালিসি" এর একটি শেখার অনুশীলন

তৈরি: 2025-06-26 14:33:24, আপডেট করা হয়েছে: 2025-07-01 09:25:31
comments   0
hits   905

প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: “অস্থিরতা পরিসংখ্যানগত সালিসি” এর একটি শেখার অনুশীলন

কৌশলগত চিন্তাভাবনার উৎস

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

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

প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: “অস্থিরতা পরিসংখ্যানগত সালিসি” এর একটি শেখার অনুশীলন

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

কৌশল নীতি

মূল যুক্তি খুবই সহজ।

এই কৌশলের মূল যুক্তি আসলে খুবই সহজ এবং কয়েকটি বাক্যে সংক্ষিপ্ত করা যেতে পারে:

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

কেন এটা কাজ করতে পারে?

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

  • বিনিয়োগকারীরা আতঙ্কিত এবং অযৌক্তিকভাবে বিক্রি করতে পারেন।
  • বড় অর্ডার বা ব্রেকিং নিউজের কারণে দামের অতিরিক্ত প্রতিক্রিয়া
  • কারিগরি সূচক অতিরিক্ত বিক্রি হওয়ার পর স্বাভাবিক সংশোধন চাহিদা

অবশ্যই, এটি কেবল একটি তাত্ত্বিক অনুমান, এবং প্রকৃত প্রভাব এখনও তথ্য দ্বারা যাচাই করা প্রয়োজন।

FMZ প্ল্যাটফর্ম লেখার প্রক্রিয়া

FMZ প্ল্যাটফর্ম বেছে নেওয়ার কারণ

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

লেখার সময় চিন্তাভাবনা

1. প্যারামিটার সেটিং জট

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

  • ATR সময়কাল: ১৪ (ক্লাসিক সেটিং)
  • ATR মাল্টিপল থ্রেশহোল্ড: 2.0 (খুব সংবেদনশীলও নয় আবার অসংবেদনশীলও নয়)
  • চলমান গড় সময়কাল: ২০ (স্বল্পমেয়াদী প্রবণতা বিচার)

ঝুঁকি নিয়ন্ত্রণের গুরুত্ব

এই প্রবণতার বিরুদ্ধে ট্রেড করার সবচেয়ে বড় ঝুঁকি হল “পাহাড়ের মাঝখান দিয়ে নীচের অংশ কেনা”। তাই আমি সুরক্ষার কয়েকটি স্তর যুক্ত করেছি:

  • একক ঝুঁকি 2% এ নিয়ন্ত্রিত হয়
  • সর্বোচ্চ মোট পদ ১০% এর বেশি হবে না
  • ব্যাচে (পিরামিড কৌশল) অবস্থান বৃদ্ধি করার অনুমতি রয়েছে, তবে কতবার তা নির্ধারণের একটি সীমা রয়েছে।
  • স্টপ লস এবং টেক প্রফিট সুরক্ষা সেট আপ করুন

৩. প্রস্থান প্রক্রিয়ার নকশা

এটি কৌশলের একটি গুরুত্বপূর্ণ অংশ। আমি তিনটি প্রস্থান পরিকল্পনা করেছি:

  • ATR রিগ্রেশন প্রস্থান: অস্থিরতা স্বাভাবিক স্তরে ফিরে এলে চালান (প্রধান প্রস্থান সংকেত)
  • ঐতিহ্যবাহী স্টপ-প্রফিট এবং স্টপ-লস: স্থির শতাংশ সুরক্ষা (ঝুঁকি নিয়ন্ত্রণের মূল কথা)
  • ব্লেন্ডিং মোড:উভয় পদ্ধতি একই সময়ে সক্রিয় করা হয়

কোড বাস্তবায়নের কিছু বিবরণ

// 核心判断逻辑
atr = ta.atr(atr_period)
atr_ma = ta.sma(atr, mean_period)
price_ma = ta.sma(close, mean_period)

// 开仓条件:下跌 + 高波动
high_volatility = atr > atr_ma * atr_multiplier
price_decline = close < price_ma
long_condition = price_decline and high_volatility

এই কোডটি কৌশলটির মূল বিষয়, যুক্তিটি খুবই সহজ, কোনও অভিনব কিছু নয়। বিশেষ করে:

ধাপ ১: মৌলিক সূচক গণনা করুন

  • atr = ta.atr(atr_period): বর্তমান ATR মান গণনা করুন, এই সূচকটি মূল্যের ওঠানামার পরিসর প্রতিফলিত করে
  • atr_ma = ta.sma(atr, mean_period): ATR এর চলমান গড় গণনা করে, যা “স্বাভাবিক” অস্থিরতার স্তরকে প্রতিনিধিত্ব করে।
  • price_ma = ta.sma(close, mean_period): ট্রেন্ডের দিক নির্ধারণ করতে মূল্যের চলমান গড় গণনা করুন।

ধাপ ২: ট্রিগার শর্তগুলি সংজ্ঞায়িত করুন

  • high_volatility = atr > atr_ma * atr_multiplier:বর্তমান অস্থিরতা কি অস্বাভাবিকভাবে বেশি? যদি বর্তমান ATR ATR গড়ের (ডিফল্ট) 2 গুণ বেশি হয়, তাহলে এটি “অস্বাভাবিক অস্থিরতা” হিসাবে বিবেচিত হবে।
  • price_decline = close < price_ma:দাম কি কমছে? যদি বর্তমান দাম চলমান গড়ের নিচে থাকে, তাহলে তা পতনশীল বলে বিবেচিত হবে।
  • long_condition = price_decline and high_volatility: আরও খোলার জন্য একই সাথে দুটি শর্ত পূরণ করা হয়

মূল ধারণার মূর্ত প্রতীক এই কোড লাইনগুলি কৌশলটির মূল ধারণাটি প্রতিফলিত করে: আমরা সর্বদা প্রবণতার বিরুদ্ধে যাই না, বরং সেই মুহুর্তের জন্য অপেক্ষা করি যখন “দাম কমছে, কিন্তু অস্থিরতা হঠাৎ বেড়ে যায়”। এই মুহূর্তটির অর্থ প্রায়শই হঠাৎ ঘটনা বা আতঙ্ক দেখা দেয় এবং দামগুলি অতিরিক্ত প্রতিক্রিয়া দেখাতে পারে, যা আমাদেরকে প্রবণতা-বিরোধী ট্রেডিংয়ের সুযোগ প্রদান করে।

প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: “অস্থিরতা পরিসংখ্যানগত সালিসি” এর একটি শেখার অনুশীলন

ব্যাকটেস্টিং ফলাফল

পরীক্ষার পরিবেশ সেটআপ

  • সময়সীমা: ৫ জুন, ২০২৪ থেকে ৫ জুন, ২০২৫ (এক বছরের তথ্য, লিভারেজবিহীন)
  • সময়কাল:৫ মিনিটের কে-লাইন
  • পরীক্ষার জাত:ETH, XRP এবং অন্যান্য ক্রিপ্টোকারেন্সি চুক্তি
  • খোলা পদের সংখ্যা: পিরামিডিং ৫, প্রতিবার ২টি লটে সেট করা আছে, সর্বোচ্চ ১০টি লট পর্যন্ত

প্রকৃত পরীক্ষার ফলাফল

XRP ব্যাকটেস্ট পারফরম্যান্স:

  • পজিশন খোলার তুলনামূলকভাবে বেশি সুযোগ রয়েছে (ছোট মুদ্রায় বড় ওঠানামার বৈশিষ্ট্য থাকে)
  • কৌশলটি বেশ কয়েকটি ভালো রিবাউন্ড অর্জন করেছে
  • সামগ্রিক পারফরম্যান্স প্রত্যাশা পূরণ করেছে

প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: “অস্থিরতা পরিসংখ্যানগত সালিসি” এর একটি শেখার অনুশীলন প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: “অস্থিরতা পরিসংখ্যানগত সালিসি” এর একটি শেখার অনুশীলন

ETH ব্যাকটেস্ট পারফরম্যান্স:

  • পজিশন খোলার সুযোগ তুলনামূলকভাবে কম (মূলধারার কয়েন তুলনামূলকভাবে স্থিতিশীল)
  • তবে, হ্যান্ডলিং ফি বেশি, যা আয়ের উপর একটি নির্দিষ্ট প্রভাব ফেলে
  • প্রত্যাশা পূরণ করে

প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: “অস্থিরতা পরিসংখ্যানগত সালিসি” এর একটি শেখার অনুশীলন প্রতি-প্রবণতা স্বল্পমেয়াদী গড় বিপরীতমুখী কৌশলের অন্বেষণ: “অস্থিরতা পরিসংখ্যানগত সালিসি” এর একটি শেখার অনুশীলন

কিছু পর্যবেক্ষণ এবং চিন্তাভাবনা

  1. মূলধারার এবং তুলনামূলকভাবে স্থিতিশীল জাতগুলির জন্য, পদ খোলার সুযোগ কম থাকেETH-এর মতো মূলধারার মুদ্রা খুব কমই প্রয়োজনীয়তা পূরণ করে।

  2. ছোট মুদ্রায় আরও সুযোগ থাকে। XRP এর মতো মুদ্রার অস্থিরতা বেশি থাকে এবং ঘন ঘন পরিস্থিতি তৈরি করে।

  3. ৫ মিনিটের চক্র বেশি উপযুক্তস্বল্প সময়ের শব্দ খুব বেশি হয়, দীর্ঘ সময়ের প্রতিক্রিয়া খুব ধীর হয়।

  4. হ্যান্ডলিং ফি এমন একটি খরচ যা উপেক্ষা করা যায় না।বিশেষ করে উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ের জন্য, হ্যান্ডলিং ফি চূড়ান্ত লাভের উপর উল্লেখযোগ্যভাবে প্রভাব ফেলবে।

সর্বশেষ ভাবনা

আমি যা শিখেছি

এই কৌশল পুনরুৎপাদন আমাকে বেশ কিছু গুরুত্বপূর্ণ বিষয় শিখিয়েছে:

১. সরল যুক্তি প্রায়শই বেশি কার্যকর এই কৌশলের মূল যুক্তি খুবই সহজ, কিন্তু এটি নির্দিষ্ট বাজার পরিবেশে কিছু সুযোগকে কাজে লাগাতে পারে। জটিলতা মানে কার্যকারিতা নয়, এবং কখনও কখনও সহজ এবং সরাসরি পদ্ধতিগুলি আরও ব্যবহারিক।

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

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

কৌশলের সীমাবদ্ধতা

এই অনুশীলনের মাধ্যমে, আমি এই কৌশলের কিছু সীমাবদ্ধতাও দেখতে পেয়েছি:

  1. বাজার পরিবেশের উপর দৃঢ় নির্ভরতা: একতরফা মন্দার বাজারে আপনার ক্রমাগত ক্ষতির সম্মুখীন হতে পারে
  2. উচ্চতর প্যারামিটার সংবেদনশীলতা: বিভিন্ন জাত এবং বাজার পরিবেশ অনুসারে প্যারামিটারগুলি সমন্বয় করা প্রয়োজন।
  3. কোন ঔষধ নয়:শুধুমাত্র নির্দিষ্ট বাজারের পরিস্থিতিতে কার্যকর এবং অন্যান্য কৌশলের সাথে একত্রিত করা প্রয়োজন

পরবর্তী উন্নতির দিকনির্দেশনা

যদি আমরা এই কৌশলটি অপ্টিমাইজ করতে চাই, তাহলে আমার মনে হয় আমরা বিভিন্ন দিক থেকে শুরু করতে পারি:

  1. বাজার পরিবেশ বিচার বৃদ্ধি করুন: স্পষ্ট বিয়ারিশ ট্রেন্ডের সময় পজিশন কমিয়ে দিন অথবা ট্রেডিং বন্ধ করুন
  2. গতিশীল প্যারামিটার সমন্বয়: বাজারের অস্থিরতার বৈশিষ্ট্য অনুসারে স্বয়ংক্রিয়ভাবে ATR থ্রেশহোল্ড সামঞ্জস্য করুন
  3. বহু-বৈচিত্র্যের সমন্বয়: ঝুঁকি ছড়িয়ে দিন এবং কৌশলগত স্থিতিশীলতা উন্নত করুন
  4. উন্নত প্রস্থান প্রক্রিয়া: প্রস্থান সময় অপ্টিমাইজ করার জন্য আরও প্রযুক্তিগত সূচক একত্রিত করা

ধন্যবাদ এবং সারসংক্ষেপ

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

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

যেসব বন্ধুরা পরিমাণগত ট্রেডিং শিখছেন, তাদের জন্য আমার পরামর্শ হল:

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

আমি আশা করি এই অনুসন্ধান সকলের জন্য সহায়ক হবে। বাজার সর্বদা পরিবর্তনশীল, এবং আমাদের শেখা সর্বদা এগিয়ে চলেছে।

কৌশল উৎস:[অস্থিরতা বিস্তার পরিসংখ্যানগত সালিসি], নীতি ঘোষণা করা হয়েছে, জয়ের হার অত্যন্ত বেশি! সুবিধাগুলি আশ্চর্যজনক!


এই নিবন্ধটি শুধুমাত্র শেখা এবং যোগাযোগের জন্য এবং এটি বিনিয়োগ পরামর্শ গঠন করে না। পরিমাণগত ট্রেডিং ঝুঁকিপূর্ণ এবং বাজারে প্রবেশের সময় আপনার সতর্ক থাকা উচিত।

/*backtest
start: 2025-01-01 00:00:00
end: 2025-06-24 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","tradesMode":"1"}]
args: [["v_input_float_4",0.5],["v_input_float_5",1.5],["RunMode",1,358374]]
*/

//@version=5
strategy(title="逆势短线均值回归策略", overlay=false, pyramiding=5)

// ===== INPUT PARAMETERS =====
// 风险管理参数
risk_per_trade = input.float(2.0, title="单次交易风险 (%)", minval=0.1, maxval=10.0, step=0.1)
max_position_size = input.float(10.0, title="最大仓位大小 (%)", minval=1.0, maxval=50.0, step=1.0)

// ATR和波动率参数
atr_period = input.int(14, title="ATR周期", minval=5, maxval=50)
atr_multiplier = input.float(2.0, title="ATR倍数阈值", minval=1.0, maxval=5.0, step=0.1)
mean_period = input.int(20, title="均值回归周期", minval=5, maxval=100)

// 止盈止损参数
use_stop_loss = input.bool(true, title="使用止损")
stop_loss_pct = input.float(3.0, title="止损百分比 (%)", minval=0.5, maxval=10.0, step=0.1)
use_take_profit = input.bool(true, title="使用止盈")
take_profit_pct = input.float(6.0, title="止盈百分比 (%)", minval=1.0, maxval=20.0, step=0.1)

// ATR回归平仓参数
use_atr_exit = input.bool(true, title="使用ATR回归平仓")
atr_exit_threshold = input.float(1.0, title="ATR退出阈值", minval=0.5, maxval=3.0, step=0.1)

// ===== CALCULATIONS =====
// ATR计算
atr = ta.atr(atr_period)
atr_ma = ta.sma(atr, mean_period)

// 价格均线
price_ma = ta.sma(close, mean_period)

// 波动率判断
high_volatility = atr > atr_ma * atr_multiplier

// 下跌判断
price_decline = close < price_ma

// 价格距离均线的偏离度
price_deviation = math.abs(close - price_ma) / price_ma

// ===== ENTRY CONDITIONS =====
// 开多条件:下跌行情 + 高波动率
long_condition = price_decline and high_volatility and strategy.position_size < max_position_size

// ===== EXIT CONDITIONS =====
// ATR回归均值退出条件
atr_mean_reversion = atr <= atr_ma * atr_exit_threshold

// 止损止盈条件
long_stop_loss = strategy.position_avg_price * (1 - stop_loss_pct / 100)
long_take_profit = strategy.position_avg_price * (1 + take_profit_pct / 100)

// ===== STRATEGY EXECUTION =====
// 开多仓
if long_condition
    strategy.entry("Long", strategy.long, qty=risk_per_trade, comment="逆势开多")

// 平仓条件
if strategy.position_size > 0
    // ATR回归平仓
    if use_atr_exit and atr_mean_reversion
        strategy.close("Long", comment="ATR回归平仓")
    
    // 止损
    if use_stop_loss and close <= long_stop_loss
        strategy.close("Long", comment="止损平仓")
    
    // 止盈
    if use_take_profit and close >= long_take_profit
        strategy.close("Long", comment="止盈平仓")

// ===== PLOTTING =====
// 绘制均线
plot(price_ma, color=color.blue, linewidth=2, title="价格均线", overlay=true)

// 绘制ATR
plotchar(high_volatility, "高波动", "▲", location.belowbar, color=color.red, size=size.small)

// 绘制开仓信号
plotshape(long_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.normal, title="开多信号")

// 绘制止盈止损线
if strategy.position_size > 0
    plot(long_stop_loss, color=color.red, style=plot.style_linebr, linewidth=1, title="止损线")
    plot(long_take_profit, color=color.green, style=plot.style_linebr, linewidth=1, title="止盈线")

// ATR指标显示
plot(atr, color=color.purple, title="ATR")
plot(atr_ma, color=color.orange, title="ATR均线")

// ===== ALERTS =====
// 开仓提醒
if long_condition
    alert("逆势开多信号触发", alert.freq_once_per_bar)

// 平仓提醒
if strategy.position_size > 0 and atr_mean_reversion
    alert("ATR回归,建议平仓", alert.freq_once_per_bar)