بورس به بازاری سازمان یافته اشاره دارد که قیمتگذاریها، خرید و فروش کالاها، سهام، قراردادهای آتی و اوراق بهادار در آن انجام میشود. در حالی که بورس به انواع مختلفی همچون بورس کالا، بورس ارز و بورس اوراق بهادار طبقهبندی میشود، اما در نهایت به یک اصل مهم یعنی سودآوری بردبرد برای طرفین اشاره دارد. به عبارت دقیقتر، شرکتهای عرضه کننده سهام و افرادی که سهام را خریداری میکنند بازیگران اصلی این بازار هستند که به دنبال منفعت مالی هستند. البته گروه سومی که به آنها کارگزاران میگوییم در بین این دو گروه قرار میگیرند و فارغ از افتوخیزهای بازار سهام، سود خود را دریافت میکنند. چند وقتی است تبو تاب بورس حسابی در جامعه رواج پیدا کرده و اگر به شبکههای اجتماعی سری بزنید مشاهده میکنید که افراد مختلف درباره مشارکت در بورس، خرید سهام، حباب قیمتها، رکوردشکنی ارزش سهام و مواردی از این دست صحبت میکنند. در حالی که حضور در بورس حرکتی خردمندانه است و مزایای خوبی دارد و در مقیاس کلی به رشد اقتصادی شرکتها و کشورها کمک میکند، اما واقعیت این است که تنها تعداد معدودی از افراد و شرکتها حضور موفقی در بورس دارند. در تمامی کشورها افراد و حتا موسسات مالی همچون بانکها در بورسهای بینالمللی حضور پر رنگی دارند و بر مبنای انتخابی هوشمندانه سودهای کلانی را بهدست میآورند، اما این موسسات و افراد حقیقی به دانشی فراتر از تماشای پنل قیمتها و دنبال کردن اخبار اشراف دارند. دانشی که گروه خاصی از متخصصان در اختیار شرکتها قرار میدهند. این متخصصان برنامهنویسانی هستند که تخصصی خاص به دست آورده و برای بورس برنامهنویسی میکنند. به عبارت دقیقتر، اگر برنامهنویسی بتواند سختیها را تحمل کرده و برنامهای منحصر به فرد طراحی کند، برنامه او ممکن است ارزش میلیارد تومانی پیدا کند، اما برای ساخت چنین برنامهای به چه ابزاری نیاز است؟
یکی از اصول مهم در تحلیل سهام بورس، در تحلیل نوسان قیمتها خلاصه میشود. عوامل مختلفی همچون اقتصادی، سیاسی و حتا روانشناختی بر قیمت سهام اثرگذار هستند که این اثرگذاری به سرعت باعث تغییر و نوسان در قیمتها میشود. قیمتها همواره بر مبنای یک محرک خارجی دستخوش تغییر میشوند که لزوم بررسی دقیق نوسان قیمتها و تحلیلها آنها را پدیدار میکنند. پیشبینی قیمت سهام فرآیند چندان سادهای نیست، زیرا باید جهشهای ناگهانی و ناپایداری قیمتها را تشخیص داده و فیلتر کرد. برای این منظور متخصصان با استناد به دادههایی که از گذشته در اختیار دارند و با استفاده از اندیکتورها اقدام به پیشبینی تحولات آینده میکنند. با توجه به اینکه امکان بررسی روزانه سهام و نمادهای متعلق به شرکتها برای افراد و حتا سازمانها امکانپذیر نیست، در نتیجه نرمافزارهایی برای انجام اینکار ابداع شدند و شکل جدیدی از معاملات را ایجاد کردند که به نام معاملات الگوریتمی شناخته میشوند. معاملات الگوریتمی به نوع خاصی از مبادلات بازار اشاره دارند که تنها بر مبنای سفارشهای تولید شده توسط یک روبات و بر مبنای یک برنامه راهبردی از پیش تعریف شده انجام میشوند. در روش فوق سهام به شکل کامل بررسی شده و به کاربر گزارشی ارائه میشود. به بیان سادهتر، در روش فوق اطلاعات گذشته سهام شبیهسازی شده و فرآیند آزمایش الگوریتم بر مبنای این دادهها انجام میشود. اگر عملکرد الگوریتم دقیق باشد قادر است درصد سود و خطا و همچنین زیان حاصله از برنامههای راهبردی قبلی را نشان دهد. به تدریج الگوریتم با دادههای بهروزتری تغذیه میشود تا میزان دقت آن پدیدار شود. زمانی که شرایط در وضعیت مطلوب قرار گرفت به شکل آزمایشی از آن استفاده میشود و معاملات بسیار محدودی بر مبنای آن انجام میشود تا کیفیت کار بررسی شود. در نهایت اگر همه چیز در شرایط ایدهآل قرار گرفت، نرمافزار به شکل رسمی از سوی موسسات بزرگ مالی برای پیشبینی نوسانات استفاده میشود. بهطور مثال، در برخی موارد برنامه هوشمند به کارفرمایان اعلام میدارند بهتر است روی چه بازاری سرمایهگذاری بلندمدت داشته باشند. در نمونههای جدیتری، نرمافزارها به مالکان پیشنهاد میدهند سهامی را برای مدت زمانی بسیار کوتاه خریداری کنند و در چه ساعت، دقیقه و حتا ثانیهای آنرا به فروش برسانند تا به سودآوری برسند. بهطور مثال، شخصی ممکن است در یک بازه تنها 8 دقیقهای و بر مبنای یک خرید کاملا محدود سودی معادل 20 هزار تومان بهدست آورد. با این توصیف چه زبانی برای ساخت یک چنین ابزارهای تحلیلگیری مفید است؟ MQL ابزار مناسب برای انجام اینکار است.
MQL چیست؟
MQL سرنام MetaQuotes Language زبان برنامهنویسی استراتژیهای معاملاتی است. برنامهنویسان مجرب و تازهکار میتوانند با مراجعه به راهنماییها و مستندات ارائه شده بدون مشکل خاصی یادگیری این زبان را آغاز کنند. البته افرادی که تازه با مباحثی همچون MetaTrade آشنا شدهاند، ممکن است در ابتدای راه با سختیهایی روبرو شوند، اما اگر تمایل دارید حوزه جدیدی در دنیای برنامهنویسی را تجربه کنید که ضمن آموزش مفاهیم جدید، سودآور بوده و موقعیتهای شغلی جدیدی پیش روی شما قرار دهد بهتر است از MQL5 غافل نشوید. MQL به توسعهدهندگان اجازه میدهد روباتهای معاملاتی یا سامانههای تحلیلگر اطلاعات را برای بازارهای مالی ایجاد کنند. نرمافزارهایی که ممکن است توسط توسعهدهنده استفاده شده یا به موسسات مالی فروخته شود.. افرادی که موفق شوند برنامههایی دقیق برای پیشبینی بازارهای مالی طراحی کنند، به راحتی قادر به فروش نرمافزار خود هستند. در این مقاله قصد داریم به معرفی یکسری نکات کاربردی در ارتباط با این زبان برنامهنویسی بپردازیم تا به درستی در این مسیر گام بردارید.
قابلیتها و ویژگیهای MQL
جدیدترین نسخه منتشر شده از این زبان برنامهنویسی MQL5 است. زبان برنامهنویسی فوق توسط شرکت MetaQuotes Software Corp ساخته شده است. شرکتی که سابقه طولانی و درخشان در ساخت زیرساختهای معاملاتی آنلاین دارد. از مهمترین ویژگیهای زبان MQL نگارش 5 به موارد زیر میتوان اشاره کرد:
- ترکیب نحوی این زبان شباهت زیادی به سیپلاسپلاس دارد و در نتیجه برنامههای نوشته شده به این زبان به راحتی با زبانهای برنامهنویسی دیگر تطبیق داده میشوند.
- سرعت اجرای عملیات و دستورالعملها در MQL5 یکسان با برنامههای سیپلاس پلاس است.
- برنامهنویسان میتوانند قابلیتهای از پیش ساخته شده این زبان را برای ساخت اندیکاتورهای فنی، اشیا گرافیکی و رابطهای کاربری استفاده کنند.
- زبان برنامهنویسی فوق از OPENCL به شکل پیشفرض استفاده میکند.
- یک کتابخانه استاندارد بزرگ همراه با مثالهای کاربردی متعدد از برنامهنویسان پشتیبانی میکند تا یادگیری مفاهیم با سهولت انجام شده و برنامهنویس زمان کمتری را صرف کدنویسی کند.
- در اغلب موارد برنامهنویسان میتوانند بدون نیاز به نوشتن کدهای خاصی فرمولهای ریاضی را برای دهها یا حتا هزاران موضوع منحصر به فرد به کار گرفته و موازیسازی وظایف را به شیوه بهینهای انجام دهند.
نکاتی کاربردی ویژه افراد تازهکار
برنامهنویسان تازهکار میتوانند مفاهیم اولیه این زبان را صرف چند ماه یاد بگیرند و با صرف یک سال زمان با تمامی ویژگیهای کاربردی این زبان آشنا شوند. روند یادگیری برای برنامهنویسان آشنا به زبان سیپلاسپلاس کوتاهتر است. افرادی که تجربه بهکارگیری نسخه 4 این زبان را دارند، ممکن است به کمی زمان نیاز داشته باشند تا روش جدید ساخت اندیکاتورها را باید بگیرند. همچنین، برخی از توابع کنترل وقایع (event handling functions) ممکن است باعث سردرگمی برنامهنویسانی شوند که از نسخه 4 این زبان استفاده کردهاند. با اینحال، مزایای نسخه جدید شما را متقاعد خواهد کرد که باید به نگارش 5 این زبان مهاجرت کنید. در نگارش پنج قابلیتهای فراوانی برای کار با نمودارها و اشیا گرافیکی و رسم تصاویر روی صفحه مجازی وجود دارد. اگر برنامهنویس مسلط به زبانهای برنامهنویسی مدرن هستید، در زمان یادگیری MQL5 باید روی یادگیری توابع مورد استفاده در عملیات روی نمودار (Chart Operations)، توابع معاملاتی (Trade Functions)، دریافت اطلاعات بازار (Getting Market Information)، اندیکاتورهای سفارشی (Custom Indicators)، توابع ابزارهای ترسیمی (Object Functions) و موارد مشابه که در معاملات الگوریتمی کاربرد دارند متمرکز شوید.
آموزش برنامهنویسی به زبان MQL
اکنون قصد داریم به شکلی کوتاه نحوه نصب و بهکارگیری این زبان را نشان دهیم. در اولین گام باید نصب کننده MetaTrader 5 terminal web را از سایت رسمی دانلود کرده و نصب کنید. نصب متاتریدر 5 پیچیدگی خاصی ندارد و تمامی کارها با چند کلیک ساده انجام میشود. بهتر است نرمافزار را روی درایوی نصب کنید که سیستمعامل ویندوز روی آن نصب نیست، زیرا ویژگی UAC ویندوز ممکن است در زمان اجرا مشکلاتی به وجود آورد.
اندیکاتورها، اسکریپتها و اکسپرت ادوایزرها
MQL با سه نوع زیربنایی از برنامهها کار میکند که هر یک برای انجام کار خاصی مفید است. این برنامهها به شرح زیر هستند:
- اسکریپت: اسکریپت برنامهای است که تنها برای یکبار اجرا در یک نمودار قیمت طراحی میشود. زمانی که اجرا به پایان بخش از پیش تعریف شده در تابع OnStart() برسد، اسکریپت کامل شده و از حالت بارگذاری روی نمودار خارج میشود. تابع OnStart() تنها برای اسکریپتها طراحی شده و تنها مکان شروعی است که کدهای اجرایی درون آن قرار میگیرند. یک اسکریپت ممکن است حلقهای بی پایان با توقفهای کوتاه میان تکرارها باشد و بهطور مستمر روی یک نمودار اجرا شود تا زمانی که به شیوه دستی توسط کاربر متوقف شود. دقت کنید در هر زمان تنها یک اسکریپت روی یک نمودار اجرا میشود.
- اندیکاتور: برنامهای برای محاسبه آرایهای از مقادیر بر مبنای دادههای قیمت است. آرایههایی که برای ذخیرهسازی مقادیر اندیکاتور استفاده میشوند بافرهای اندیکاتور نام دارند. یک اندیکاتور میتواند به تعداد نامحدود بافر مجاز داشته باشد. همچنین، هر نمودار قادر است به شکل همزمان چند اندیکاتور داشته باشد که برخی از آنها چند نسخه از یک اندیکاتور هستند. توابعی که برای کار با خصایص اندیکاتور استفاده میشوند تنها از طریق اندیکاتورها در دسترس هستند و امکان بهکارگیری آنها از طریق اسکریپتها یا اکسپرت ادوایزرها فراهم نیست. اگر کنترلکننده OnCalculate() در برنامهای پیدا شود، برنامه به عنوان یک اندیکاتور شناخته میشود. دقت کنید اندیکاتورها نامحدود بوده و مادمی که از نمودار حذف نشوند در حال اجرا خواهند بود. فراخوانی تابع OnCalculate() از درون اندیکاتورها است.
- اکسپرت ادوایزر: گونه دیگری از برنامههای با طول عمر نامحدود بوده و امکان قرار دادن آن برای مدت زمان طولانی روی یک نمودار وجود دارد. اکسپرت ادوایزرها به ویژگی خاصی بهنام کنترلکننده رویداد OnTick() تجهیز شدهاند که نشان میدهند در حال کار با کد منبع یک اکسپرت ادوایزر هستید. دقت کنید در هر زمان تنها یک اکسپرت ادوایزر قابل اجرا روی یک نمودار است. هدف از بهکارگیری اکسپرت ادوایزر، خودکارسازی سامانههای معاملاتی است. کاربرد این برنامهها متنوع است و بهطور مثال، میتوانند توابع خدماتی باشند که یک رابط گرافیکی برای معاملات دستی ارائه کرده یا وضعیت فعلی بازار را تحلیل کرده و به شکل بصری نشان دهند.
شکل یک وضعیت گرافیکی این برنامهها را نشان میدهد.
همانگونه که مشاهده میکنید، با خودکارسازی ارزیابی قیمتها و ارزش سهام نوسانات قیمتها به شکل لحظهای خود را نشان میدهند. بهتر است برای یادگیری زبان MQL5 ابتدا به سراغ اسکریپتنویسی رفته و مثالهای مندرج در مستندات 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، سورسکدهای سیپلاسپلاس (cpp و h) و فایلهای منبع 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، راهاندازی با یک مرتبه کلیک در ترمینال و.... اشاره نکردیم. نکتهای که لازم است در انتهای این مطلب به آن اشاره داشته باشیم، اصطلاحات و کلیدواژههای تخصصی دنیای بورس است. کلیدواژههایی همچون نرخ تبدیل، نحوه محاسبه سود یا زیان، پیپ و پیپت، لات، ضریب اهرم، کارگزار، Deposit، آشنایی با انواع نمودارها و.... از جمله مباحثی هستند که باید اطلاعات کافی در مورد
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