یکی از ابزارهای کاربردی در برنامهنویسی اکسپرتها برای متاتریدر ۵، شمارندهها (Counters) هستند. این ابزار به شما امکان میدهد کدهای خود را بر اساس تعداد دفعات تکرار یا شرایط مشخص اجرا یا صبر دهید. در این مقاله به شما یاد میدهیم چگونه از این روشها در اکسپرتها استفاده کنید.
۱. شمارش “X” بار و عبور
گاهی لازم است یک بلوک کد تنها پس از شمارش تعداد مشخصی اجرا شود. برای این کار مراحل زیر را دنبال کنید:
مرحله ۱️⃣ – ایجاد متغیر برای تعیین حد شمارش ابتدا یک متغیر ایجاد کنید که حد تعداد دفعات شمارش را مشخص کند. این متغیر میتواند بهعنوان پارامتر ورودی برای اکسپرت تعریف شود تا بتوانید آن را در بهینهسازی تغییر دهید.
مرحله ۲️⃣ – ایجاد متغیر برای ذخیره تعداد شمارش شده یک متغیر دیگر بسازید که نشان دهد چند بار تا کنون شمارش شده است.
مرحله ۳️⃣ – مقایسه شمارنده با حد تعیین شده وقتی شمارنده به حد تعیین شده رسید، زمان اجرای بلوک کد مورد نظر فرا رسیده است.
مرحله ۴️⃣ – ریست کردن شمارنده بعد از اجرای کد، حتماً شمارنده را ریست کنید تا دوباره شروع به شمارش کند. در غیر این صورت شمارش به صورت بینهایت ادامه پیدا میکند.
نکته: شما میتوانید شرایط فیلتر برای شمارنده هم تعریف کنید. به عنوان مثال:
“اگر شرط خاصی درست بود، یک بار شمارش کن.”
input int count = 50; // Set the counting limit as an input
int Counter; // counter variable
// Expert Initializing --------------------
int OnInit()
{
return(INIT_SUCCEEDED);
}
// Expert DeInitializing -------------------
void OnDeinit(const int reason)
{
}
// Expert OnTick --------------------------
void OnTick()
{
Counter ++; // add 1 to the counter on each tick.
Comment("Current Count -:", Counter);
if(Counter == count) // Count "X" times and pass | This block Executed only once per each count.
{
// Your code goes here......
Alert(count," Times counted");
Counter = 0; // Reset the counter at the end of your code block. This is must.
}
} // OnTick End <<----------------------

۲. عبور “X” بار و سپس صبر “X” بار
این روش به شما امکان میدهد پس از عبور یک بلوک کد، به تعداد مشخص صبر کنید و دوباره اجرا کنید. این مدل کاربرد زیادی در مدیریت زمانبندی سیگنالها دارد.
مرحله ۱️⃣ – تعیین حد شمارش و حد صبر دو متغیر بسازید: یکی برای حد شمارش و دیگری برای حد صبر. این متغیرها هم میتوانند پارامتر ورودی برای اکسپرت باشند تا در بهینهسازی قابل تغییر باشند.
مرحله ۲️⃣ – ذخیره تعداد شمارش و صبر یک متغیر دیگر بسازید که نشان دهد چند بار شمارش شده و چند بار صبر کردهایم.
مرحله ۳️⃣ – عبور پس از رسیدن به حد شمارش وقتی شمارنده به حد تعیین شده رسید، بلوک کد مورد نظر اجرا میشود.
مرحله ۴️⃣ – صبر پس از رسیدن به حد صبر وقتی صبرکننده به حد صبر رسید، اجرای کد به مدت مشخصی متوقف میشود.
مرحله ۵️⃣ – ریست کردن شمارنده و صبرکننده بعد از پایان صبر، حتماً شمارنده و صبرکننده را ریست کنید تا چرخه دوباره شروع شود.
input int count = 50; // Set the counting limit as an input
input int wait = 50; // Set the waiting limit as an input
int Counter; // counter variable default value is "0"
int Waiter; // Waiting variable default value is "0"
// Expert Initializing --------------------
int OnInit()
{
return(INIT_SUCCEEDED);
}
// Expert DeInitializing -------------------
void OnDeinit(const int reason)
{
}
// Expert OnTick --------------------------
void OnTick()
{
Comment("Counted Ticks -: ", Counter, "\n", "Waited Ticks -: ", Waiter);
if(Counter < count) // Pass "X" times
{
Counter++; // update the counter
// Your code goes here.
}
else
if(Waiter < wait) // Wait for "X" times
{
Waiter++; // update the waiter
// Your code goes here.
}
if(Waiter == wait) // Waiting Limit is reached
{
Counter = 0; // reset counter
Waiter = 0; // reset waiter
}
} // OnTick End <<----------------------
//+------------------------------------------------------------------+
نکته: شما میتوانید برای بلوک شمارنده و صبرکننده هم شرایط فیلتر تعریف کنید، مثلا:
“اگر این شرط درست بود، کمی صبر کن.”
با استفاده از شمارندهها و صبرکنندهها میتوانید کدهای اکسپرت خود را کنترل شده و هوشمندانه اجرا کنید. این روشها باعث میشوند که اجرای کدها بهینه و قابل پیشبینی باشد و از اجرای بیرویه جلوگیری شود.
مزایا:





