آموزش پایه MQL4
ساختار
اگر به هر کدام از زبانهای برنامهنویسی آشنایی داشته باشید که از C مشتق شده باشند، به راحتی در MQL برنامهنویسی خواهید کرد.
اما برای افراد غیر برنامهنویس که میخواهند با این زبان آشنا شوند، باید با نحوه نوشتن آشنا شوید.
در MQL، هر گزارهای با ; به اتمام میرسد که به آن یک عبارت گفته میشود. عبارت میتواند چندین خط باشد، و حتماً باید یک ; در انتهای آن وجود داشته باشد.
extern double StopLoss = 15.0; // single line expression
یا این عبارت چند خطی را در نظر بگیرید:
if (FastMACurrent > SlowMACurrent)
OpenBuy=true; // multi line expression
اگر تازه وارد دنیای برنامهنویسی شده باشید، باید حتماً مطمئن شوید که در انتهای هر گزاره یک نقطه ویرگوی (;) بگذارید. عدم انجام این کار یک اشتباه رایج برای تازهکارها است.
استثنای قانون نقطه ویرگول: عملگر ترکیبی
عملگر ترکیبی خطوطی از کد است که چندین عبارت را در داخل {} جای میدهد. عملگرهای ترکیبی میتوانند شامل عملگرهای کنترلی (if, switch)، عملگرهای چرخهای (for, while) و اظهار تابع باشند. در ادامه نمونهای از عملگر کنترل آمده است:
if(Bars<100)
{ Print(“Bars less than 100”);
return(0); }
توجه داشته باشید که در اینجا در انتهای عملگر if اولیه نقطه ویرگول قرار نمیدهید. همچنین نیازی نیست پس از بستن {} نیز نقطه ویرگول بگذارید. پس از تابع Print() یک نقطه ویرگول وجود دارد. دلیل این کار این است که میتوان یک یا چند عبارت را داخل کروشه گذاشت، و هر عبارت باید با یک نقطه ویرگول به پایان برسد.
نکته
یک روش سریع برای بررسی صحت ساختار وجود دارد. اگر دکمه کامپایل را پس از کامل کردن عبارتها و گزارهها در ویرایشگر فشار دهید، اگر فراموش کرده باشید که عبارتی را با ; به پایان برسانید و یا اگر فراموش کرده باشید پرانتزی را ببندید یا کروشه و پرانتزی را با کروشه و پرانتز دیگر نبسته باشید، سیلی از خطاها را مشاهده خواهید کرد.
کامنتها
کامنتهای MQL4 نیز همانند کامنتهی سایر زبانها در کد برای توصیف نشانهگذاری و یا حذف موقت کد به هنگام تست و اشکال زدایی استفاده میشود. همچنین میتوانید برای معنادار کردن کد، از آن برای مستند سازی استفاده کنید. زبان کدنویسی میتواند گاهی اوقات بسیار مبهم باشد، و بسیار خوب است به زبان ساده سعی کنید کاری که این کد انجام میدهد را توصیف کنید. به علاوه، میتوانید با استفاده از کامنتها، به صورت موقت خطی از کد را حذف کنید، بدون اینکه آن را پاک کنید.
دو روش برای وارد کردن کامنت وجود دارد: 1) کامنتهای یک خطی، 2) کامنتهای چندخطی
ساختار کامنت تک خطی
// We have made a comment
کامنتها پس از دو اسلش رو به جلو میآیند (//). هر خطی که با // شروع شود متن آزاد است و برنامه آن را در نظر نمیگیرد. این کار میتواند برای بلاک کردن یک خط از کد برای تست مفید واقع شود.
ساختار کامنت چند خطی
/* we are going to block out a bunch of code */
کامنتها با/* شروع شده و با */ به اتمام میرسند.
این نوع کامنتگذاری برای غیر فعال کردن سریع خطوطی از کد به صورت یکباره به کار میرود، نه اینکه در ابتدا تک به تک خطوط // قرار داده شود. هنگامی که قطعه کدی را میخواهید بلوکه کنید، استفاده از // در ابتدای هر خط زمانبر خواهد بود، و برای استفادهی راحت، میتوانید از تکنیک کامنت چند خطی استفاده کنید.
متغیرها
متغیر یک واحد ذخیرهسازی ابتدایی برای تمام زبانهای برنامهنویسی است، که دادههای مورد نیاز برای عملکرد برنامه را در خود دارد. متغیرها باید احضار شوند، و برای احضر متغیر، سه قسمت را در کنار هم قرار میدهید که در این مثال میبینیم:
double Lots = 0.1;
در اینجا این کد به سه قسمت تقسیم شده است:
نوع داده (مثال: دوبل)، پس از آن یک شناساگر (مثال: Lots)، و پس از آن مقدار پیش فرض (مثال: 0.1) پس از علامت مساوی.
نوع داده در اینجا نوع اطلاعاتی را مشخص میکند که این متغیر در خود دارد، مانند عدد، رشته متنی، تاریخ یا یک رنگ. در اینجا چند نوع داده رایج آمده است:
نوع داده | توضیح |
int | اینتیجر (عدد صحیح) مانند 0، 3، یا -5. هر عددی که به اینتیجر وارد شود گرد میشود. |
double | یک عدد کسری مانند 0.01 |
string | رشته متنی مانند «تفنگ خود را شلیک کردید». رشتهها باید با نقل قول مشخص شوند. |
boolean | یک مقدار صحیح/غلط. همچنین میتوان آن را به صورت 1(صحیح) و 0(غلط) نشان داد. |
datetime | زمان و تاریخ مانند 2011.01.01 01:11 |
در اینجا شناساگر Lots میتواند چیزهای بسیار دیگری نیز باشد، مانند ilots، ordersize، volume.
شناساگر نامی است که به متغیرها و تابعهای سفارشی داده میشود، و میتواند ترکیبی از اعداد، حروف و کاراکتر زیرخط (_) باشد و طول آن میتواند حداکثر 31 کاراکتر باشد. شناساگر یک انتخاب اختیاری از کلمات است که باید توصیفی از هدف شما باشد.
برخی کدنویسها از حروف و عدد استفاده میکنند، مانند gd_104، نه کلمههای ساده، اما این باعث میشود کد از دیدگاه افراد دیگر قابل خواندن نباشد (یا اگر فراموش کرده باشید این حروف و عددهای ترکیبی چه کاری میکنند ممکن است خودتان نیز نتوانید کد را بخوانید). بهتر کاری کنید خواندن و یادآوری آسان شود. به علاوه، به یاد داشته باشید که شناساگرها نسبت به بزرگی و کوچکی حروف حساس هستند (Lots و lots شناساگرهای متفاوتی هستند) و همچنین به املاء نیز حساسیت دارند (Lot و Lots متفاوت هستند)، پس اطمینان حاصل کنید بزرگی و کوچکی حروف و املای تمام شناساگرها صحیح باشد (یک اشتباه رایج برای تازهکارها).
پس از اینکه یک متغیر احضار شد، میتوان مقدار آن را با انتصاب یک مقدار جدید تغییر داد، مثال زیر را ببینید:
double Lots = 0.1;
mylotsi = Lots;
// mylotsi is 0.1
توجه داشته باشید که متغیر منتسب شده باید نوع داده یکسانی داشته باشد، در غیر این صورت نتایج نامطلوبی ایجاد خواهد شد.
متغیرهایی که قبل از آنها extern بیاید، متغیرهای خارجی نامیده میشوند.
extern double Lots = 0.1;
extern double StopLoss = 50;
این متغیرها برای بخش اول EA کاربرد دارند، که بتوان دسترسی به مقدار آنها از طریق پنجره Properties برنامه را امکانپذیر و قابل تغییر کرد.
ثابتها
اگر متغیر بتواند مقداری که دارد را بعداً تغییر داده و اصلاح کند، ثابت (یا ثبات) برعکس آن است، مقدار دادهای که هرگز تغییر پیدا نمیکند.
برای مثال، تمام عددها از 0 تا 9 ثابتهای اینتیجر هستند، صحیح و غلط ثابتهای بولی هستند، قرمز یک ثابت رنگی است و 2011.01.01 00:00 نیز یک ثابت تاریخ و زمان برای دهم ژانویه 2010 هستند.
انواع ثابتهای استاندارد برای چیزهایی مانند دادههای قیمت، نقطههای روی چارت، رنگها و عملگرهای تبادلی وجود دارد. در اینجا PERIOD_M1 یک ثابت برای چهارچوب زمانی چارت M1 و OP_SELL نیز به سفارش فروش یک بازار تعلق دارد.
در مرجع ثابتهای استاندارد MQL4 میتوانید اطلاعات بیشتری به دست آورید.
توابع
توابع اجزای سازنده این زبان هستند. تابع بلوکی از کد است که برای اجرای یک کار خاص طراحی شده است، مانند ایجاد یک سفارش یا محاسبه توقف یک توالی.
توابع استاندارد
در MQL4 بیش از 220 استاندارد وجود دارد، البته این تعداد جدای از توابع شناساگرهای فنی است. هرگاه این توابع در کد را اجرا میکند، اغلب رنگ مخصوص به خود را خواهند داشت (مانند بنفش) و به عبارت داخل پرانتز ارجاع خواهند داد، مانند تابع پرینت که قبلاً به آن ارجاع شد.
Print(“Bars less than 100”);
تابع Print () یک تابع رایج برای احضار چیزهایی است که در بیرون برنامه قرار دارند، که آن را در دسته مشابه توابعی مانند Comment ()، PlaySound()، MessageBox() قرار میدهد. تمام این استانداردها (یا توابع محلی) را میتوانید در اینجا پیدا کنید.
توابع دارای این مزیت هستند که میتوان از آنها مجدداً استفاده کرد، یعنی میتوان آنها را از نقاط مختلفی در برنامه طبق نیاز اجرا کرد. در حالت کلی، تابع گروهی از گزارههای برنامه است که به یک واحد تبدیل شده و یک نام به آن اختصاص یافته است. این واحد را میتوان از سایر بخشهای برنامه فراخوانی کرد.
در مقاله بعدی در مورد کار با استانداردها و توابع سفارشی بیشتر توضیح خواهیم داد.
نکته
توابع و ثابتهای محلی بسیاری در MQL4 وجود دارد که تقریباً امکان حفظ و یادگیری همه آنها امکانپذیر نیست. امکان این وجود ندارد بدانید چه وقت به آن نیاز خواهید داشت و یا مورد به مورد آنها را یاد بگیرید. به گذر زمان و با تمرین بسیاری از آنها را یاد خواهید گرفت. میبینید که اکثر ثابتها و توابع استاندارد به صورت رنگی کدگذاری شدهاند، و یک روش سریع برای یادگیری آنها این است که ماوس خود را بر روی کلمه رنگی قرار داده و F1 را فشار دهید. این مرجع MQL4 را برای آن کلمه در زیر ویرایشگر (ادیتور) باز خواهد کرد.
توابع سفارشی
خارج از توابع استاندارد یا محلی، توابعی وجود دارند که میتوانید مطابق با نیازهای خود آنها را ایجاد کنید، و از مزیت مصرف مجدد آنها بهرمند شوید. پس از اینکه تابعی را ایجاد کردید، مانند بستن سفارش، میتوانید در بخشهای مختلفی از برنامه از آن استفاده کرده و یا تابع را برای راحتی بیشتر در سایر مشاورههای تخصصی که روی آنها کار میکنید کپی کنید.