آنچه که در این صفحه یاد خواهید گرفت:
وقتی میخواهید برنامهنویسی MQL را شروع کنید، اول از همه باید به این سؤال پاسخ دهید که چه نوع برنامهای مینویسید؟ محتوا و کاربرد برنامه به همین یک سؤال وابسته است.
در MQL سه نوع برنامه میتوان نوشت: EA، اسکریپت و اندیکاتور.
هر برنامهای که میخواهید بنویسید، جزو یکی از سه مورد بالایی خواهد بود. هر یک از انواع برنامههای MQL هدف و ویژگیهای خاص خود را دارند.
اکسپرت یا EA
اکسپرت برنامهای است که در بخش کلاینت اجرا میشود و با هر تیک عمل میکند. هدف اصلی از اکسپرت، نوشتن برنامههایی است که بتوانند معاملات را کنترل کنند. اکسپرت توسط کاربر نوشته میشود.
اسکریپت
اسکریپت برنامهای است که تنها یکبار در ترمینال یا همان متاتریدر بخش کاربر اجرا میشود. اسکریپتها برای عملیاتی مناسب هستند که تنها یکبار اجرا خواهند شد. اسکریپتها هم توسط کاربران نوشته میشوند.
اندیکاتور
اندیکاتور برنامهای است که در سمت ترمینال کلاینت اجرا میشود و با هر تیک فعال میشود. از اندیکاتور برای نمایش گرافیکی محاسبات آماری استفاده میشود. اندیکاتور نمیتواند معامله انجام دهد. در متاتریدر دو نوع اندیکاتور وجود دارد: اندیکاتور از پیش تعریف شده و اندیکاتور سفارشی.
اجرای انواع برنامههای MQL
تفاوت زیادی بین اکسپرت و اندیکاتور سفارشی و اسکریپت وجود دارد. طول زمان اجرای اکسپرت و اندیکاتور سفارشی با اسکریپت متفاوت است. همانطور که در بخشهای قبل هم اشاره شد، برنامههای MQL زمانی که تیک یا قیمت جدید صادر میشود، عمل میکنند. اکسپرت و اندیکاتور با تیک کار میکنند، اما اسکریپت عملکرد متفاوتی دارد.
بهترین بروکرهای فارکس را می شناسید؟
با ایران بورس آنلاین در بهترین بروکر فارکس حساب باز کنید
اندیکاتور و اکسپرت
همینکه برنامههایی مثل اکسپرت و اندیکاتور را به نمودار اضافه کردید، برنامه اجرا میشود و منتظر تیک جدید میماند. همینکه تیک جدید رسید، برنامه اجرا میشود و بعد از انجام دستورات کد شده، کنترل کار را به متاتریدر میدهد و دوباره منتظر تیک جدید میماند.
اگر در زمان اجرای برنامه، تیک جدید بیاید، تأثیری روی عملیات برنامه نخواهد گذاشت. به همین دلیل باید در نوشتن اکسپرت و اندیکاتورها دقت کرد که خیلی متکی به تیک جدید نباشند.
از آنجایی که هر تیک جدید باعث اجرای برنامه میشود، اندیکاتور و اکسپرت ها میتوانند به مدت طولانی فعال بمانند.
علاوه بر این، اکسپرت در مقایسه با اندیکاتورها در زمان راهاندازی تفاوت دارند. همینکه اکسپرت به نمودار اضافه شد، تمامی دستورات و آمادهسازیها در داخل تابع init() اجرا خواهند شد و سپس اکسپرت به حالت انتظار برای تیک جدید خواهد رفت. با رسیدن تیک جدید، تابع start() اکسپرت عمل خواهد کرد.
اما اندیکاتورها در همان ابتدای کار هم تابع init() و هم تابع start() را اجرا میکنند تا محاسبات اولیه انجام شوند. در ادامه با آمدن تیک جدید، اندیکاتور تابع Start را اجرا میکند.
اسکریپت
اسکریپت بر خلاف اندیکاتور و اکسپرت ها همینکه به نمودار الحاق شدند، فعال میشوند و منتظر تیک جدید نمیمانند. تمام کدهای نوشته شده در داخل اسکریپت یکبار اجرا خواهند شد و بعد از پایان این کار، اسکریپت دیگر عمل نخواهد کرد. اسکریپتها زمانی کارایی دارند که شما بخواهید یک کار را فقط یکبار انجام دهید، مثلاً متنی را در صفحه نمایش دهید و یا اشیا گرافیکی را رسم کنید.
قابلیت انجام معامله
یکی از مهمترین قابلیتهایی برنامههایی که در MQL نوشته میشوند، امکان معامله است. دستورات معاملاتی، دستوراتی هستند که برنامه به سرور معاملات ارسال میکند تا یک دستور معاملاتی بسته یا باز شوند و یا در آن تغییراتی اعمال شود. دستورات معاملاتی مثل خرید یا فروش توسط توابع از پیشساخته شده پیادهسازی میشوند.
در این میان تنها اکسپرت ها و اسکریپتها قابلیت انجام معامله را دارند. در اندیکاتورها استفاده از توابع معاملاتی ممنوع است.
اجرای همزمان
برنامهها میتوانند به طور همزمان با سایر برنامهها اجرا شوند.
اکسپرت: برای هر نمودار تنها یک اکسپرت میتوان اضافه کرد. شما نمیتوانید از چند اکسپرت در یک نمودار استفاده کنید.
اسکریپت: شما میتوانید تنها یک اسکریپت را به نمودار اضافه کنید. استفاده همزمان از چند اسکریپت در نمودار ممنوع است.
اندیکاتور: شما میتوانید چندین اندیکاتور را به یک نمودار اضافه کنید. اندیکاتورها تداخلی با یکدیگر ندارند و میتوان آنها را در کنار هم استفاده کرد.
شما میتوانید از اکسپرت، اندیکاتور و اسکریپت به طور همزمان در یک نمودار استفاده کنید. یعنی یک اکسپرت، یک اسکریپت و چندین اندیکاتور را به نمودار اضافه کنید. با این حال نمیتوانید چندین اکسپرت یا اسکریپت را به یک نمودار اضافه کنید!
همچنین شما میتوانید از چند اکسپرت یا اسکریپت در نمودارهای دیگر استفاده کنید. به طور مثال شما میتوانید دو اکسپرت را برای یک نماد معاملاتی (مثل EURUSD) استفاده کنید، به شرطی که یک اکسپرت را در یک نمودار و اکسپرت دیگر را در نمودار دیگر EURUSD اضافه کنید. در این صورت هر دو اکسپرت برای یک نماد مثل جفت ارز EURUSD فعال خواهند شد. اما باید این مسئله را هم در نظر داشته باشید که شاید دو اکسپرت برای یک جفت ارز (در دو نمودار متفاوت) در اجرا تداخل ایجاد کنند. شاید یکی از اکسپرت ها دستور معاملاتی به سرور ارسال کند و خواهان بازگشایی معامله جدید باشد، در حالی که اکسپرت دیگر در حال بستن تمام معاملات باشد!