در بخش های اول ، برخی از مفاهیم اساسی زبان برنامه نویسی MQL4 را پوشش می دهیم. حال اجازه دهید ما مطالعه کنیم که چگونه یک برنامه به طور کلی سازماندهی می شود. برای حل این مشکل ، طرح ساختاری آن را بررسی خواهیم کرد.
همانطور که در بالا ذکر شد ، کد برنامه اصلی که توسط یک برنامه نویس نوشته شده است در توابع تعریف شده توسط کاربر و ویژه قرار می گیرد. در توابع ، ما در مورد مفهوم و خصوصیات توابع داخلی و تعریف شده توسط کاربر بحث می کنیم. به طور خلاصه ، یک تابع تعریف شده توسط کاربر توضیحی دارد و برای شروع اجرای آن در یک برنامه از یک تماس عملکردی استفاده می شود. یک تابع داخلی یا تعریف شده توسط کاربر فقط پس از فراخوانی قابل اجرا قابل اجرا است. در چنین حالتی گفته می شود که این عملکرد برای اجرای یک برنامه فراخوانده می شود.
خواص توابع ویژه در توابع ویژه به تفصیل شرح داده شده است. در اینجا ، ما فقط اطلاعات اصلی در مورد آنها را مطالعه می کنیم. عملکرد ویژه تابعی است که توسط ترمینال مشتری اجرا می شود. متمایز از توابع مشترک ، توابع خاص فقط توضیحی دارند و توابع ویژه از درون یک برنامه فراخوانی نمی شوند. توابع ویژه ای فراخوانی شده است که توسط ترمینال مشتری اجرا شود.(یک امکان فنی وجود دارد که از درون یک برنامه توابع ویژه فراخوانی کنید ، اما ما این روش را نادرست در نظر خواهیم گرفت و در اینجا بحث نخواهیم کرد.) وقتی برنامه ای برای اجرای در یک پنجره امنیتی آغاز می شود ، ترمینال مشتری کنترل را به یکی از آنها منتقل می کندتوابع ویژهدر نتیجه ، این عملکرد اجرا می شود.
قانون برنامه نویسی در MQL4 موارد زیر است.
یک کد برنامه باید در داخل توابع نوشته شود.
این بدان معناست که خطوط برنامه (اپراتورها و تماسهای عملکردی) که خارج از کارکردهای ویژه هستند ، قابل اجرا نیستند. در تلاش برای تهیه چنین برنامه ای ، Metaeditor پیام خطای مربوطه را نشان می دهد و پرونده اجرایی *. exe در نتیجه تدوین ظاهر نمی شود.
بگذارید طرح عملکردی یک برنامه مشترک ، EA را در نظر بگیریم.

شکل 31 طرح عملکردی یک برنامه (EA).
بزرگترین بلوک های برنامه ای که در MQL4 نوشته شده عبارتند از:
- سر بخشی از یک برنامه.
- عملکرد ویژه ().
- عملکرد ویژه ().
- عملکرد ویژه deinit ().
- توابع تعریف شده توسط کاربر.
علاوه بر این ، ما فقط محتوای داخلی این بلوک های کاربردی (قطعات انتگرال) یک برنامه را تجزیه و تحلیل خواهیم کرد ، در حالی که تمام اشیاء خارجی (به عنوان مثال ، حوزه اطلاعاتی ترمینال مشتری یا سخت افزار) از محدوده مورد علاقه ما خارج خواهند شد.
محیط اطلاعاتی ترمینال مشتری Metatrader 4
محیط اطلاعات MT4 بخشی از برنامه نیست. محیط اطلاعات مجموعه ای از پارامترهای موجود است که توسط یک برنامه پردازش می شود. به عنوان مثال ، این قیمت امنیتی است که با یک کنه جدید ، حجم انباشته شده در هر کنه جدید ، اطلاعات مربوط به حداکثر و حداقل قیمت میله های تاریخ ، پارامترهایی که شرایط معاملاتی ارائه شده توسط یک مرکز معاملات و غیره را نشان می دهد ، است. محیط اطلاعات همیشه ذخیره می شود و در هر تیک جدید ، توسط ترمینال مشتری متصل به سرور به روز می شود.
ساخت برنامه
قسمت
قسمت اصلی شامل خطوط اول در ابتدای یک برنامه است که حاوی اطلاعات کلی در مورد برنامه است. به عنوان مثال ، این بخش شامل خطوط اعلامیه و اولیه سازی متغیرهای جهانی است..
توابع خاص
معمولاً ، پس از قسمت سر ، توابع ویژه توصیف می شود. توضیحات عملکرد ویژه به نظر می رسد توصیف یک عملکرد تعریف شده توسط کاربر ، اما توابع ویژه دارای نام های از پیش تعریف شده ای هستند: init () ، start () و deinit (). توابع ویژه بلوک محاسبات است و مربوط به محیط اطلاعات ترمینال مشتری و توابع تعریف شده توسط کاربر است. توابع ویژه در توابع ویژه به تفصیل شرح داده شده است.
توابع تعریف شده توسط کاربر
توضیحات توابع تعریف شده توسط کاربر معمولاً پس از توضیحات توابع خاص ارائه می شود. تعداد توابع تعریف شده توسط کاربر در یک برنامه نامحدود است. در شکل 31 قبلی ، مثال ما فقط شامل دو کارکرد تعریف شده توسط کاربر است ، اما یک برنامه می تواند شامل 10 یا 500 یا هیچ کدام نباشد. اگر از کارکردهای تعریف شده توسط کاربر در یک برنامه استفاده نشده باشد ، این برنامه یک ساختار ساده خواهد داشت: قسمت سر و توضیحات توابع ویژه.
توابع استاندارد
همانطور که قبلاً نیز ذکر شد ، توابع استاندارد فقط به عنوان یک تماس عملکرد قابل ارائه هستند. هر عملکرد استاندارد ، مانند توابع خاص و سفارشی ، توضیحی دارد ، اما این توضیحات در یک برنامه آورده نشده است (به همین دلیل در این طرح گنجانده نشده است). توضیحات یک عملکرد استاندارد از برنامه نویس پنهان است و بنابراین نمی توان آن را تغییر داد. با این حال ، در دسترس Metaeditor است. در حین تدوین برنامه ، Metaeditor یک پرونده اجرایی را تشکیل می دهد ، که در آن همه توابع استاندارد به طور صحیح به طور کامل اجرا می شوند.
ترتیب قطعات در یک برنامه
قسمت سر باید در خطوط اول قرار بگیرد. ترتیب توضیحات توابع ویژه و تعریف شده توسط کاربر اهمیتی ندارد. شکل 32 ترتیب مشترک بلوک های عملکردی ، یعنی قسمت سر ، توابع ویژه و توابع تعریف شده توسط کاربر را نشان می دهد. شکل 33 انواع دیگر ساختار برنامه را نشان می دهد. در تمام مثالها ، قسمت سر در مرحله اول قرار می گیرد ، در حالی که توابع را می توان به ترتیب تصادفی توصیف کرد.

