چگونه با MQL برای بورس برنامه نویسی کنیم؟
بورس به بازاری سازمان یافته اشاره دارد که قیمت گذاری ها، خرید و فروش کالاها، سهام، قراردادهای آتی و اوراق بهادار در آن انجام می شود. در حالی که بورس به انواع مختلفی همچون بورس کالا، بورس ارز و بورس اوراق بهادار طبقه بندی می شود، اما در نهایت به یک اصل مهم یعنی سودآوری بردبرد برای طرفین اشاره دارد. به عبارت دقیق تر، شرکت های عرضه کننده سهام و افرادی که سهام را خریداری می کنند بازیگران اصلی این بازار هستند که به دنبال منفعت مالی هستند. البته گروه سومی که به آن ها کارگزاران می گوییم در بین این دو گروه قرار می گیرند و فارغ از افت و خیزهای بازار سهام، سود خود را دریافت می کنند.
چند وقتی است تب و تاب بورس حسابی در جامعه رواج پيدا کرده و اگر به شبکه های اجتماعی سری بزنید مشاهده می کنید که افراد مختلف درباره مشارکت در بورس، خرید سهام، حباب قیمت ها، رکوردشکنی ارزش سهام و مواردی از این دست صحبت می کنند. در حالیکه حضور در بورس حرکتی خردمندانه است و مزایای خوبی دارد و در مقیاس کلی به رشد اقتصادی شرکت ها و کشورها کمک می کند، اما واقعیت این است که تنها تعداد معدودی از افراد و شرکت ها حضور موفقی در بورس دارند.
در تمامی کشورها افراد و حتی موسسات مالی همچون بانک ها در بورس های بین المللی حضور پر رنگی دارند و بر مبنای انتخابی هوشمندانه سودهای کلانی را به دست می آورند، اما این موسسات و افراد حقیقی به دانشی فراتر از تماشای پنل قیمت ها و دنبال کردن اخبار اشراف دارند. دانشی که گروه خاصی از متخصصان در اختیار شرکت ها قرار می دهند. این متخصصان برنامه نویسانی هستند که تخصصی خاص بدست آورده و برای بورس برنامه نویسی می کنند.
به عبارت دقیق تر، اگر برنامه نویسی بتواند سختی ها را تحمل کرده و برنامه ای منحصر به فرد طراحی کند، برنامه او ممکن است ارزش میلیارد تومانی پیدا کند، اما برای ساخت چنین برنامهای به چه ابزاری نياز است؟
یکی از اصول مهم در تحلیل سهام بورس، در تحلیل نوسان قیمت ها خلاصه می شود. عوامل مختلفی همچون اقتصادی، سیاسی و حتی روان شناختی بر قیمت سهام اثرگذار هستند که این اثرگذاری به سرعت باعث تغییر و نوسان در قیمت ها می شود. قیمت ها همواره بر مبنای یک محرک خارجی دست خوش تغییر می شوند که لزوم بررسی دقیق نوسان قیمت ها و تحلیل ها آن ها را پدیدار می کنند. پیش بینی قیمت سهام فرآیند چندان ساده ای نیست، زیرا بايد جهش های ناگهانی و ناپایداری قیمت ها را تشخیص داده و فیلتر کرد. برای این منظور متخصصان با استناد به داده هایی که از گذشته در اختیار دارند و با استفاده از اندیکتورها اقدام به پیش بینی تحولات آینده می کنند. با توجه به اینکه امکان بررسی روزانه سهام و نمادهای متعلق به شرکت ها برای افراد و حتی سازمان ها امکان پذیر نیست، در نتیجه نرم افزارهایی برای انجام اینکار ابداع شدند و شکل جدیدی از معاملات را ایجاد کردند که به نام معاملات الگوریتمی شناخته میشوند.
معاملات الگوریتمی به نوع خاصی از مبادلات بازار اشاره دارند که تنها بر مبنای سفارش های تولید شده توسط یک روبات و بر مبنای یک برنامه راهبردی از پیش تعریف شده انجام می شوند. در روش فوق سهام به شکل کامل بررسی شده و به کاربر گزارشی ارائه می شود. به بیان ساده تر، در روش فوق اطلاعات گذشته سهام شبیه سازی شده و فرآیند آزمایش الگوریتم بر مبنای این داده ها انجام می شود. اگر عملکرد الگوریتم دقیق باشد قادر است درصد سود و خطا و همچنین زیان حاصله از برنامه های راهبردی قبلی را نشان دهد. به تدریج الگوریتم با داده های به روزتری تغذیه می شود تا میزان دقت آن پدیدار شود. زمانی که شرایط در وضعیت مطلوب قرار گرفت به شکل آزمایشی از آن استفاده می شود و معاملات بسیار محدودی بر مبنای آن انجام می شود تا کیفیت کار بررسی شود.
در نهایت اگر همه چیز در شرایط ایده آل قرار گرفت، نرم افزار به شکل رسمی از سوی موسسات بزرگ مالی برای پیش بینی نوسانات استفاده می شود. به طور مثال، در برخی موارد برنامه هوشمند به کارفرمایان اعلام می دارند بهتر است روی چه بازاری سرمایه گذاری بلند مدت داشته باشند. در نمونه های جدی تری، نرم افزارها به مالکان پیشنهاد می دهند سهامی را برای مدت زمانی بسیار کوتاه خریداری کنند و در چه ساعت، دقیقه و حتی ثانیه ای آنرا به فروش برسانند تا به سودآوری برسند. به طور مثال، شخصی ممکن است در یک بازه تنها ۸ دقیقه ای و بر مبنای یک خرید کاملا محدود سودی معادل ۲۰ هزار تومان به دست آورد. با این توصیف چه زبانی برای ساخت یک چنین ابزارهای تحلیل گیری مفید است؟ MQL ابزار مناسب برای انجام این کار است.
MQL چيست؟
MQL مختصر شده MetaQuotes Language زبان برنامه نویسی استراتژی های معاملاتی است. برنامه نویسان مجرب و تازه کار می توانند با مراجعه به راهنمایی ها و مستندات ارائه شده بدون مشکل خاصی یادگیری این زبان را آغاز کنند. البته افرادی که تازه با مباحثی همچون MetaTrade آشنا شده اند، ممکن است در ابتدای راه با سختی هایی روبرو شوند، اما اگر تمایل دارید حوزه جدیدی در دنیای برنامه نویسی را تجربه کنید که ضمن آموزش مفاهیم جدید، سودآور بوده و موقعیت های شغلی جدیدی پیش روی شما قرار دهد بهتر است از MQL5 غافل نشوید.
MQL به توسعه دهندگان اجازه می دهد روبات های معاملاتی یا سامانه های تحلیل گر اطلاعات را برای بازارهای مالی ایجاد کنند. نرم افزارهایی که ممکن است توسط توسعه دهنده استفاده شده یا به موسسات مالی فروخته شود. افرادی که موفق شوند برنامه هایی دقیق برای پیش بینی بازارهای مالی طراحی کنند، به راحتی قادر به فروش نرم افزار خود هستند. در این مقاله قصد داریم به معرفی یکسری نکات کاربردی در ارتباط با این زبان برنامه نویسي بپردازیم تا به درستی در این مسیر گام بردارید.
قابلیت ها و ویژگی های MQL
جدیدترین نسخه منتشر شده از این زبان برنامه نویسی MQL5 است. زبان برنامه نویسی فوق توسط شرکت MetaQuotes Software Corp ساخته شده است. شرکتی که سابقه طولانی و درخشان در ساخت زیرساخت های معاملاتی آنلاین دارد. از مهم ترین ویژگی های زبان MQL5 به موارد زير می توان اشاره کرد:
- ترکیب نحوی این زبان شباهت زیادی به C++ دارد و در نتیجه برنامه های نوشته شده به این زبان به راحتی با زبان های برنامه نویسی دیگر تطبیق داده می شوند.
- سرعت اجرای عملیات و دستورالعمل ها در MQL5 یکسان با برنامه های C++ است.
- برنامه نویسان می توانند قابلیت های از پیش ساخته شده این زبان را برای ساخت اندیکاتورهای فنی، اشیا گرافیکی و رابط های کاربری استفاده کنند.
- زبان برنامه نویسی فوق از OPENCL به شکل پیش فرض استفاده می کند.
- یک کتابخانه استاندارد بزرگ همراه با مثال های کاربردی متعدد از برنامه نویسان پشتیبانی می کند تا یادگیری مفاهیم با سهولت انجام شده و برنامه نویس زمان کمتری را صرف کدنویسی کند.
- در اغلب موارد برنامه نویسان می توانند بدون نیاز به نوشتن کدهای خاصی فرمول های ریاضی را برای ده ها یا حتی هزاران موضوع منحصر به فرد به کار گرفته و موازی سازی وظایف را به شیوه بهینه ای انجام دهند.
آموزش برنامه نویسی به زبان MQL
اکنون قصد داریم به شکلی کوتاه نحوه نصب و به کارگیری این زبان را نشان دهیم. در اولین گام باید نصب کننده MetaTrader 5 terminal web را از سایت رسمی دانلود کرده و نصب کنید. نصب متاتریدر 5 پیچیدگی خاصی ندارد و تمامی کارها با چند کلیک ساده انجام می شود.
بهتر است نرم افزار را روی درایوی نصب کنید که سیستم عامل ویندوز روی آن نصب نیست، زیرا ویژگی UAC ویندوز ممکن است در زمان اجرا مشکلاتی به وجود آورد.
اندیکاتورها، اسکریپت ها و اکسپرت ادوایزرها
MQL با سه نوع زیربنایی از برنامه ها کار می کند که هریک برای انجام کار خاصی مفید است. این برنامه ها به شرح زیر هستند:
- اسکریپت : اسکریپت برنامه ای است که تنها برای یکبار اجرا در یک نمودار قیمت طراحی می شود. زمانی که اجرا به پایان بخش از پیش تعریف شده در تابع OnStart() برسد، اسکریپت کامل شده و از حالت بارگذاری روی نمودار خارج می شود. تابع OnStart() تنها برای اسکریپت ها طراحی شده و تنها مکان شروعی است که کدهای اجرایی درون آن قرار می گیرند. یک اسکریپت ممکن است حلقه ای بی پایان با توقف های کوتاه میان تکرارها باشد و بطور مستمر روی یک نمودار اجرا شود تا زمانی که به شیوه دستی توسط کاربر متوقف شود. دقت کنید در هر زمان تنها یک اسکریپت روی یک نمودار اجرا می شود.
- اندیکاتور: برنامه ای برای محاسبه آرایه ای از مقادیر بر مبنای داده های قیمت است. آرایه هایی که برای ذخیره سازی مقادیر اندیکاتور استفاده می شوند بافرهای اندیکاتور نام دارند. یک اندیکاتور می تواند به تعداد نامحدود بافر مجاز داشته باشد. همچنین، هر نمودار قادر است به شکل همزمان چند اندیکاتور داشته باشد که برخی از آن ها چند نسخه از یک اندیکاتور هستند. توابعی که برای کار با خصایص اندیکاتور استفاده می شوند تنها از طریق اندیکاتورها در دسترس هستند و امکان بکارگیری آن ها از طریق اسکریپت ها یا اکسپرت ادوایزرها فراهم نیست. اگر کنترل کننده OnCalculate() در برنامه ای پیدا شود، برنامه به عنوان یک اندیکاتور شناخته می شود. دقت کنید اندیکاتورها نامحدود بوده و مادامی که از نمودار حذف نشوند، در حال اجرا خواهند بود. فراخوانی تابع OnCalculate() از درون اندیکاتورها است.
- اکسپرت ادوایزر: گونه دیگری از برنامه های با طول عمر نامحدود بوده و امکان قرار دادن آن برای مدت زمان طولانی روی یک نمودار وجود دارد. اکسپرت ادوایزرها به ویژگی خاصی به نام کنترل کننده رویداد OnTick() تجهیز شده اند که نشان می دهند در حال کار با کد منبع یک اکسپرت ادوایزر هستید. دقت کنید در هر زمان تنها یک اکسپرت ادوایزر قابل اجرا روی یک نمودار است. هدف از بکارگیری اکسپرت ادوایزر، خودکارسازی سامانه های معاملاتی است. کاربرد این برنامه ها متنوع است و به طور مثال، می توانند توابع خدماتی باشند که یک رابط گرافیکی برای معاملات دستی ارائه کرده يا وضعیت فعلی بازار را تحلیل کرده و به شکل بصری نشان دهند.
مثال های مندرج در مستندات MQL در سایت Code Base را بررسی کنید. در ادامه می توانید کار با توابع هدف و آزمایش عملیات معاملاتی در یک حساب کاربری آزمایشی را آغاز کنید. در مرحله بعد به سراغ ساخت اندیکاتورهای سفارشی خودتان رفته و مثال های مربوط به تجزیه و تحلیل نمونه ها را بررسی کنید. زمانی که دانش کافی در مورد اندیکاتورها به دست آورید، باید به سراغ یادگیری توابع کنترل رویدادها بروید. هدف این است که اکسپرت ادوایزرهای ساده را ایجاد کرده و بر مبنای داده های قدیمی بازار و با استفاده از ترمینال متاتریدر 5 نرم افزار خود را آزمایش کنید. زمانی که دانش کافی در مورد برنامه نویسی MQL5 به دست آورید، به راحتی می توانید به سراغ توسعه ماژول های سفارشی مخصوص اکسپرت ادوایزر از طریق MQL5 Wizard بروید.
مدل رویداد
یک برنامه MQL زمانی اجرا می شود که رویدادی اتفاق افتد. رویدادها توصیف کننده دانلود و راه اندازی یک برنامه MQL، ورود تیک جدید (تغییر قیمت یک نماد)، تغییر ویژگی های نمودار، تغییر یک نماد یا یک قاب زمانی در یک نمودار هستند که یکسری دستورات را در وضعیت در حال انتظار اجرا می کنند. مدل رویداد اجازه می دهد به ساده ترین شکل برنامه های تعاملی را ایجاد کنید. قابلیت های منحصر به فرد برای نوشتن پنل های گرافیکی سفارشی و ساخت رابط کاربری ایده آل وجود دارد تا برنامه ای مطابق با نیازهای کاربری طراحی کنید. توابع از پیش ساخته شده برای کار با اشیا گرافیکی اجازه می دهند یک برنامه کاربردی کامل را طراحی کنید.
MQL به توسعه دهندگان اجازه می دهد برای ساخت سامانه های پیچیده تعاملی رویدادهای سفارشی را با استفاده از تابع EventCharCustom طراحی کنند. به طور مثال، تابع OnChartEvent برای پاسخ گویی به رویدادهایی که اجرا می شوند استفاده می شود.
اشکال زدایی و راهنمای کاربری
ترمینال متاتریدر 5 و MetaEditor5 دسترسی به مستندات کاربردی را فراهم می کنند که با فشار کلید F1 در دسترس کاربر قرار می گیرند. لازم به توضیح است که ترمینال متاتریدر 5 و MetaEditor5 کاملا با یکدیگر یکپارچه شده اند. همچنین، توسعه دهندگان می توانند با فشار کليد F4 به برنامه دیگری سوییچ کنند. قابليت فوق به ويژه زمانی مناسب است که در حال ویرایش کدها هستید و به شکل همزمان با چند ترمینال کار می کنید. برای اشکال زدایی برنامه های نوشته شده به این زبان کافی است در ترمینال و از طریق ویرایشگر کلید F5 را فشار دهید. در این حالت نمودار به شکل خودکار باز شده و برنامه روی آن اجرا می شود. دقت کنید برنامه ممکن است یک اسکریپت، اندیکاتور یا اکسپرت ادوایزر باشد. در زمان اشکال زدایی اسکریپت ها به این نکته دقت کنید که آنها پس از خاتمه عملیات تابع OnStart() خودشان را بارگذاری می کنند.
در این حالت اشکال زدایی به شکل خودکار در آن مرحله تکمیل شده و نمودار اشکال زدایی بدون ذخیره کردن اشیا گرافیکی که توسط اسکریپت ساخته شده بسته می شود. به همین دلیل لازم است یک نقطه توقف با مقدار زیاد را قبل از عملگر return در انتهای یک اسکریپت قرار دهید. حالت اشکال زدایی به توسعه دهندگان در تشخیص خطاها در برنامه و آشنایی با نحوه کار دستورات و متغیرها کمک فراوانی می کند. در کنار نقطه توقف، تابعی به نام DebugBreak وجود دارد که تنها در زمان اجرای برنامه در وضعیت اشکال زدایی اجرا می شود. موتور جستجوی قدرتمند و یکپارچه ای که متصل به متاتریدر 5 است، اجازه کنکاش در انواع مختلفی از اطلاعات موجود در یک فایل منبع یا پوشه و حتی سایت MQL5.community را ارائه می کند. فیلترهای موجود در این بخش اجازه می دهند نتایج را به شکل هدفمند و دقیق مشاهده کنید.
يک محيط توسعه کارآمد
يک محيط توسعه کارآمد و يکپارچه به توسعه دهندگان اجازه مي دهد به ساده ترين شکل کدنویسی و اشکال زدایی کنند. توسعه دهندگان به غیر از اشکال زدایی به قابلیت دیگری بنام پروفایل کد نیاز دارند. پروفایل ها، ویژگی های یک برنامه کاربردی همچون زمان اجرا و مولفه های منحصر به فرد زمان اجرا را در یک فرم مناسب جمع آوری می کنند. پروفایل فوق به توسعه دهندگان اجازه می دهد بخش های پر مصرف یک برنامه را شناسایی کنند. توجه داشته باشید زمانی که یک برنامه بررسی قیمت ها را طراحی می کنید این برنامه به سرعت پهنای باند و ترافیک را مصرف می کند. برای حل این مشکل راهکاری وجود دارد که افزایش زمان نوسازی داده هایی که روی نمودار ظاهر می شوند یکی از آنها است، البته در این حالت ممکن است نوسانات لحظه ای قیمت ها را از دست بدهید.
ذخيره سازی و مدیریت کارها به شکل یکنواخت
یکی دیگر از قابلیت های جالب توجه MQL5 مکان ذخيره سازی کدهای منبع MQL5 است. قابلیت فوق اجازه می دهد در هر مکانی به شکل مستقیم به فایل های خود دسترسی داشته باشید. توسعه دهندگان می توانند برنامه های MQL5، سورس کدهای C++ و فایل های منبع BMP و WAV را ذخیره سازی کنند. قابلیت فوق را باید به عنوان یک مخزن با قابلیت های گیت هاب توصیف کرد که اجازه می دهد کدهای خود را اضافه و استخراج کرده و در صورت لزوم تغییرات را بازگردانید. علاوه بر کار با مخزن ذخیره سازی MQL این امکان وجود دارد تا به شکل مستقیم توسط متاتریدر 5 با هر سرویس دهنده خارجی که از Subversion 1.7 پشتیبانی می کند شبیه به Tortoise SVN کار کرد.
اندیکاتورها، نمودارها و اشیا گرافیکی
MetaTrader 5 بر مبنای تجربیات قبلی شرکت MetaQuotes Software طراحی شده تا در زمان انجام عملیاتی شبیه به محاسبه اندیکاتور از مدل بهینه تری استفاده شود. بطور مثال، در زمان بکارگیری مدل جدید، زمانی که چند نمودار باز می شوند که از اکسپرت ادوایزرها، اسکریپت ها و اندیکاتورهای مختلفی استفاده می کنند و تمامی آن ها به نتایج یک اندیکاتور خاص روی یک نماد و تایم زمانی مشخص نیاز دارند فرآیند محاسبه نتیجه اندیکاتور تنها یک مرتبه انجام می شود. راهکار فوق به میزان قابل توجهی در وقت و زمان صرفه جویی می کند، زیرا نیاز به انجام محاسبات تکراری را کم می کند.
این امکان نیز وجود دارد تا مقادیر یک اندیکاتور را با استفاده از مقادیر اندیکاتور دیگری یا مقادیر آرایه ها محاسبه کرد. راهکار فوق اجازه می دهد تا محاسبات اندیکاتور پیچیده را به شکل یکپارچه و ساده بدست آورده و به روش های گرافیکی مختلفی مقادیر اندیکاتورها را نشان دهیم. لازم به توضیح است که تمامی عملیات مربوط به ویژگی های نمودار و مدیریت اشیا گرافیکی به شکل غیر همزمان انجام می شود. اگر به دنبال دسترسی سریع به نتایج اجرای توابعی شبیه به Object functions یا Chart operations هستید کافی است تابع ChartRedraw() را برای نوسازی ترسی نمودارها فراخوانی کنید.
عملیات تجاری
فرآیندهای تجاری در زبان MQL5 با ارسال درخواست و فراخوانی تابع OrderSend انجام می شود. درخواست به یک ساختار ویژه MqlTradeRequest اشاره دارد که با مقادیر مرتبط با یک فعالیت معاملاتی پر می شود. بطور مثال، شما می توانید خرید یا فروشی انجام دهید و دستورات خرید یا فروش را تحت شرایط خاصی قرار داده یا یک دستور در حال انتظار را حذف کنید. اگر OrderSend با موفقیت اجرا شود، نتیجه اجرای درخواست معامله در ساختار MqlTradeResult ثبت می شود.
کلام آخر
در این مقاله سعی کردیم به شکلی کوتاه به مباحث اصلی و کلیدی زبان برنامه نویسی MQL و قابلیت های آن اشاره داشته باشیم. بدیهی است امکان بررسی تمامی قابلیت ها در این یک مقاله وجود ندارد. به طور مثال به مباحثی همچون کار با DLLها، دانلود برنامه ها از سایت Code Base، راه اندازی با یک مرتبه کلیک در ترمینال و.... اشاره نکردیم. نکته ای که لازم است در انتهای این مطلب به آن اشاره داشته باشیم، اصطلاحات و کلیدواژه های تخصصی دنیای بورس است.
آموزشگاه کامپيوتر پايا