ما در این دوره آموزش برنامهنویسی MQL اکسپرت، اندیکاتور و اسکریپت نویسی را یاد خواهیم گرفت. در این دوره آموزشی بخشهای مختلف برنامهها تعریف خواهند شد و قوانین اصلی نحوه ساخت و استفاده از برنامهها را یاد میگیرید. همچنین مثالهای برنامهنویسی آموزشی را هم به دقت بررسی خواهیم کرد.
این نکته را به خاطر داشته باشید که برنامههای خودکار معاملاتی که شما مینویسید، بسیار کاربردیتر از ابزار دستی و پیشساخته متاتریدر خواهند بود.چرا یادگیری برنامهنویسی MQL ضروری است؟
آنچه که در این بخش یاد خواهید گرفت:
در اکثر مواقع، برنامهای که مینویسید کار شما را بسیار راحت خواهد کرد و نیاز شما به بررسی و پیگیری وضعیت مداوم بازار را از بین خواهد برد. حتی برنامههای کاربردی که مینویسید، استرس و تنشهای ذهنی معاملهگر را هم کاهش میدهد. حتی تصمیمات احساساتی که در دورههای نوسانی بازار اتخاذ میکنید را به طور کلی از بین خواهد برد.
علاوه بر این، برنامهنویسی MQL به شما کمک خواهد کرد تا دیدگاه خاصی که نسبت به بازار دارید را روی دادههای تاریخی آزمایش کنید و استراتژیهای معاملاتی خود را بهینهسازی کنید.
پیش از مطالعه برنامهنویسی MQL مروری بر کل دوره خواهیم داشت. اول از همه بایستی توجه داشته باشید که برنامههای استفاده شده در دوره آموزش برنامهنویسی MQL تنها در ترمینال متاتریدر اجرا میشوند. تصویر زیر به خوبی نقش این برنامهها در مدیرت معاملات را نشان میدهد. برای درک بهتر اهمیت این برنامهها به تصویر زیر دقت کنید.
سیستم معاملات آنلاین
سرور
اگر به برنامهنویسی MQL علاقه دارد، بایستی پیش از شروع آموزش برنامهنویسی متاتریدر، با خود ترمینال متاتریدر آشنا شده باشید. ترمینال متاتریدر یا همان MT4 بخشی از سیستم معاملات آنلاین است. این سیستم آنلاین شامل دو بخش سرور و کلاینت است. بخش سرور در مرکز مبادلات یا همان Dealing Center نصب شده است. مرکز مبادلات یا دیلینگ سنتر به سایر فعالین بازار وصل است، مثل بانکها و مؤسسات مالی.
بهترین بروکرهای فارکس را می شناسید؟
با ایران بورس آنلاین در بهترین بروکر فارکس حساب باز کنید
کلاینت
متاتریدری که شما از طریق سایت ایران بورس آنلاین دانلود میکنید، سمت کلاینت است. یعنی ترمینالی که نصب میکنید مختص معاملهگران و تحلیلگران بازار است.
متاتریدر سمت کلاینت شامل اطلاعات محیطی مثل وضعیت بازار و نحوه ارتباط معاملهگر با مرکز مبادلات است. این پارامترها شامل قیمتهای فعلی، محدودیتهای حداکثر و حداقل حجم دستورات، حداقل فاصله بین قیمت فعلی بازار با دستورات حد سود و حد ضرر، اجازه انجام معاملات خودکار و پارامترهای دیگر مفیدی است که وضعیت فعلی را نشان میدهد. اطلاعات محیطی متاتریدر با صادر شدن تیک جدید به روز رسانی میشود.
ابزارهای پیش فرض و درونی متاتریدر
متاتریدر سمت کلاینت شامل ابزارهای پیشساختهای است که به شما اجازه میدهد تا تحلیلهای تکنیکال و مدیریت معاملات را پیاده کنید. برای تحلیل بازار، شما میتوانید از اندیکاتورهای آماده، خطوط حمایت، مقاومت و روند، کانالها، فیبوناچی و بسیاری ابزار پیش فرض موجود استفاده کنید.
برای مدیریت دستی معاملات هم میتوانید از میله ابزار مدیریت سفارشات استفاده کنید. با استفاده از میله ابزار، میتوانید معاملهای را باز کنید، ببندید و یا آن را تغییر دهد. در کنار این، متاتریدر گزینه مدیریت خودکار معاملات را هم میدهد. کارهایی که معاملهگر به کمک ابزار مدیریت معامله پیشساخته انجام میدهد، در نهایت در قالب دستورات معاملاتی به سرور ارسال میشوند.
برنامه هایی که شما خواهید نوشت!
تحلیل بازار و مدیریت معاملات در متاتریدر را میتوان به کمک ابزار برنامهنویسی موجود توسعه داد. زبان برنامهنویسی MQL به شما اجازه میدهد تا برنامههای دلخواه خود را بسازید. شما در متاتریدر سه نوع برنامه کاربردی میتوانید بسازید:
- اندیکاتور (Indicator): اندیکاتور برنامهای است که محاسبات آماری را به کمک الگوریتمهای خاص به صورت گرافیکی به نمایش میگذارد.
- اکسپرت (Expert Advisor): اکسپرت برنامهای است که کل یا بخشی از کارهای مربوط به مدیریت معاملات را به طور خودکار انجام میدهد.
- اسکریپت (Script): اسکریپت برنامهای است که تنها یک بار اجرا میشود. به همین دلیل برای برنامههایی که تنها یک کار را و فقط یک بار انجام میدهند مناسب است. اسکریپت هم میتواند معامله کند.
همان طور که در تصویر بالایی هم مشاهده میکنید، برنامههایی که به کمک زبان برنامهنویسی MQL نوشته میشوند، همانند برنامههای پیش فرض متاتریدر به اطلاعات محیطی دسترسی دارند (فلشهای آبی). همچنین برنامههایی که شما مینویسید به ترمینال متاتریدر تأثیر میگذارند (فلشهای قرمز).
اکسپرت، اسکریپت و اندیکاتور را همزمان اجرا کنید!
در بالا اشاره شد که برنامههای نوشته شدن توسط برنامهنویس MQL به سه نوع تقسیم میشوند. هر سه نوع برنامه را میتوان به طور همزمان اجرا کرد و دادهها را میان آنها مبادله کرد. استفاده از این برنامههای کاربردی باعث میشد تا بخش بزرگی از معاملات به طور خودکار انجام شوند و یا ربات معاملهگری ساخت که بدون مداخله شما معامله کند.
برنامههای کاربردی و ابزار مدیریت دستی را میتوان به طور همزمان استفاده کرد. در واقع برنامههای کاربردی و ابزار دستی متاتریدر میتوانند یکدیگر را تکمیل کنند.
برنامههای متاتریدر تنها زمانی کار میکنند که متاتریدر باز باشد!
ویژگی فنی و بنیادین سیستم معاملات آنلاین متاتریدر این است که تمامی کارهای مدیریتی را میتوان در بخش متاتریدر انجام داد و سپس آنها را به بخش سرور ارسال کرد. برنامههای کاربردی (اکسپرت، اسکریپت و اندیکاتور) تنها میتوانند به عنوان بخشی از متاتریدر کار کنند، آن هم تنها در صورتی که متاتریدر به سرور یا همان مرکز مبادلاتی وصل باشد.
به زبان سادهتر، برنامههایی که به کمک MQL خواهید نوشت، تنها وقتیکه متاتریدر باز است، اجرا خواهند شد. یعنی با بستن برنامه متاتریدر، برنامههایی که نوشتهاید هم متوقف خواهند شد! این نکته مهمی است و باید به آن توجه کنید. برنامههایی که به زبان MQL مینویسید تنها در کامپیوتر، موبایل و یا تبلت که اجرا میکنید، فعال هستند و هیچ کدام در سمت سرور نصب نشدهاند.
سرور تنها پیامهایی که از سوی متاتریدر بخش کلاینت ارسال میشوند را پردازش میکند. اگر ترمینال یا همان متاتریدری که نصب کردهاید، اتصال خود به اینترنت را از دست دهد و یا برنامههایی که نوشتهاید هیچ کار مدیریتی انجام ندهند، اتفاقی هم در بخش سرور روی نخواهد داد.
هدف دوره آموزش برنامهنویسی MQL نوشتن برنامه برای متاتریدر است. قبل از اینکه قوانین برنامهنویسی را شروع کنیم، بهتر است که مفاهیم مقدماتی مربوط به ویژگی برنامههای متاتریدر و روابط آن با اطلاعات محیطی را بررسی کنیم.
ترمینال کلاینت متاتریدر یا همان متاتریدری که برای معاملات و تحلیل دانلود میکنید، برای کار کردن باید به اینترنت وصل باشد. بازارهای مالی با سرعت بالایی در حال تغییر هستند. تغییرات لحظهای قیمتها بر نمودارهای قیمتی تأثیر میگذارند.
اما ترمینال متاتریدر چگونه کار میکند؟ چگونه خود را با تغییرات جدید و سریع قیمت به روز رسانی میکند؟ ما چگونه میتوانیم اطلاعات جدید تغییرات قیمتی را دریافت کنیم؟
تیک (Tick) در ام کیو ال چیست؟
تیک یک رویداد در فضای متاتریدر است. تیک قیمت جدید و فوری نماد یا سمبل معاملاتی است. تیک (Tick) همان تغییر در قیمت است. در واقع هر وقت قیمت جفت ارز یا دارایی تغییر میکند، یک تیک به متاتریدر ارسال میشود.
تیکها از طریق سرور به تمامی کلاینتها ارسال میشوند. سرورها در دیلینگ سنتر (Dealing Center) نصب شدهاند و به بازارهای مالی و مبادلاتی وصل هستند. بر اساس وضعیت بازارهای مالی، تیکها شاید با فاصله زمانی کم یا خیلی زیاد از سوی سرور ارسال شوند.
هر تیک، قیمت جدید جفت ارز یا شاخص سهام و یا هر نمادی که انتخاب شده است را برای کاربر میآورد. پس تیک، قیمت جدید بازار است و با تغییر قیمت از سوی سرور به سمت ترمینال کلاینت ارسال میشود.
برنامههای متاتریدر با تیک کار میکنند!
برنامهای که در داخل متاتریدر کار میکند، شاید برای مدت زمان طولانی فعال باشد. به طور مثال برای چند روز یا چند هفته. هر یک از برنامههای کاربردی متاتریدر (اکسپرت، اندیکاتور و اسکریپت)، بر اساس قوانینی که برای برنامهها تعریف شدهاند کار میکنند. به طور مثال اکسپرت همیشه و به طور مستمر کار نمیکند. EA یا همان اکسپرت (Expert Advisor) معمولاً زمانی کار میکند که یک تیک جدید دریافت شده باشد. به همین دلیل تیک تنها دربردارنده قیمت نیست، بلکه رویدادی است که باید توسط متاتریدر پردازش شود. تیک، اتفاقی است که وقتی میافتد، برنامه به آن واکنش نشان میدهد.
مدت زمان فعالیت اکسپرت ها به کدهای نوشته توسط برنامهنویس بستگی دارد. اکسپرت های معمولی چرخه پردازش اطلاعات را در یک دهم یا یک صدم ثانیه انجام میدهند. در این مدت، اکسپرت میتواند برخی از پارامترها را پردازش کند، تصمیمات معاملاتی بگیرد، اطلاعات مفیدی را در اختیار معاملهگر قرار دهد و … . وقتیکه کار اکسپرت تمام شد، اکسپرت منتظر خواهد ماند تا تیک جدید از سوی سرور ارسال شود. تیک جدید که دریافت شد، برنامه اکسپرت دوباره اجرا خواهد شد و دوباره وظایفی که برای آن تعریف شده را انجام خواهد داد.
مفهوم کنترل در MQL
منظور از کنترل، نحوه و ترتیب اجرای دستورات کد در داخل برنامه است. همچنین کنترل جریان میان برنامه و متاتریدر را هم تعریف میکند.
کنترل همان پردازش کدهای داخل برنامه و یا امکانات خود متاتریدر است. کنترل میتواند در داخل برنامه از یک کد به کد دیگر انتقال یابد و یا از برنامه به متاتریدر منتقل شود.
کنترل مشخص میکند که چه کسی حرف خواهد زد!
کنترل درست به همان روشی از برنامه به متاتریدر و از کدی به کد دیگر منتقل میشود که در یک جلسه، میکروفن از یک شخص به شخص دیگر سپرده میشود تا حرف بزند. درست مثل سخنگوی یک نشست، ترمینال و برنامه، کنترل را در اختیار یکدیگر قرار میدهند. در این رد و بدل شدنهای کنترل، اولویت اصلی ترمینال کلاینت است. درست مثل رئیسی که کارمندان خود را در یک جلسه دور خود جمع کرده و اولویت صحبت کردن با اوست.
سخنران اصلی خود متاتریدر است!
پیش از اینکه برنامه اجرا شود، کنترل در دست ترمینال متاتریدر است. همینکه برنامه اجرا شد و تیک جدید دریافت شد، متاتریدر کنترل را به برنامه (اکسپرت، اندیکاتور یا اسکریپت) منتقل میکند و کدهای نوشته شده در داخل برنامه اجرا میشوند.
متاتریدر بعد از اینکه کنترل را به برنامه منتقل میکند، عملیات و فعالیتهای خود را متوقف نمیکند. متاتریدر به وظایف خود ادامه میدهد. برنامهای که شما نوشتهاید، تنها زمانی اجرا خواهد شد و فعالیت خواهد کرد که ترمینال کلاینت (متاتریدر) کنترل را به برنامه بدهد. درست مثل اینکه در جلسه شرکت، رئیس به یکی از اعضای شرکت اجازه میدهد صحبت کند. فرد سخنگو تنها در فرصتی که به او داده شده میتواند حرف بزند.
بعد از اینکه برنامهای که نوشتهاید کار خود را تمام میکند، کنترل را به متاتریدر منتقل میکند. برنامههای اکسپرت، اسکریپت و اندیکاتور نمیتوانند خودشان را اجرا کنند! با این حال برنامهای که کنترل در دست اوست، تعیین میکند که چه زمانی کنترل را به متاتریدر باز گرداند. به عبارت دیگر، متاتریدر نمیتواند خود به خود کنترل را از دست برنامه شما بگیرد. در این میان تنها استثنایی که وجود دارد، این است که کاربر خودش برنامه را متوقف کند.
نحوه گردش کنترل
تصویر زیر به خوبی نشان میدهد که کنترل چگونه در میان کدهای برنامه و همچنین بین برنامه و متاتریدر منتقل میشود. دایرههایی که در تصویر مشاهده میکنیم، قطعات کوچک و کاملی از یک برنامه هستند. فلشها هم نشان میدهند که کنترل چگونه از یک بخش به بخش دیگر منتقل میشود.
گردش کنترل در داخل برنامه
برنامهای که کنترل را از متاتریدر گرفته و اجرا شده، طبق الگوریتمی که برای برنامه نوشته شده، فعالیتهای خود را شروع خواهد کرد. هر برنامهای که نوشته میشود شامل کدهایی است که ترتیب اجرای کارهای برنامه را نشان میدهند. در داخل برنامه، کنترل از یک خط کد به خط دیگر و از بالا به پایین منتقل میشود. در بخشهای بعدی خواهیم گفت که داخل برنامه چه کدهایی میتوان نوشت و قوانین نوشت کد را هم توضیح خواهیم داد.
اما چیزی که در این بخش مهم است، درک مفهوم کنترل و نحوه انتقال آن در داخل کد برنامه و در خارج برنامه (بین برنامه و متاتریدر) است. هر بار که کنترل در دست برنامه است، هر بخش از کد برنامه به طور کامل اجرا میشود، مثل محاسبات ریاضی، نمایش پیغامی خاص در صفحه و یا انجام معامله. تا زمانی که این بخش از برنامه اجرا میشود، کنترل هم دست آن خواهد ماند. همینکه آخرین قطعه از کد اجرا شد، کنترل به متاتریدر منتقل خواهد شد.
مفهوم توضیحات یا کامنت در برنامه نویسی
هر برنامهای که در متاتریدر نوشته میشود، دو نوع کد خواهد داشت: کدهای اجرایی و کدهای توصیفی که متن کدها را برای بیننده توضیح میدهند.
کامنت اختیاری است!
کامنت یا توضیحات برنامه یک بخش اختیاری از برنامه است که کدهای برنامه را توضیح میدهد. کامنت ها در اجرای برنامه تأثیری ندارند. یعنی کد برنامه کامنت داشته باشد یا نداشته باشد، باز هم برنامه اجرا خواهد شد. کامنت فقط برای برنامهنویس کاربرد دارد. کامنت ها خوانایی برنامه را بالا میبرند. بعضی از برنامهها کدهای زیاد و تو در تویی دارند. بهتر است که با نوشتن کامنت توضیح داد که کدهای نوشته شده چه کاری انجام میدهند، تا در آینده وقتی به کدها نگاه میکنید، خیلی سریع متوجه موضوع شوید.
کامنت میتواند تک خطی و یا چند خطی باشد. برای نوشتن کامنت های تک خطی کافی است در ابتدای کامنت از دابل اسلش یا // استفاده کنید.
کامنت های چند خطی هم باید به صورت: /* کامنت */ نوشته شوند.
مفهوم ثابت یا Constant چیست؟
در برنامهنویسی، ثابت یک شئ است که مقدار دارد. ثابت در برنامه مشابه ثابتها در معادلات ریاضی است. مقدار ثابت تغییر نمیکند. به همین دلیل به آنها ثابت گفته میشود. به طور مثال مقدار عدد پی همیشه ۳٫۱۴ است. یا در معادلات ریاضی، اعدادی که استفاده میشوند هم ثابت هستند. مثل اعداد ۳ و ۷ در معادله ریاضی y = 3 * X + 7.
در زبان برنامهنویسی MQL هم ثابت مکانی است که یک مقدار مشخص را در خود نگه میدارد. ثابت را تنها با مقداری که دارد تعریف میکنیم.
تمامی مقادیر زیر ثابت هستند:
۳۷، ۳٫۱۴، true، “Kazan”
خاصیت ثابتها
خاصیت ثابت در قدرت نگه داشتن مقداری است که در خود دارد و در صورت نیاز برنامه، آن مقدار را در اختیار برنامه قرار میدهد (تصویر زیر). برای هر ثابتی در برنامه، کامپیوتر بخشی از حافظه مورد نیاز را به آن اختصاص میدهد. نه برنامه و نه کامپیوتر توانایی تغییر مقدار ثابت را در زمان اجرای برنامه ندارند. پس مقدار ثابت همیشه بدون تغییر باقی میماند.
مفهوم متغیر (Variable) چیست؟
متغیر بخشی از برنامه است که هم اسم دارد و هم مقدار.
اصطلاح متغیر در زبان برنامهنویسی MQL درست مشابه مفهوم آن در ریاضیات است. کامپیوتر در زمان اجرای برنامه، حافظه مشخصی را برای مقدار متغیر اختصاص میدهد.
قواعد نامگذاری متغیر
متغیر توسط برنامهنویس تعریف میشود و در ابتدای برنامه هم آن را نامگذاری میکند. نام یا شناسه متغیر شامل حروف، اعداد و زیر خط ( _ ) میشود. اسم متغیر باید با یک حرف شروع شود. به خاطر داشته باشید که MQL به بزرگی و کوچکی حروف انگلیسی حساس است. یعنی S و s برای MQL دو اسم متفاوت هستند.
مثالهایی از اسامی متغیرها: Alpha، alFA، beta، NuMbEr، Num، A_37
متغیر با نام A_22 با a_22 تفاوت دارد.
مقدار متغیرها میتواند عدد و رشته حروف باشد.
خاصیت متغیر
خاصیت متغیر، قابلیت آن در گرفتن مقدار جدید از برنامه و نگهداری آن برای زمانی است که برنامه دوباره به آن متغیر نیاز پیدا میکند. متغیر میتواند مقدار پیشفرض داشته باشد. بر خلاف ثابتها، متغیر میتواند در زمان اجرای برنامه مقدار جدیدی بگیرد.
در حافظه کامپیوتر مکانی برای متغیر و مقدار آن مشخص میشود. در زمان اجرای کدهای برنامه، مقدار متغیر توسط برنامه فراخوانی میشود. بایستی توجه داشت که مقدار متغیر میتواند تغییر کند، اما نام متغیر قابل تغییر نیست. در زمان برنامهنویسی میتواند نامی برای متغیر انتخاب کرد. با این حال همین که برنامه اجرا شد، نه برنامهنویس، نه کامپیوتر و نه خود برنامه نمیتوانند نام متغیر را تغییر دهند.
نحوه استفاده از برنامه از متغیر
اگر در زمان اجرا، برنامه به نام متغیر برسد، مقدار متغیر در محاسبات استفاده خواهد شد. زمانی که برنامه متغیر را فراخوانی میکند، متغیر کپی از خود را به برنامه میدهد. در این لحظه مقدار متغیر تغییر نمیکند.
بعد از اینکه متغیر توسط برنامه فراخوانی شد و کار برنامه با متغیر تمام شد، متغیر برای مدتی کنار گذاشته میشود و تا وقتیکه فراخوانی نشده، بدون استفاده باقی خواهد ماند. در این دوره، شاید برنامه به سایر متغیرها رجوع کند تا محاسبات لازم را انجام دهد.
تا وقتیکه متغیر تنها فراخوانی شده و کار دیگری روی آن صورت نگرفته، مقدار متغیر هم تغییر نخواهد کرد. اما گاهی اوقات لازم میشود که مقدار متغیر بعد از انجام محاسبات دلخواهی تغییر کند. در این صورت برنامه مقدار جدیدی را به متغیر خواهد داد. مقدار متغیر توسط برنامه تغییر میکند. مقدار قبلی متغیر پاک میشود و مقدار جدید انتصاب میگردد.
مثالی از ثابتها و متغیرها در برنامه
در این بخش میخواهیم با نحوه کارکرد ثابتها و متغیرها آشنا شویم. فعلاً نگران تعریف آنها نباشید و به نحوه کار آنها تمرکز کنید. به دو خط کد زیر توجه کنید:
در خط یک (Line 1):
- ثابت ۷ برای برنامه تعریف شده است.
- متغیر A مقدار ۷ را از برنامه میگیرد.
در خط دو (Line 2):
برنامه با عبارتی مواجه میشود و میخواهد آن را محاسبه کند.
- ثابت ۳ مقدارش برای برنامه تعریف میشود.
- برنامه متغیر A را فراخوانی میکند.
- متغیر A مقدار ۷ را از برنامه میگیرد.
- برنامه معادله ۷ + ۳ را محاسبه میکند.
- متغیر B مقدار ۱۰ را از برنامه میگیرد.
مقدار متغیر میتواند در طول زمان اجرا تغییر کند. اگر کد زیر به برنامه اضافه شود، مقدار متغیر B در زمان اجرا تغییر خواهد کرد.
در خط سه (Line 3):
- مقدار ثابت ۳۳ برای برنامه تعریف میشود.
- متغیر B مقدار جدید ۳۳ را از برنامه میگیرد.
کاملاً روشن است که در خط دو، مقدار متغیر B برابر ۱۰ است، اما در خط سه مقدار متغیر B به ۳۳ تغییر میکند. در طول تمام محاسبات، اسم متغیر B بدون تغییر باقی میماند، اما مقدار آن تغییر میکند.
انواع داده های MQL
همه ما میدانیم که تنها مقادیری که نوع آنها یکی است را میتوان با هم جمع یا از هم کم کرد. به طور مثال، سیب را میتوان با سیب دیگر جمع کرد، اما نمیتوان یک سیب را با دو متر جمع کرد. همین محدودیت در برنامهنویسی هم وجود دارد و دقیقاً به همین دلیل نوع داده یا Data Type برای برنامه نویسان MQL اهمیت دارد.
همانطور که اشیا عادی که در زندگی با آنها سر و کار داریم، ویژگیهایی مثل رنگ، مزه و تعداد دارند، زبان برنامهنویسی MQL هم انواع مشخصی از دادهها را به کار میگیرد. منظور از انواع داده یا Data Type، نوع داده یک ثابت، متغیر و یا مقدار بازگشتی یک تابع است.
در زبان برنامهنویسی MQL انواع دادهها عبارتاند از:
- Int: اعداد صحیح
- Double: اعداد حقیقی
- bool: مقدار منطقی صفر و یک
- string: رشته حروف
- color: رنگ
- datetime: تاریخ و زمان
آشنایی با نوع داده int: اعداد صحیح
نوع داده int معرف اعداد صحیح است. تعداد کندل های موجود در چارت (۱۶۰۰۰)، تعداد دستورات باز شده و پندینگ (۳ دستور) و فاصله بین قیمت فعلی بازار و قیمت ورود به معامله (۱۵ پیپ) مثالی از اعداد صحیح یا نوع داده int هستند. اعداد صحیح کسری نیستند و شامل اعداد طبیعی (۱، ۲، ۳ و …)، عدد صفر و اعداد منفی میشود.
در زبان برنامهنویسی MQL برای int دو روش مقدار دهی وجود دارد:
- Decimal: مقادیر دسی مال شامل رقمهای ۰ تا ۹ میشود و میتواند مثبت یا منفی باشد: ۱۰ یا ۳۹۵-
- Hexadecimal: مقادیر در هگزا دسی مال شامل حروف A تا F و ارقام ۰ تا ۹ میشود و باید با ۰X یا ۰x شروع شوند: ۰x1a7b.
مقداری که برای متغیر یا ثابت از نوع int تعیین میشود باید در محدوده بین منفی ۲۱۴۷۴۸۳۶۴۸ و ۲۱۴۷۴۸۳۶۴۷ قرار داشته باشد. اگر مقداری که برای ثابت یا متغیر نوع int تعریف میکنید خارج از این رنج باشد، به مشکل بر خواهید خورد. در کامپیوتر متغیر یا ثابت نوع int چهار بایت از حافظه را اشغال میکند. در زیر میتوانید مثالهایی از نحوه تعریف متغیر نوع int و نحوه مقدار دهی آن را مشاهده کنید:
آشنایی با نوع داده double: اعداد حقیقی
داده دابل نوعی از داده است که شامل اعداد اعشاری هم میشود. مثل شیب خط روندی، نرخ برابری جفت ارز یا میانگین تعداد سفارشات باز شده در یک روز.
گاهی اوقات در حین برنامهنویسی به مسائلی بر میخوریم که در زمان نوشتن برنامه نمیدانیم که نوع داده چه خواهد بود؟ int یا double. در چنین شرایطی بهتر است که نوع داده را double در نظر بگیریم.
مقدار ثابت و متغیرهای نوع double شامل اعداد صحیح و اعداد اعشاری میشود. مقدار double میتواند منفی یا مثبت باشد. طول بخش اعشاری میتواند تا ۱۵ رقم اعشار هم برسد. نوع داده double میتواند ۲۷٫۱۲، ۱۹۸۷۳۲٫۰۸ یا منفی ۰٫۱۲۳۴۵۶۷۸۹۰۱۲۳۴۵ باشد.
مقداری که برای متغیر یا ثابت double تعریف میکنید باید بین منفی ۱٫۷e-308 و ۱٫۷e308 باشد. هر متغیر یا ثابت نوع double هشت بایت از حافظه کامپیوتر را اشغال میکند. در زیر نحوه تعریف و مقدار دهی دادههای نوع double نمایش داده شده است:
آشنایی با نوع داده bool: صفر و یک
دادههای نوع بولین یا bool از نوع دادههای منطقی است و تنها میتواند مقدار صفر یا یک و یا True و False را قبول کند.
در تصویر زیر میتوانید نحوه تعریف و مقدار دهی متغیرهای بولین را مشاهده کنید:
آشنایی با نوع داده string: رشته حروف
مقادیری که متغیر یا ثابتهای string قبول میکنند، رشتهای از کاراکترهاست. مثل اسم کوچک یک شخص. برای مقدار دهی متغیر یا ثابت از نوع string باید از “” استفاده کنید. طول هر ثابت یا متغیر string میتواند بین صفر تا ۲۵۵ کاراکتر باشد.
توجه داشته باشید که اگر در داخل متغیر یا ثابت string از \n یا \t استفاده کنید، برنامه به طور خودکار آنها را به عنوان فرمت بندی متنی اجرا خواهد کرد. به طور مثال \n باعث خواهد شد تا بقیه متن از ابتدای خط بعدی نمایش داده شود. یا \t باعث خواهد شد تا حروفی که بعد از آن آورده شدهاند، در زمان نمایش یک تب فاصله بگیرند.
آشنایی با نوع داده color: رنگ
در برنامهنویسی MQL، رنگها را در متغیر یا ثابتهایی با نوع color ذخیره میکنیم. مقادیری که به متغیرهایی با نوع داده color میدهیم، کاملاً مشخص هستند. برای مقدار دهی متغیر و ثابتهایی با نوع color، چند روش وجود دارد:
مقدار دهی به صورت RGB
در این روش ابتدا حرف بزرگ C را مینویسیم و سپس اعداد RGB رنگ را وارد میکنیم. به طور مثال: C’۱۲۸,۱۲۸,۱۲۸’ یا C’۰x00,0x00,0xFF’
مقدار دهی integer
در این روش رنگها به صورت اعداد دسیمال یا هگزادسیمال تعریف میشوند. به طور مثال در روش هگزادسیمال رنگ را میتوان به صورت ۰xRRGGBB تعریف کرد. RR همان شدت رنگ قرمز، GG شدت رنگ سبز و BB شدت رنگ آبی است.
در حال حاضر استفاده از مقدار دهی هگزادسیمال (۰xRRGGBB) رایجتر از روشهای دیگر است. مثلاً رنگ سفید را با ۰xFFFFFF نمایش میدهیم. در اکثر برنامههای انتخاب رنگ شما میتوانید روش نمایش رنگ را انتخاب کنید. مقدار دسیمال رنگ سفید هم میشود ۱۶۷۷۷۲۱۵٫
مقدار دهی با نام رنگها
سادهترین روش برای مقدار دهی متغیرهای نوع رنگ، استفاده از خود نام رنگهاست. در این روش کافی متغیر یا ثابت را طبق جدول زیر مقدار دهی کنید.
توجه داشته باشید که متغیر و ثابت نوع رنگ چهار بایت از حافظه کامپیوتر را اشغال میکند.
آشنایی با نوع داده datetime: تاریخ و زمان
همانطور که از اسم نوع داده datetime مشخص است. از این نوع داده برای کار با تاریخ و ساعت استفاده میشود.
مقدار متغیر و ثابتهای datetime برای تحلیل زمان شروع و پایان رویدادهای خاص استفاده میشوند. مقدار نوع داده datetime از شش بخش تشکیل شده است: سال، ماه، روز، ساعت، دقیقه و ثانیه.
در تصویر زیر نحوه تعریف و مقدار دهی متغیر و ثابت نوع datetime را میتوانید مشاهده کنید:
چگونه در MQL متغیر را تعریف و مقدار دهی کنیم؟
اگر میخواهید در برنامه محاسبات انجام دهید و یا مقادیری را ذخیره و فراخوانی کنید، باید ابتدا متغیر مورد نظر را به کامپایلر معرفی کنید. MQL انتظار دارد که نوع متغیر در ابتدای برنامه تعریف شود. در واقع قبل از اینکه از متغیری استفاده کنید، باید ابتدا متغیر را معرفی و مقدار دهی اولیه کنید.
معرفی متغیر
معرفی متغیر اولین اشاره به متغیر در برنامه است. در زمان معرفی متغیر، باید نوع متغیر و نام آن مشخص شود.
مقدار دهی اولیه متغیر
مقداری که به متغیر در زمان معرفی آن میدهیم، همان عمل مقدار دهی اولیه است. هر متغیری را میتوان مقدار دهی اولیه کرد. اگر به طور مشخص مقدار اولیهای به متغیر اختصاص ندهید، متغیرهای نوع عددی مقدار صفر و متغیرهای string با خط خالی مقدار دهی خواهند شد.
متغیر را میتوان در یک خط (مثل تصویر زیر) معرفی کرد:
خط بالایی متغیری به نام Var_1 با نوع داده int را به برنامه معرفی میکند. شما میتوانید چند متغیر از یک نوع را در یک خط تعریف کنید. کافی است بین اسامی متغیرها ویرگول بگذارید:
خط بالایی متغیرهای Var_1، Box و Comm را با نوع int به برنامه معرفی میکند. توجه داشته باشید که چون متغیرهای بالایی مقدار دهی اولیه نشدهاند، مقدار اولیه آنها صفر خواهد بود.
شما میتوانید در ابتدای معرفی متغیرها، آنها را مقدار دهی هم کنید:
خط بالایی متغیر Var_5 با مقدار اولیه ۳٫۷ و از نوع double را به برنامه معرفی میکند.
توجه داشته باشید که هر متغیر تنها یک بار معرفی میشود و نوع آن هم تنها یک بار به برنامه اعلام میشود. در استفادههای بعدی از متغیر، نباید نوع آن را مشخص کرد. چونکه برنامه بعد از معرفی متغیر، نوع آن را به خاطر میسپارد. در زمان استفاده متغیر، مقدار آن شاید تغییر کند، اما نام و نوع آن هیچ وقت تغییر نخواهد کرد.
همچنین توجه داشته باشید که نام متغیر هیچ ربطی به نوع آن ندارد.
مثالی از معرفی (declaration) و مقدار دهی اولیه (initialization) متغیر
متغیرها را میتوان در چند خط یا تنها در یک خط معرفی کرد.
شما اجازه دارید تا چند متغیر هم نوع را همزمان در یک خط تعریف کنید. در این صورت، نام متغیرهای هم نوع با کاما (,) از هم جدا خواهد شد.
به خاطر داشته باشید که در برنامهنویسی MQL در انتهای خط تعریف متغیر باید از ; استفاده کنید.
نوع داده متغیر تنها یک بار در برنامه معرفی میشود. آن هم تنها در زمان معرفی متغیر است. در استفادههای بعدی از متغیر، اشارهای به نوع داده آن نخواهد شد.
شما به عنوان برنامهنویس اجازه دارید تا متغیرها را در زمان تعریف، در میانه کد و یا در داخل عملگرها مقدار دهی اولیه کنید.
آشنایی با عملگر های MQL
اهمیت عملگرها در برنامهنویسی برای هیچ کس پوشیده نیست. عملگرها و عبارات برنامهنویسی درست مشابه عبارات و عملگرهای ریاضی هستند.
همه میدانند که f = n + m چیست؟ f، n و m متغیر هستند. = و + هم علائم عملیات ریاضی هستند و n + m هم یک عبارت است.
در این بخش میخواهیم با روابط بین دادههایی که استفاده میکنیم، آشنا شویم. در زبان برنامهنویسی MQL، محدودیتهایی در استفاده از عملگرها در عبارات وجود دارد.
انواع عملگر در برنامهنویسی ام کیو ال
در زبان برنامهنویسی MQL شما میتوانید عملیات زیر را در برنامههای خود پیادهسازی کنید:
آشنایی با عملگرهای حسابی
جدول زیر نماد، عملیات و مثال مربوط به عملگرهای حسابی را به تصور کشیده است:
عملگرهای انتسابی
جدول زیر نماد، عملیات، مثال و توضیحی از عملگرهای انتسابی است.
عملگرهای نسبی
در جدول زیر عملگرهای نسبی با مثال توضیح داده شدهاند.
عملگر منطقی
جدول زیر عملگرهای منطقی یا بولین را توضیح میدهد.
عملگرهای بیتی
عملگرهای بیتی را تنها میتوان روی دادههای نوع integer اعمال کرد.
عملگر NOT، Complement یا ~ : این عملگر مقدار هر بیت را معکوس میکند. به طور مثال ~۱ میشود ۰٫ یا ~۱۱۰۰۱۱ میشود ۰۰۱۱۰۰٫
عملگر شیفت به راست یا >> : در این عملگر بیتی این گونه عمل میکند که x را به اندازه y به سمت راست شیفت میدهد.
عملگر شیفت به چپ >> : عملگر شیفت به چپ، x را به اندازه y به سمت چپ شیفت میدهد.
عملگر بیتی AND: عملگر AND زمانی درست یا true یا ۱ خواهد بود که تمامی بیتهای x و y برابر ۱ باشند. زمانی هم x & y نادرست یا false یا ۰ خواهد بود که حداقل یکی از x یا y نادرست یا صفر باشند.
عملگر OR: عملگر OR زمانی درست، True یا ۱ خواهد بود که حداقل یکی از x یا y یک باشد. پس x | y زمانی درست است که یکی از طرفین یک یا true باشد.
عملگر XOR: عملگر XOR که با نماد ^ زمانی درست خواهد بود که مقدار x و y متفاوت باشند. یعنی x ^ y زمانی درست است که مقدار x با y یکی نباشد.
عملگر کاما
عباراتی که با کاما (,) از یکدیگر جدا شده باشند، از چپ به راست محاسبه خواهند شد.
فراخوانی تابع
فراخوانی تابع به طور کامل در بخش مربوط به تابعها بررسی شده است.
آشنایی با دستورات MQL
برنامهنویسی بدون درک ماهیت دستور (Operator) کاری غیر ممکن به نظر میرسد. هر چقدر زودتر مفهوم دستور را درک کنید، همان قدر هم زودتر میتوانید پروسه نوشتن برنامههای MQL را شروع کنید.
دستور یا Operator بخشی از برنامه است. یک عبارت در زبان الگوریتمی است که یک روش تبدیل داده را توصیف میکند. هر برنامهای از چندین دستور تشکیل شده است. نزدیکترین مثال برای مفهوم دستور، جمله است. درست مثل جمله که شامل کلمات و داستانی است، دستور هم مثل یک جمله در زبان برنامهنویسی است.
خصوصیات دستور
دو نوع ویژگی برای دستور وجود دارد: ویژگی عمومی و ویژگی خاص
ویژگی عمومی دستورات
تمامی دستورات یک ویژگی مشترک دارند، همه آنها اجرا میشوند!
میتوان گفت که یک دستور شامل دستورالعملی است که برنامه آن را اجرا میکند. برای یک کامپیوتر، اجرای برنامه به این معنی است که هر دستور کار خود را انجام میدهد و سپس صحنه اجرا را به دستور بعدی میسپارد.
دستور یک رکورد است که شامل مجموعهای از کاراکترهاست. دستورات هیچ جایی در حافظه کامپیوتر ندارند! از دید سختافزاری دستورات اصلاً وجود ندارند! به همین دلیل است که در زمان اجرای برنامهها، دستورات تغییری نمیکنند.
ویژگی خاص دستورات
چندین نوع دستور وجود دارد. هر یک از دستورات ویژگیهای خاص خود را دارند. به طور مثال، ویژگی دستور مقداردهی یا Assignment Operator، توانایی آن در مقداردهی به یک متغیر است. ویژگی دستور حلقه، اجرای چندین باره دستورات است.
انواع دستور
دستور ساده
دستور ساده به سمی کالن یا “;” ختم میشود. این کاراکتر به کامپیوتر اعلام میکند که کار دستور تمام شده و میتواند دستور بعدی را اجرا کند. سمی کالن بخش ضروری برنامه است. شاید دستوری از چند خط تشکیل شده باشد، این سمی کالن است که نشان میدهد دستور کی تمام میشود.
دستور پیچیده یا ترکیبی
دستور ترکیبی از چندین دستور ساده تشکیل شده و هر یک از دستورات ساده هم به سمی کالن “;” ختم میشوند. دستورات ترکیبی را یک بلاک (Block) هم میگویند. هر بلاک شامل لیستی از دستورات است که داخل یک آکولاد قرار میگیرند. آکولاد آخر نشانگر پایان دستور ترکیبی یا بلاک است.
ترتیب اجرای دستور در ام کیو ال
یکی از ویژگیهای مهم هر برنامهای، ترتیب اجرای دستورات آن است. دستور بدون دلیل اجرا نمیشود! دستورات به همان ترتیبی که در برنامه نوشته شدهاند، اجرا میشوند. دستورات از سمت چپ به راست و از بالا به پایین اجرا میشوند.
این یعنی هر دو دستور ساده و ترکیبی به ترتیب و یک به یک اجرا میشوند. درست مثل خواندن یک متن شعر. که ابتدا خط ابتدایی خوانده میشود و سپس به خط بعدی میرویم و این ترتیب خواندن ادامه مییابد.
اگر در یک خط چندین دستور وجود داشته باشد، به ترتیب، از سمت چپ به راست و از بالا به پایین اجرا خواهند شد. دستورات داخل بلاک هم به همین ترتیب اجرا میشوند.