شکل 32 ترتیب معمول بلوک های عملکردی در یک برنامه (توصیه می شود).

شکل 33 روشهای ممکن برای تنظیم بلوک های عملکردی در یک برنامه (ترتیب تصادفی).
هیچ یک از توابع را نمی توان در یک عملکرد دیگر توصیف کرد. استفاده از آن در توضیحات عملکرد برنامه واقع در یک عملکرد دیگر ممنوع است.
در زیر نمونه هایی از ترتیبات نادرست توضیحات عملکرد وجود دارد.

شکل 34 نمونه ای از ترتیب نادرست عملکرد در یک برنامه.
اگر یک برنامه نویس به اشتباه برنامه ای ایجاد کند که توضیحات مربوط به هر یک از عملکردهای آن در توضیحات عملکرد دیگری قرار داشته باشد ، در مرحله تدوین ، Metaeditor یک پیام خطا را نشان می دهد و یک پرونده اجرایی برای چنین برنامه ای ایجاد نمی شود.
توالی اجرای کد
قسمت سر و عملکردهای ویژه
لحظه ای که یک برنامه در یک پنجره امنیتی آغاز می شود ، خطوط قسمت اصلی برنامه اجرا می شود.
پس از انجام آماده سازی های شرح داده شده در قسمت سر ، ترمینال مشتری کنترل می شود که به عملکرد ویژه () ویژه () کنترل می شود و این عملکرد اجرا می شود (کنترل کنترل در طرح ساختاری در فلش های بزرگ زرد نشان داده شده است). تابع ویژه () ویژه برای اجرای فقط یک بار در ابتدای عملیات برنامه فراخوانی می شود. این عملکرد معمولاً حاوی کدی است که باید فقط یک بار قبل از شروع کار اصلی برنامه اجرا شود. به عنوان مثال ، هنگامی که init () اجرا می شود ، برخی از متغیرهای جهانی اولیه می شوند ، اشیاء گرافیکی در یک پنجره نمودار نمایش داده می شوند ، یا ممکن است پیام ها نشان داده شوند. پس از اجرای همه خطوط برنامه در INIT () ، عملکرد اجرای آن را به پایان می رساند و کنترل به ترمینال مشتری بازگردانده می شود.
زمان اصلی عملکرد برنامه دوره عملکرد عملکرد ویژه () است. در برخی شرایط (به ویژگی های توابع ویژه در توابع ویژه مراجعه کنید) ، از جمله دریافت کنه جدید توسط ترمینال مشتری از یک سرور ، ترمینال مشتری خواستار اجرای شروع () است. این عملکرد (مانند سایر توابع) می تواند به محیط اطلاعات ترمینال مشتری مراجعه کند ، محاسبات لازم را انجام دهد ، سفارشات باز و بسته و به زودی. یعنی می تواند هر اقدامی را که توسط MQL4 مجاز است انجام دهد. هنگامی که شروع () اجرا می شود ، معمولاً یک راه حل تولید می شود که به عنوان یک عمل کنترل اجرا می شود (به فلش های قرمز در شکل 31 قبلی مراجعه کنید). این کنترل می تواند به عنوان یک درخواست معاملاتی برای باز کردن ، بستن یا اصلاح سفارش تشکیل شده توسط برنامه اجرا شود.
پس از اجرای کل کد ویژه EA () EA ، شروع () عملکرد خود را به پایان می رساند و کنترل را به ترمینال مشتری باز می گرداند. ترمینال کنترل را برای مدتی نگه می دارد ، و هیچ کارکرد خاص را شروع نمی کند. مکث ظاهر می شود ، که در طی آن برنامه کار نمی کند. بعداً ، هنگامی که یک کنه جدید به وجود می آید ، ترمینال مشتری کنترل می کند تا بار دیگر شروع شود () و در نتیجه ، عملکرد دوباره اجرا می شود.
این روند تکرار می شود در حالی که برنامه به یک نمودار وصل شده است و می تواند برای هفته ها و ماه ها ادامه یابد. در این دوره ، یک EA می تواند تجارت خودکار را انجام دهد ، یعنی می تواند وظیفه اصلی خود را اجرا کند. در شکل 31 قبلی ، تماس مکرر شروع () توسط چندین فلش زرد نشان داده شده است که عملکرد ویژه () شروع () را پوشانده اند.
هنگامی که یک معامله گر EA را از یک نمودار حذف می کند ، ترمینال مشتری یک بار عملکرد ویژه DEINIT () را انجام می دهد. اجرای این عملکرد برای خاتمه صحیح عملکرد EA ضروری است. به عنوان مثال ، یک برنامه ممکن است اشیاء گرافیکی و متغیرهای جهانی ترمینال مشتری ایجاد کند. تابع deinit () می تواند حاوی کد برای حذف اشیاء و متغیرهای غیر ضروری باشد. پس از اتمام اجرای DEINIT () ، کنترل به ترمینال مشتری بازگردانده می شود.
توابع ویژه اجرا شده می تواند به محیط اطلاعات مراجعه کند (به فلش های آبی نازک در شکل 31 قبلی مراجعه کنید) و خواستار اجرای توابع تعریف شده توسط کاربر هستید (به فلش های زرد نازک در شکل 31 قبلی مراجعه کنید). توجه داشته باشید که توابع ویژه پس از فراخوانی توسط ترمینال مشتری به ترتیب از پیش تعریف شده اجرا می شوند: ابتدا init () ، سپس هر تعداد تماس شروع () و بعد از آن deinit (). شرایطی که در آن ترمینال مشتری توابع ویژه را فراخوانی می کند در توابع ویژه توضیح داده شده است.
توابع تعریف شده توسط کاربر
توابع تعریف شده توسط کاربر هنگامی اجرا می شوند که یک تماس با آن عملکرد در برخی از عملکردها وجود داشته باشد. در این حالت ، کنترل به موقع به عملکرد تعریف شده توسط کاربر منتقل می شود ، و پس از اتمام اجرای عملکرد ، کنترل به محل تماس بازگردانده می شود (به فلش های نارنجی نازک در شکل 31 قبلی مراجعه کنید). تماس توابع تعریف شده توسط کاربر نه تنها در توضیحات یک عملکرد خاص ، بلکه در توضیحات سایر توابع تعریف شده توسط کاربر نیز می تواند باشد. یک عملکرد تعریف شده توسط کاربر ممکن است سایر توابع تعریف شده توسط کاربر را فراخوانی کند. این به طور گسترده در برنامه نویسی استفاده می شود.
توابع تعریف شده توسط کاربر برای اجرای ترمینال مشتری فراخوانده نمی شوند. هر کارکرد تعریف شده توسط کاربر در اجرای یک عملکرد ویژه که کنترل را به ترمینال مشتری باز می گرداند ، اجرا می شوند. توابع تعریف شده توسط کاربر همچنین ممکن است برای استفاده از مقادیر متغیر محیط اطلاعات ترمینال مشتری درخواست کنند (به فلش های آبی نازک در شکل 31 قبلی مراجعه کنید).
اگر یک برنامه شامل توضیحی از یک تابع تعریف شده توسط کاربر باشد ، اما هیچ فراخوانی از این عملکرد وجود ندارد ، این عملکرد تعریف شده توسط کاربر از برنامه آماده در مرحله تدوین خارج می شود و در عملکرد برنامه استفاده نمی شود.
توجه: توابع ویژه برای اجرای ترمینال مشتری فراخوانی می شود. توابع تعریف شده توسط کاربر در صورت فراخوانی از توابع خاص یا دیگر تعریف شده توسط کاربر اجرا می شوند ، اما هرگز توسط ترمینال مشتری فراخوانی نمی شوند. اقدام کنترل (مانند سفارشات معاملاتی) می تواند هم در توابع ویژه و هم در تعریف کاربر انجام شود.
فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید
برچسب :
نویسنده : احمد قانع پور
بازدید : 47
تاريخ : چهارشنبه
27 ارديبهشت
1402 ساعت: 16:23