در این آموزش ساخت ربات معامله گر روی همان اکسپرت فصل گذشته تمرکز میکنیم؛ اما این بار با اصول حرفهای برنامه نویسی شی گرا به ساخت اکسپرت میپردازیم. ساخت کلاس CTrade را در متاتریدر 5 میآموزیم. کلاس CTrade جایی است که ما تابع های پرکاربرد ساخت اکسپرت ها را تعریف میکنیم تا در فصلهای بعد آموزش mql5 بتوانیم بارها استفاده کنیم.
بنابراین آنچه در این فصل کدنویسی میکنیم، سنگ بنای تمام فصلهای آینده و بستههای بعدی است. این فصل در واقع بخشی از بسته مقدماتی آموزش MQL5 در مسیر آموزشی زیر است.
- آموزش MQL5 برای ساخت اکسپرت معامله (بسته مقدماتی)
- آموزش mql5 برای ساخت اکسپرت معامله گر (بسته پیشرفته)
- بسته تکمیلی آموزش MQL5 برای ساخت اکسپرت معامله
*توجه: اگر بسته شماره ۱ را در بالا تهیه کردهاید دیگر نیازی به تهیه این آموزش MQL5 نیست؛ زیرا در همان بسته قرار داده شده است. بسته ۱ را کامل ببینید و تمرین کنید و بعد سراغ بسته شماره ۲ و بعد ۳ بروید!
این آموزش در یک نگاه
در یک نگاه ما در این آموزش به ساخت ربات بورس یا دقیق تر بگوییم Expert Advisor میپردازیم. در جریان ساخت این ربات معامله گر ما اصول شی گرایی را با ساخت کلاس CTrade در MQL5 به خدمت میگیریم.
این فصل شامل ۱۸ درس است که ما آن را به دو بخش ۹ درسی تقسیم کردهایم. برای آگاهی از ریز مطالب لازم است که بخش سرفصلها را در انتهای توضیحات بخوانید. با این حال در اینجا سعی میکنیم یک منظره کلی از دوره برای شما ترسیم کنیم.
بخش اول در ۹ درس به ایجاد کلاس CTrade اختصاص دارد. تابعی برای مدیریت پاسخهای سرور تعریف میکنیم. سعی میکنیم پاسخ سرور را به زبان مفهومتری برای استفاده کننده اکسپرت گزارش کنیم. سپس به تعریف تابعهای ایجاد سفارش خرید و فروش میپردازیم. سرانجام اکسپرت فصل اول را با اتکا به کلاس CTrade بازنویسی میکنیم.
بخش دوم نیز شامل ۹ درس است. کار روی کلاس CTrade را ادامه میدهیم. تابعهایی برای محاسبه حد ضرر (Stop Loss) و حد سود (Take Profit) تعریف میکنیم. با تابعهای MQL5 برای دریافت مشخصات سفارش جاری آشنا میشویم و از آنها در دل تابعهای خودمان بهره میبریم. تابعی نیز برای اصلاح حد ضرر و حد سود در حین اجرای اکسپرت تعریف میکنیم. سرانجام در این بخش به تعریف تابع Close میپردازیم و از آن برای بستن سفارشها استفاده میکنیم.
سعی شده تا زمان این آموزش ساخت اکسپرت با سناریونویسی تا حد ممکن بهینه و کوتاه شود تا بتوانید روی درک مفاهیم تمرکز کنید. هر درس را چندین و چند مرتبه از نو ضبط میکردیم تا به یک ضبط بهینه برسیم.
چرا ساخت کلاس CTrade ؟
شما در این فصل بیشتر با کدهای خشک و بدون اجرا سروکار دارید؛ مانند فصل قبل نیست که مدام اکسپرت اجرا کنید و نتیجه را ببینید. چارهای نیست. صبور باشید و خسته نشوید. این فصل باید باشد. باید آن را با دقت ببینید و تمرین کنید. اگر میخواهید یک برنامه نویس حرفهای معاملات الگوریتمی شوید، باید یک نگاه برنامه نویسانه پیدا کنید. باید شی گرایی را درک کنید. این فصل به شما در چنین درکی کمک میکند.
شما با ساخت ربات با اتکا به کلاس CTrade در واقع یک گام محکم به دنیای برنامهنویسی شی گرا به انگلیسی Object Oriented Programming و به اختصار OOP برمیدارید.
چرا برنامه نویسی شی گرا ؟
یکی از اصول برنامه نویسی این است که «خودتان را تکرار نکنید!». اگر همه کدهای اکسپرت را در یک فایل بنویسید، برای هر اکسپرت باید همه چیز را از نو بنویسید.
بسیاری دستورات در ساخت اکسپرت های گوناگون مشترک است. ما چنین دستورهایی را در قالب چندین تابع مستقل در یک کلاس مستقل به نام CTrade بسته بندی میکنیم. بعد از آن هر بار که بخواهیم اکسپرتی بسازیم میتوانیم از این تابعها استفاده کنیم. مثلا برای باز کردن یک سفارش میتوان یک تابع OpenPosition حاوی دستورات لازم در کلاس CTrade ساخت. بعد از آن در همه اکسپرتها برای باز کردن سفارش کافی است که این تابع را از کلاس CTrade صدا بزنیم.
این گام نخست در مسیر برنامه نویسی شی گرا است. با استفاده از شی گرایی شما میتوانید برنامه ای بسازید حاوی کلاسها و تابعهای مستقل که دست به دست هم یک کار را انجام میدهند. هر بار هم که بخواهید برنامه را به روز کنید خیلی ساده به سراغ تابع مربوطه میروید. در یک شی گرایی خوب باید بتوان هر تابع را به صورت مستقل از تابع های دیگر تغییر داد.
به این تریبت نگهداری یک برنامه بزرگ به کاری ممکن تبدیل میشود. حتی میتوان با چنین نگاهی یک معماری هم برای اتصال بخشهای مختلف برنامه (مثل رابط کاربری، دیتابیس، کدهای مدل و …) ایجاد کرد. با داشتن معماری میتوان یک برنامه را به چندین بخش تقسیم کرد و کار ساخت ربات بورس و نگهداری هر بخش را به یک نفر در گروه سپرد.
پس این آموزش در واقع شما را از دنیای یک کدنویس ساده، وارد دنیای یک برنامه ساز میکند. تنها با رعایت این گونه اصول است که شما میتوانید پروژههای مختلف را به درستی پیاده سازی کنید. یک برنامه نویس خوب با رعایت اصول برنامه سازی حرفه ای میتواند در پروژه های بزرگ مشارکت کند.
نکته مهم برای یادگیری بهتر
سورس کدها گام به گام که پیش میرویم به هر درس پیوست شده است. اما شما از آنها فقط برای مقایسه با کد خودتان بهره ببرید. بدترین کار این است که به سورس کدهای آماده اتکا کنید و این فصل را فقط تماشا کنید (بدون تمرین). بهترین کار این است که همراه با مدرس در هر درس فیلم را ببینید و کدها را یک مرتبه همراه مدرس و یک مرتبه از حفظ بنویسید تا دستتان عادت کند. اگر حوصله این کار را ندارید باید از خودتان بپرسید که آیا من واقعا به برنامه نویسی علاقه دارم؟
این آموزش بینظیر است زیرا:
- برنامه نویسی بازارهای مالی یک زمینه شغلی جدی و پربازده برای برنامه نویسان است.
- منبع ما کتاب محبوب Expert Advisor Programming (+) به علاوه تجربه یک کدنویس حرفهای بازارهای مالی (+) است.
- شما به برنامه نویسی OOP یک دید عملی پیدا میکنید که نه تنها در زبان MQL5 بلکه در زبانهای دیگر نیز کاربرد دارد.
- درسها دارای سناریوی بهینه و فشرده هستند. محتوای این آموزش معادل ۷ ساعت آموزش مرسوم در همرویش است.
پیشنیاز
- آموزش MQL5 برای ساخت ربات معامله ــ فصل ۰
- آموزش mql5 برای ساخت اکسپرت معامله گر با MQL5 ــ فصل ۱
- آشنایی با مفاهیم و اصول معامله در بازار بورس
کلیدواژگان
آموزش ساخت ربات معامله – آموزش mql5 – ساخت کلاس CTrade در MQL5 – برنامه نویسی شی گرا در MQL5 – ساخت ربات معامله گر بورس – آموزش اکسپرت نویسی – ساخت اکسپرت معامله گر – ربات معاملاتی – ربات بورس – ربات متاتریدر – اکسپرت نویسی با MQL5 – اکسپرت بورس – اکسپرت مووینگ اوریج – ساخت ربات معامله گر با MQL5 – اکسپرت نویسی در متاتریدر 5
میثم –
اگر امکان داره یه ایمیل بدین که این کد را برای من چک کنین ممنون میشم.
میثم –
درود استاد گرامی
کدی را ;i بخوایم تو قیمت های 5 تایی برامون ارسال کنه باید داخل کدامیک از تابع هایی مانند ontick یا ontimer و …. نوشته بشه ر عملکردش در ontimer بهتر از ontick هست ولی کامل نیست
معصومه کرمی –
سلام منظورتون از قیمت های 5 تایی متوجه نشدم.
م –
میشه برای تمام نمادها عین سایت tsetmc فیلتر نویسی کرد ؟ برای این مورد هم آموزش دارین ؟ اگه بشه که خیلی خوب میشه
معصومه کرمی –
سلام با زبان Mql5 در محیط متاتریدر میتونید ربات و اکسپرت بسازید
ربات ها در بازارهایی که ممنوعیت معاملات الگوریتمی ندارند میتوانند جای شما در بازار با استراتژی که طراحی میکنید معامله کنند اما در بازارهایی که ممنوعیت معاملات الگوریتمی دارن مثل بورس ایران شما میتونید برای هر استراتژی که دارید یک اکسپرت طراحی کنید و اون اکسپرت رو روی یک نماد در بازه دلخواهتون تست کنید.
اما اینکه با زبان MQL5 بتونید مثل سایت tsetmc فیلترنویسی کنید و کدتون رو روی تمام نمادها اجرا کنید تا جایی که بنده اطلاع دارم همچین امکانی وجود نداره
جعفری (خریدار محصول) –
سلام وقت بخیر. من داخل یک اکسپرت آزمایشی یه order buy با استفاده از تابع OrderSend انجام میدم با یک لات بعد با استفاده از تابع عمومیClose موجود در کلاس Trade روی اون نمادی که میخوام ببندم با یک لات و با 2 لات هم امتحان کردم اون نماد بسته نمیشه فقط یه Position خلاف حهتش باز میشه و هر دو position در حال نوسان هستند از طریق دستی هم که روی یک نماد Buy و Sell میکنم بازم همینطوره. پس اینکه میگن روی یک نماد در mq5 نمیشه هم Position buy و هم position sell داشت یعنی چی؟ لطفا راه نمایی بفرمایید.
معصومه کرمی –
سلام شما برای بستن سفارش ها باید یک سفارش در جهت مخالف ارسال کنید حجم سفارش باید برابر با حجم سفارشی باشه که میخواین ببندین.
ما در متاتریدر در هر لحظه فقط یک Position داریم تو این مثالی که شما زدین اگه یک لات خرید کردین و بعد سفارش فروش یک لات رو ثبت کردن باید در حال حاضر Position نداشته باشید و سفارش خریدتون بسته شده باشه و در مثال دوم یک position sell در حجم یک لات روی نمادتون داشته باشید . لطفا زبانه History و Operation و Journal را در پنجره استراتژی تستر بررسی کنید اگه از کلاس CTrade که در فصل دوم آموزش ساخت اکسپرت تعریف کردیم برای ارسال سفارش از استفاده کنید دقیق نتیجه ی ارسال سفارشتون رو داخل زبانه Journal میتونید ملاحظه کنید و عملکرد اکسپرتتون رو بررسی کنید.
رضا جعفری (خریدار محصول) –
سلام وقت بخیر کلاس CTrad را که در درس دوم این فصل گذاشتید پس کامپایل خطا میده کدهایی را که در فایل Ctrad.mqh نوشتید با توجه به این که از این کلاس می خواهیم به دفعات استفاده کنیم آیا مشکی پیش نمیاد؟
معصومه کرمی –
سلام وقت شما هم بخیر. دقت کنید که کدها در این مرحله (درس دوم) هنوز آماده اجرا نیست.
با آموزش پیش برید در لحظه مناسب در درس های بعد اجرا می کنم. شما هم در همون درس باید اجرا کنید.
رضا –
با سلام و احترام ضمن سپاس از شما به نظر من بهتر بود آموزش را بر اساس فارکس انجام می دادید که مسایل بازار دو طرفه هم در آن دخیل باشه.
معصومه کرمی –
با سلام و سپاس از پیشنهاد شما با توجه به نیاز برنامه نویسان داخلی و دشواری درک بازار دوطرفه نسبت به بازار بورس ایران ما با بورس ایران شروع کردم و انشالله در دوره های تکمیلی به بازارهای جهانی خواهیم پرداخت.
هم رویش را در شبکه های اجتماعی دنبال کنید تا از انتشار دوره های بعد مطلع شوید.
معصومه کرمی –
آموزش پایین در رابطه با فارکس منتشر شده تا با صرف زمان و بهای اندک بتونید دانسته های من را داشته باشید.
آموزش ساخت اکسپرت فارکس با زبان MQL5
مصطفی احمدزاده (خریدار محصول) –
خیلی ممنون .شرمنده که سوالات و ابهاماتم زیاده . اگه بعلت مشکلات اینترنت یا سیستم خودمون اکسپرتمون با تاخیر اجرا بشه bid , askو سایر اطلاعاتی که از سرور میگیره یا قرار رو اون بارگذاری بشه مال زمان تاخیره ؟متاسفانه تو بازار ایران مثل قیمت گذاشتیم دیدیم صف خرید یا فروش شده اومدیم کنسل کنیم سیستم یا کارگزاری یا هسته معاملات هنگ کرده درخواست جدید ما متاسفانه وارد دیتابیس نشده و معامله یا همون سفارش قبلی جوش خورده.برای مدیریت اینجور مسائل ام کیو ال امکانات داره یا باید رو بیاریم به سی پلاس پلاس .متشکرم
مصطفی احمدزاده (خریدار محصول) –
والله بورس ایران دستوری ورانتیه تا جایی که حتی رو نرم افزارهای کنترلی ونظارتی و هسته معاملات دست ببرن برای همین بعید که بذارن معاملات الگوریتمی که در اون تحلیلهای تکنیکال ،دوری از هیجانات ،رعایت حد زیان وسود ، مدیریت خطاهای سرور و اینترنت و …..میشه لحاظ کرد رو پا بگیره ……
برای تحلیل و پیش بینی و هوش منصوعی باید از اسکریپتهای پایتون استفاده کرد یا خود ام کیو ال کتابخانه های و کلاسهای لازم رو داره ؟تو داکیومنتیشنش بخش هوشمند سازی صرفا رو پایتونه که تمام توابع و متدهای مربوط به کلاس CTrade رو داره منتهی اصرار من بیشتر بر mql5 بخاطر سرعت و مدیریت حافظه. برای هوشمند سازی هم برنامه ای دارین ؟
معصومه کرمی –
سلام در مورد امکان معامله الگوریتمی زمزمه هایی هست اما فرض کنیم که بزودی آزاد نکنن؛ در این صورت باز هم اکسپرت ها و اندیکاتورها کمک موثری در تحلیل و تصمیم دارن.
در مورد هوش مصنوعی در mql ، بله بهترین راه استفاده از اسکریپت های پایتونیه. با توجه به وجود آموزش پایتون در هم رویش انشالله بعد از مباحث تکمیلی اکسپرت نویسی به یادگیری ماشین و هوش مصنوعی در بورس هم خواهیم پرداخت.
Sa_Ka –
سلام
این فصل چند ساعت آموزش هستش؟ این فصل تکمیل شده یا در حال تکمیله؟
معصومه کرمی –
سلام. توصیه می کنم فیلم و توضیحات آموزش را با دقت بررسی کنید.
هر فصل از مجموعه ساخت ربات بورس به صورت مستقل کامل و بعد منتشر شده. این فصل دوم هست. در فصل اول یک اکسپرت ساختیم و اجرا کردیم. در این فصل همان اکشپرت قبلی بازنویسی شد ولی با رعایت اصول شی گرایی.
مصطفی احمدزاده (خریدار محصول) –
با سلام . برا کسی که اندکی اشنایی داره خیلی خوبه . جمع جور بدون مطالب اضافی و خسته کننده در اندک زمان مفید. شیوه اموزشی خیلی خوب و روانشناسی شده است . اینکه رو مفیدتریدر کارکردین خیلی خوبه برای اینده احتمالی و لیکن کاش رو خود فارکس کار میکردین که بیشتر مناسبت داشت .
معصومه کرمی –
سلام.
ممنون از لطف و نظر دلگرم کننده شما. انشالله در دوره های تکمیلی سراغ فارکس خواهیم رفت.
دقت کنید که اکسپرت در بازار بورس ایران برای اتخاذ استراتژی معامله همچنان مفید هست. هر چند اگر ممنوعیت معامله الگوریتمی برداشته شود این سودمندی بیشتر هم خواهد شد.
معصومه کرمی –
پیرو درخواست شما و دوستان دیگه آموزش پایین در رابطه با فارکس منتشر شده تا با صرف زمان و بهای اندک بتونید دانسته های من را داشته باشید.
آموزش ساخت اکسپرت فارکس با زبان MQL5