آموزش برنامه نویسی با MQL
با استفاده از MQL میتوان Expert Advisor و Custom Indicator برای پلتفرم معاملاتی Metatrader ایجاد نمود. پلتفرم Metatrader بهطور گسترده توسط کارگزاران بازارهای سرمایه مورد استفاده قرار میگیرد و جدیدا هم این پلتتفرم معاملاتی در ایران توسط کارگزاران بورس مورد استفاده قرار گرفته است.
Expert Advisor :
یا EA ، همان رباتهای معاملهگر میباشند. EA در واقع یک اسکریپت میباشد که در MetaTrader و بر روی یک یا چند چارت خاص اجرا گشته و برنامه بصورت اتوماتیک براساس شرایطی که در اسکریپت برنامه ذکر شده است اجرا میشود و میتواند خرید یا فروش انجام دهد.
برای اینکه سریع تر وارد ماجرا شویم از یک مثال شروع میکنیم.
فرض کنید ما بنا به تجربه تحلیل تکنیکالی که داشتیم به این نتیجه رسیدهایم که برای یک نماد خاص (مثلا نماد فملی) اگر Moving Agerage با پارامتر 1 با Moving Average با پارامتر 17 ، Cross رو به بالا کند، خرید کنیم و این خرید درصورتی که به 300 ریال سود برای هر سهم رسید اقدام به فروش نماییم.
بطور کلی به هر روش معاملاتی مانند مثلا بالا که شرایط ورود و خروج مشخصی را بر مبنای تحلیل تکنیکال مشخص نماید یک استراتژی معاملاتی میگوییم. بنابراین استراتژی معاملاتی شامل گزینههای زیر است :
شرایط ورود : مثلا در مثال بالا اگر cross رخ دهد وارد خرید خواهیم شد، بطور کلی یکی از بهترین روش های شرط یا شرایط خروج : در صورتی که شرایط معینی رخ دهد ( مانند Take Profit یا Stop Loss یا ایندیکیتور ها شرایط خاصی را اعلام نمایند) بنابراین در صورتی که با EA آشنا نباشیم باید هر روز صبح نمودار قیمت را نگاه کنیم و اگر cross رخ داده باشد طبق این استراتژی خرید انجام میدهیم و هر موقع که خریدمان به حد سود 300 ریال رسید اقدام به فروش نماییم. البته کار سادهای هست ولی مستلزم صرف وقت بیشتری است به علاوه که EA را میتوان براساس چند نماد بطور همزمان قرار داد.
البته شاید در نظر خیلی از معاملهگران اینکه روبات خودش اقدام به خرید یا فروش نماید خطرناک باشد در این شرایط میتوان EA را طوری برنامه نویسی کرد که Alert اعلام نماید تا معاملهگر بنا به شرایط دیگری خودش تصمیم نهایی را بگیرد. برگردیم به مثال مطرح شده :
شرط ورود : MA cross over (1,17 )
شرط خروج : کسب سود 300 ریال
شرط خروج فرعی : ضرر 250 ریال برای هر سهم
شرط خروج 2 باعث میشود که از شرط اول تحقق نیافت با ضرر سنگین مواجه نشویم.
نصب ابزارهای مورد نیاز :
مهمترین ابزاری که برای شروع کار نیاز هست برنامه MetaTrader 5 میباشد. این نرمافزار توسط شرکت MetaQouts برای بازارهای سرمایه طراحی شده است. در حال حاضر شرکت کارگزاری مفید با کمک شرکت تدبیر پرداز نسخه سرور و کلاینت این نرمافزار را خریداری کردهاند و امکان استفاده از امکان این نرمافزار معاملاتی بسیار محبوب برای بورس ایران وجود دارد. البته این نرمافزار در سایت کارگزاری مفید با نام MofidTrader در دسترس همگان قرار دارد.
خوشبختانه امکان باز کردن حساب مجازی یا دمو با MofidTrader وجود دارد و برای شروع نیاز به افتتاح حساب واقعی نزد کارگزاری مفید نیست.
برای استفاده از نرم افزار MetaTrader به آدرس http://en.emofid.com/how-to-invest/online-trading / بروید و مطابق دستورالعملهای داده شده نرمافزار را دانلود و نصب نمایید. پس از تکمیل نصب نرمافزار، در قسمت Open new accout یک حساب مجازی افتتاح نمایید.
برنامه نویسی با MQL
برنامهنویسی MQL بسیار شبیه برنامه نویسی C و شاید هم تا حدی شبیه JavaScript میباشد. در این مقالات سعی شده است که در کوتاهترین راه ممکن خواننده بتواند برنامههای ساده با استفاده از MQL تولید کند. به همین دلیل مطالب پر کاربردتر اول توضیح داده شده است. برنامهنویسی به زبان MQL از یکسری توابع و یکسری متغییرها تشکیل شده است :
مثلا برنامه زیر، بخشی از یک برنامه به زبان MQL5 میباشد.
//----------------------------------------------------------------------
// ExpertMACD.mq5
// Copyright 2010, MetaQuotes Software Corp
// http://www.mql5.com
//----------------------------------------------------------------------
#property copyright "Copyright 2010, MetaQuotes Software Corp ."
#property link "http://www.mql5.com "
#property version "1.00 "
//----------------------------------------------------------------------
// Include
//----------------------------------------------------------------------
#include <Expert\Expert.mqh>
#include <Expert\Signal\SignalMACD.mqh>
#include <Expert\Trailing\TrailingNone.mq>
#include <Expert\Money\MoneyNone.mqh>
این دستورات مشابه دستور include در C ، امکان استفاده از کتابخانههای آماده را فراهم می کند.
#include <trade/trade.mqh>
این قسمت متغییر های global برنامه قرار دارد.
متغییر هایی که با keyword ، input شروع میشوند پارامترهای ورودی برنامه هستند و هنگام attach کردن Expert به chart توسط کاربر مقدار دهی میشوند.
input double MaximumRisk = 0.02; // Maximum Risk in percentage
input double DecreaseFactor = 3; // Descrease factor
input int MovingPeriod = 12; // Moving Average period
input int MovingShift = 6; // Moving Average shift
//---
int ExtHandle=0 ;
اینجا تعریف اولین تابع شروع شده است ، تابع OnInit یک تابع پیش فرض MQL میباشد و در واقع event handler میباشد.
int OnInit ()
{
//---
ExtHandle=iMA(_Symbol,_Period,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE);
if(ExtHandle==INVALID_HANDLE)
{
printf("Error creating MA indicator”);
return(-1);
}
//---
Return(0);
}
//----------------------------------------------------------------------
// Expert tick function |
//----------------------------------------------------------------------
void OnTick ()
{
//---
if(PositionSelect(_Symbol)) CheckForClose();
else CheckForOpen();
//---
}
//----------------------------------------------------------------------
//Expert deinitialization function |
//----------------------------------------------------------------------
void OnDeinit(const int reason)
{
}
//----------------------------------------------------------------------
همان طور که می بینید برنامه از یکسری توابع پیشفرض تشکیل شده است. اینها توابع از پیش تعریف شده MQL میباشند. آشنایی با این توابع مهم است، زیرا در همه برنامههایEA وجود دارند.
تابع Onint()
این تابع فقط یک بار و آن هم در ابتدای اجرای برنامه فراخوانی میگردد، دقت کنید که ابتدای اجرای برنامه موقعی است که EA بر روی یک چارت یک نماد فعال میشود. بعدا در این رابطه توضیحات بیشتری ارائه میشود.
تابع OnTick()
این تابع، در هر tick جدید فراخوانی میشود. منظور از tick موقعی است که داده جدیدی در ارتباط با نمادی که expert برای آن فعال گردیده است دریافت گردد. این تابع بسیار مهم است زیرا نقطه اصلی اجرای برنامه است. بطور معمول برای نمادهای پرمعامله این تابع ممکن است هر یک ثانیه یک بار فراخوانی گردد.
تابع Ondeinit()
این تابع برعکس OnInit در انتهای فراخوانی میشود. انتهای اجرا برنامه موقعی است که پنجرهایی که EA بر روی آن قرار داده شده است بسته شود.
انواع داده ها در MQL5 :
انواع متغییرهایی که در MQL میتوان تعریف کرد بدین شرح است :
نوع داده |
اندازه(بایت) |
مقادیر ممکن |
bool |
1 |
شامل true و false |
char |
1 |
-128 to 127 |
uchar |
1 |
0 to 255 |
short |
2 |
-32 768 to 32 767 |
ushort |
2 |
0 to 65 535 |
int |
4 |
-2 147 483 648 to 2 147 483 647 |
uint |
4 |
0 to 4 294 967 295 |
long |
8 |
-9 223 372 036 854 775 808 to 9 223 372 036 854 775 807 |
ulong |
8 |
0 to 18 446 744 073 709 551 615 |
float |
4 |
مقادیر اعشاری |
double |
8 |
مقادیر اعشاری |
datetime |
8 |
برای ذخیرهسازی زمان و تاریخ |
color |
4 |
مقدار RGB را در خود نگه میدارد |
enum |
4 |
برای enumeration مقدایر صحیح استفاده میشود |
string |
متغیر |
شامل رشتهایی از کارکترها است. |
برای اینکه بهتر با رویه اجرای EA ها در Meta Trader آشنا شوید در این قسمت یکی از مثال های EA که همراه برنامه MetaTrade نصب میشود را بر روی یکی از نمادهای بورسی قرار میدهیم و بوسیله Strategy Tester اجرای این EA را در دوره های مختلف بررسی میکنیم.
برای شروع ابتدا Meta editor را باز کرده و از لیست Sample ها ، Moving Average.mq5 را باز کنید و برنامه را کامپایل نمایید

در صورتی که در این صفحه دکمه اجرا ( کلید F5 ) فراخوانی شود، این EA بر روی یکی از چارتها اجرا میشود. سپس در MetaTrader ، Ctrl + R را بزنید تا پنجره Strategy Test در پایین صفحه ظاهر شود. سپس در این پنجره مطابق زیر گزینههای مربوطه را پر نمایید

Strategy Tester میتواند یک EA بزبان MQL را با دادههای گذشته و با پارامترهای دلخواه تست نماید و در این رابطه نتایج بههمراه مجموعه آمار کاملی به کاربر ارائه میدهد.
مراجع :
· http://www.mql5.com /
این سایت بهترین مرجع برای یادگیری mql میباشد.این سایت قسمتهای مختلفی دارد :
· http://www.mql5.com/en/docs
این قسمت در واقع help نرمافزار هم میباشد و بزبان ساده ساختار برنامه و اجزای آن را توضیح داده است
· http://www.mql5.com/en/articles
این قسمت شامل مقالات بسیاری است که عمدتا توسط کاربران تهیه شده است ، برخی از مقلات در سطح مبتدی است و تعدادی هم نیازمند دانش هوش مصنوعی و ریاضی میباشد.
منبع :
http://servatyar.ir/Default.aspx?tabid=169