​تشخیص کندل جدید در MQL5 با کد IsNewBar

مقدمه :

در دنیای معاملات الگوریتمی و نوشتن اکسپرت‌ها در متاتریدر ۵، شناسایی زمان شروع یک کندل جدید می‌تواند نقش کلیدی در بهینه‌سازی استراتژی‌های معاملاتی ایفا کند. تابع IsNewBar در MQL5 به شما کمک می‌کند تا با دقت بالا مشخص کنید که آیا یک کندل جدید در هر تایم‌فریمی شروع شده است یا خیر. این تابع برای جلوگیری از محاسبات تکراری و مدیریت دقیق‌تر سیگنال‌ها ضروری است.

کاربرد تابع در معاملات الگوریتمی

چرا تابع IsNewBar مهم است؟
جلوگیری از محاسبات تکراری: در اکسپرت‌نویسی، بسیاری از محاسبات (مثل بررسی شاخص‌ها) فقط در ابتدای هر کندل جدید لازم است. این تابع از اجرای مکرر کدها جلوگیری می‌کند.
مدیریت سیگنال‌ها: شناسایی کندل جدید به شما کمک می‌کند تا تصمیمات معاملاتی را فقط در زمان مناسب اعمال کنید.
بهینه‌سازی عملکرد: با کاهش تعداد محاسبات غیرضروری، بار پردازشی کاهش می‌یابد و اکسپرت شما سریع‌تر کار می‌کند.
سناریوهای کاربردی: ارسال سفارش‌ها در ابتدای هر کندل جدید.
محاسبه شاخص‌های تکنیکال مثل RSI، Moving Average و … فقط در زمان شروع کندل.
تست استراتژی‌های معاملاتی که به تایم‌فریم‌های مختلف وابسته هستند.

کد کامل تابع:

				
					bool IsNewBar(ENUM_TIMEFRAMES timeframe) {
    static datetime lastBarTime = 0; // زمان بار قبلی
    datetime currentBarTime = iTime(_Symbol, timeframe, 0); // زمان بار فعلی

    if (currentBarTime == lastBarTime) {
        return false; // اگر زمان بار فعلی برابر با بار قبلی باشد، بار جدیدی نیست
    }

    lastBarTime = currentBarTime; // به‌روزرسانی زمان بار قبلی
    return true; // بار جدید شناسایی شد
}
				
			

توضیح خط‌به‌خط کد IsNewBar:

متغیر lastBarTime:

این متغیر به صورت static تعریف شده است، بنابراین مقدار آن بین فراخوانی‌های متوالی تابع حفظ می‌شود.
این ویژگی به ما امکان می‌دهد که زمان آخرین کندل را ذخیره کنیم و با زمان فعلی مقایسه کنیم.

تابع iTime:

این تابع زمان اولین کندل (Index 0) در تایم‌فریم مشخص‌شده را برمی‌گرداند.
_Symbol نماد فعلی را نشان می‌دهد و timeframe تایم‌فریم مورد نظر را تعیین می‌کند.

شرط if (currentBarTime == lastBarTime):

اگر زمان فعلی برابر با زمان آخرین کندل باشد، به این معنی است که هنوز کندل جدیدی شروع نشده است.

به‌روزرسانی lastBarTime:

اگر کندل جدیدی شروع شده باشد، زمان فعلی در متغیر lastBarTime ذخیره می‌شود.

خروجی تابع:

اگر کندل جدیدی شروع شده باشد، تابع مقدار true برمی‌گرداند. در غیر این صورت مقدار false بازمی‌گرداند.

نحوه استفاده کد IsNewBar در یک اکسپرت واقعی:

برای استفاده از تابع IsNewBar در یک اکسپرت، می‌توانید آن را در تابع OnTick قرار دهید و فقط در زمان شروع کندل جدید عملیات معاملاتی انجام دهید. مثال زیر نشان می‌دهد که چطور می‌توانید از این تابع استفاده کنید:

				
					void OnTick() {
    if (IsNewBar(PERIOD_M15)) { // بررسی شروع کندل جدید در تایم‌فریم ۱۵ دقیقه‌ای
        Print("A new bar has started on M15!");
        // انجام محاسبات یا ارسال سفارش در اینجا
    }
}
				
			

جمع‌بندی و نکات پایانی:

مزایای استفاده از تابع IsNewBar:
جلوگیری از محاسبات تکراری.
افزایش دقت در تصمیم‌گیری‌های معاملاتی.
بهینه‌سازی عملکرد اکسپرت‌ها.

اگر به دنبال توابع بیشتر برای توسعه اکسپرت‌های حرفه‌ای هستید، می‌توانید سایر توابع موجود در کتابخانه ما را مشاهده کنید. همچنین، برای یادگیری جامع‌تر اکسپرت‌نویسی در MQL5، می‌توانید در دوره‌های آموزشی ما ثبت‌نام کنید.

دوره های بورس 90

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *