فیلم آموزشی برنامه نویسی ام کیو ال (MQL) با حسین احمدی
hl ;d,در این سری از ویدئو به آموزش زبان MQL-4 پرداخته می شود. این مجموعه رایگان در اختیار دوستانی که تمایل به یاد گیری این زبان را دارند قرار داده شده است ،لطفا توجه بفرمایید که بعضی از مباحث آموزش داده شده حتی به زبان انگلیسی هم موجود نمی باشد و حاصل تجربیات شخصی است.
نکات مهم در یادگیری برنامه نویسی ام کیو ال:
برای موفقیت در زبان برنامه نویسی ، تمامی مباحث اریه شده را با جدیت پیگیری کنید (مخصوصا دوره مقدماتی) بعد از هر درس کدها و مفاهیم آموزش داده شده را شخصا کد نویسی کنید. اگر شما هزاران ساعت ویدیو آموزشی را ببنید و هیچ کدی ننویسید هیچ وقت نمی توانید یک برنامه نویس موفق شوید،با دیدن ویدیو های بیشتر فقط ذهن شما بیشتر درگیر خواهد شد و حتی ممکن است لذت برنامه نویسی رو از دست بدهید.
توانایی های شما بعد از این دوره برنامه نویسی ام کیو ال
اندیکاتوری بنویسید که میانگین مورینگ اوریج 26 و کیجون سن 26 را با یک خط در چارت اصلی رسم نماید
● مقدار مورینگ اوریج و مقدار کیجون سون از ورودی قابل تغییر باشد
اکسپرتی با مشخصات زیر بنویسید:
● زمانی که استوکتسینگ بیشتر از 80 باشد و کندل به خط بالای اندیکاتور بولینگر باند برخورد کند یک پوزیشن سل گرفته شود
● زمانی که استوکتسینگ کمتر از 20 باشد و یک کندل به خط پایینی اندیکاتور بولینگر باند برخورد کند یک پوزیشن بای گرفته شود
● در صورتی که پوزیشن بای باز نباشد پوزیشن بای دیگری گرفته شود
● در صورتی که پوزیشن سلی باز نباشد ، پوزیشن سل دیگری گرفته شود
● مقدار استاپ لاس و تیک پرافیت از ورودی های قابل تنظیم باشد
اکسپرتی با مشخصات زیر بنویسید:
● زمانی که کندل های بالا سه خط انیدکاتور alligator باشند و فاصله خط Lips با قیمت کندل دو برابر فاصله دو خط Jaws و Teeth باشد یک پوزیشن بای گرفته شود
● زمانی که کندل های پایین سه خط انیدکاتور alligator باشند و فاصله خط Lips با قیمت کندل دو برابر فاصله دو خط Jaws و Teeth باشد یک پوزیشن سل گرفته شود
● اکسپرت داری ترلینگ استاب باشد
● در صورتی که پوزیشن بای باز نباشد پوزیشن بای دیگری گرفته شود
● در صورتی که پوزیشن سلی باز نباشد پوزیشن سل دیگری گرفته شود
اکسپرتی با مشخصات زیر بنویسید:
● اگر کندل روزانه امروز و کندل روزانه یک روز قبل هر دو سعودی باشند،همیچینین در چارت 15 دقیقه یک کندل سعودی از پایین مورینگ اوریج 32 را قطع نمایند یک پوزیشن بای گرفته شود
● اگر کندل روزانه امروز و کندل روزانه یک روز قبل هر دو نزولی باشند،همیچینین در چارت 15 دقیقه یک کندل نزولی از بالا مورینگ اوریج 32 را قطع نمایند یک پوزیشن سل گرفته شود
● در صورتی که پوزیشن بای باز نباشد پوزیشن بای دیگری گرفته شود
● در صورتی که پوزیشن سلی باز نباشد پوزیشن سل دیگری گرفته شود
● مقدار استاپ لاس و تیک پرافیت از ورودی های قابل تنظیم باشد
یک اکسپرت که از یک اندیکاتور خارجی سیگنال میگیرد را بنویسید
● اندیکاتور و شرایط پوزیشین گیری به انتخاب خودتان است
بعد از حل تمرینات بالا ، کد نویسی رو با سیستم خودتان یا پروژه های که به شما پیشنهاد می شود ادامه دهد ،در کنار آن ویدیو های دوره پیشرفته رو بیبیند. در دوره پیشرفته ما با نحوه بهتره نوشتن کد ها و بخشهای دیگری از زبان و توابع ام کیو ال آشنا خواهیم شد.
نکته: کسانی که مایل به آموزش زبان برنامه نویسی ام کیو ال 5 هستند لازم است ابتدا همین مجموعه زبان ام کیو ال 4 را مشاهده و تمامی مطالب آن را فرا بگیرند. امید هست با این سری از ویدیو های آموزشی ، قدمی بزرگی در راستای تکمیل منابع آموزشی زبان ام کیو ال به فارسی برداشته شود.
به امید موفقیت روز افزون ایرانیان در زبان برنامه نویسی ام کیو ال، حسین احمدی
ساخت اندیکاتور و اکسپرت بورس
ساخت اندیکاتور و اندیکاتور نویسی از مهارت های برنامه نویسی می باشد. اندیکاتور ها برای ترید و معماملات بورسی و بررسی روند و تحلیل تکنیکال شاخص ها و ارزها و نمادهای بورسی استفاده می شوند. زبان MQL مجبوب ترین زبان برنامه نویسی برای طراحی و ساخت اندیکاتور و اکسپرت های بورسی می باشد. دو نوع اصلی اندیکاتورها اندیکاتور ترکیبی یا منحصر به فرد هستند. اندیکاتور سازی یکی از نیازهای اصلی کسب و کارهای مبتنی بر بورس و شاخص های قابل معامله مانند کارگذاری های بورسی است. تریدرها با بررسی و تحلیل اندیکاتور ها تصمیمات کوتاه مدت و بلند مدت خود را برای معاملات می گیرند. اگر کسب و کار شما نیاز به طراحی و ساخت اندیکاتور دارد می توانید با ثبت سفارش در این صفحه اقدام کنید. فریلنسرهای برنامه نویس با تسلط به زبان برنامه نویسی MQL4 و سایر مهارت های برنامه نویسی و تجربه انجام پروژه های برنامه نویسی آمادگی انجام سفارش ساخت اندیکاتور را در اسرع وقت و با بهترین کیفیت دارند.
مبلغ پروژه را از طریق سایت کارلنسر و فقط بعد از تحویل نهایی و تایید خروجی پروژه آزاد کنید.سیستم پرداخت امن کارلنسر پشتیبان شما در صورت بروز مشکلات احتمالیست.
ساخت اندیکاتور و اکسپرت
در بازارهای مالی مانند بورس و فارکس، اطلاع یافتن از نحوه معاملات بازار و سهام های مبادله شده، بسیار ضروری است. اندیکاتورها، اکسپرت ها و ربات های معامله گر می تواند نقش مستقیمی بر روی میزان سوددهی شما از این بازارها داشته باشد. تحلیل تکنیکال و فاندامنتال، دو روش برای اطلاع از مسیر بازار در یک سهم یا ارز مشخص است. انواع اندیکاتور، به عنوان مسیری از تحلیل تکنیکال در این بازارها عمل کرده و با آموزش نوشتن اکسپرت برای mt4 محاسبات ریاضی خاص، سیگنال های خرید و فروش ارسال می کنند. ساخت اندیکاتور اختصاصی، می تواند گزینه مناسبی برای تحلیلگران تازه کار یا افراد نا آشنا به تحلیل های حرفه ای در بازارهای مالی باشد.
اهمیت ساخت اندیکاتور
اگر در بازارهای مالی به عنوان تریدر فعال باشید، حتما با نوسانات دوره ای این بازارها آشنایی دارید. گاهی یک سهام یا ارز، وضعیت ظاهری مناسبی دارد، اما به یکباره دچار ریزش خواهد شد یا بالعکس، با مسیر سوددهی صعودی و سریعی روبرو می شود. در این حالت، معمولا تریدهای حرفه ای، حتی پیش از بروز چنین وضعیت هایی آمادگی دارند و با استفاده از تحلیل تکنیکال (روشی برای ارزیابی و بررسی اوراق بهادار و ارزهای مختلف به وسیله تحلیل نمودارها و داده هایی از حجم معاملات یا قیمت های آنها)، سیگنال خرید یا فروش قابل اطمینانی را دریافت کرده اند. این سرعت عمل، معمولا برای افراد تازه کار یا آموزش نوشتن اکسپرت برای mt4 کسانی که به دلیل اشتغال در کارهای دیگر، فرصت بررسی دقیق بازار را ندارند، امکان پذیر نخواهد بود. برای این دسته از افراد، ساخت اندیکاتور و استفاده از آن برای دریافت سیگنال های مورد نیاز، ضروری خواهد بود. اندیکاتورها با استفاده از محاسبات مختلف ریاضی بر روی حجم معاملات آموزش نوشتن اکسپرت برای mt4 یک سهام یا ارز و همچنین نوسانات قیمت آن، اطلاعات ارزشمندی درباره روند حرکت سهام یا ارز مورد نظر و همچنین شتاب قیمت آن را به شما ارائه می دهند. ساخت اندیکاتور توسط برنامه نویسان و با استفاده از زبان های برنامه نویسی مانند MQL، پایتون، C++ و. انجام می شود.
انواع اندیکاتور
زمانی که با استخدام برنامه نویس، قصد سفارش ساخت اندیکاتور را دارید، باید به صورت دقیق مشخص کنید که اندیکاتور مورد درخواست شما، از کدام نوع باشد. انواع اندیکاتورها در تحلیل تکنیکال و بر اساس زمان اعلام سیگنال، در یکی از دو دسته بندی زیر قرار می گیرند:
اندیکاتورهای پیشرو (Leading Or Oscillator)
اگر می خواهید به صورت کوتاه مدت و سریع، نوسانات بازار را ارزیابی کرده و سیگنال مورد نظر را دریافت کنید، اندیکاتورهای پیشرو برای شما بسیار مناسب هستند. این اندیکاتورها، پیش از ایجاد تغییرات در روند بازار، با بررسی نوسانات بازار و همچنین خرید و فروش های هیجانی سهام یا ارز مورد نظر، سیگنال های خرید یا فروش کوتاه مدت را بر اساس آنها این داده ها به شما خواهند داد. اگر قصد تکیه بر فعالیت های کوتاه مدت در بازار را دارید، می توانید در هنگام سفارش ساخت اندیکاتور، از برنامه نویس بخواهید که اندیکاتور مورد نظر شما را از این دسته بندی طراحی کند.
اندیکاتورهای پیرو (Lagging Or Trend)
در این اندیکاتورها، هیچ سیگنالی برای تحلیل رفتار یک دارایی (سهام یا ارز) و در کوتاه مدت تولید نمی شود و اگر می خواهید سیگنال های سریع تری را از بازار مورد نظر خود دریافت کنید، این اندیکاتور برای شما مناسب نیست. در اندیکاتورهای پیرو، شاخص های مفیدی برای خرید یا فروش یک سهام یا ارز، در بلند مدت تولید می شود. این اندیکاتورها، نوسانات مقطعی بازار را حذف کرده و منبع قابل اطمینان تری برای سرمایه گذاری بلند مدت هستند. علاوه بر این تقسیم بندی اندیکاتورها بر اساس زمان ارائه سیگنال، دسته بندی دیگری نیز برای اندیکاتورها تعریف می شود. این دسته بندی، مربوط به شیوه عملکرد اندیکاتور مورد نظر است. اندیکاتورهای زیر مجموعه این دسته بندی عبارتند از:
اندیکاتور باندهای بولینگر (Bollinger Bands)
اندیکاتور ابر ایچیموکو (Ichimoku Cloud)
این اندیکاتور یکی از کامل ترین اندیکاتورهای مورد استفاده در بازارهای مالی است که در آن، امکان تشخیص روند قیمت، سنجش شتاب سهام یا ارز مورد نظر، میزان مقاومت آن و در نهایت، تولید سیگنال خرید یا فروش وجود دارد.
اندیکاتور میانگین متحرک (Moving Average)
این اندیکاتور، فاقد قدرت پیش بینی روند آینده بازار است اما تحلیل داده های کنونی را به خوبی انجام می دهد و می توانید با استفاده از آن، تغییر روند قیمت ها را به صورت آهسته تری مشاهده کنید.
اندیکاتور MACD
از این اندیکاتور برای تعقیب روند بازار استفاده می شود. اگر قصد بررسی قدرت، شتاب و جهت یک روند در بازار را دارید و تا به حال از هیچ نوع اندیکاتوری در این بازارها استفاده نکرده اید، می توانید سفارش ساخت مدلی مشابه اندیکاتور MACD را به برنامه نویس مورد نظر خود بدهید. کار با این اندیکاتور، تقریبا ساده است و می توانید در مدت کوتاهی آن را یاد بگیرید.
اندیکاتور RSI یا شاخص قدرت نسبی
این اندیکاتور، بیانگر قدرت بازار و همچنین قدرت فروشندگان و خریداران است و یکی از مهمترین اندیکاتورهایی است که در بازارهای مالی شامل بورس و فارکس به کار گرفته می شود و سیگنال های بسیار مناسبی را انتقال می دهد.
اندیکاتور COT
این اندیکاتور در صندوق های سرمایه گذاری به کار می رود و با ترسیم موقعیت قبلی و فعلی بازار، بازده سالیانه دارایی مورد نظر را نمایش می دهد.
کاربردهای اندیکاتور
ساخت اندیکاتور در بازارهای مالی، با هدف اطلاع از رفتار یک سهام یا ارز در بازار مورد نظر و دریافت سیگنال های خرید و فروش انجام می شود. اندیکاتورهای طراحی شده، در یکی از سه حالت زیر، به کار گرفته می شوند:
حالت اول: هشدار
اندیکاتورها با شناسایی الگوریتم های رفتاری هر سهام یا ارز در بازارهای مالی، می توانند هشدارهای کارآمد و مناسبی را در مواقع تغییر جهت حرکتی قیمت و روند بازار ایجاد کنند.
حالت دوم: پیش بینی
حالت سوم: تایید
این حالت، برای تریدرها و تحلیل گران حرفه ای کاربرد دارد. این گروه از افراد، با استفاده از تجربیات و توانایی خود در این حوزه و با تحلیل داده های تکنیکال بدست آمده از سهام یا ارز مورد نظر، سیگنال مناسب برای ورود به بازار را پیدا می کنند و پس از آن، از اندیکاتورها برای تایید نهایی خرید یا فروش استفاده می کنند.
هزینه ساخت اندیکاتور
هزینه مورد نیاز برای ساخت اندیکاتور، با توجه به عوامل مختلفی مانند نوع اندیکاتور، زبان به کار رفته در ایجاد اندیکاتور دلخواه شما، امکانات موجود در اندیکاتور و مواردی از این قبیل تعیین می شود. برای کسب اطلاع دقیق از قسمت ساخت اکسپرت و اندیکاتور می توانید یک پروژه رایگان ایجاد کنید. پس از ایجاد پروژه ساخت اندیکاتور متخصصین قیمتهای پیشنهادی خود را به شما اعلام میکنند و شما می توانید مناسب ترین فریلنسر را برای طراحی و ساخت اکسپرت بورسی از طریق کارلنسر استخدام نمایید. این هزینه، پیش از آغاز پروژه، توسط برنامه نویس یا تیم برنامه نویسی به شما اعلام خواهد شد ولی در طی پروژه نزد کارلنسر به امانت مانده و تنها در انتها و پس از تکمیل پروژه به سازنده اکسپرت تحویل داده خواهد شد.
سفارش ساخت اندیکاتور در کارلنسر
برنامه نویسان زیادی در سایت کارلنسر و در قالب خدمات فریلنسری، در زمینه ساخت اندیکاتورهای مورد نیاز برای بازارهای مالی فعالیت دارند. شما می توانید سفارش مورد نظر خود در این حوزه را با مراجعه به بخش مهارت ها در سایت کارلنسر و انتخاب زیر مجموعه ساخت اندیکاتور از دسته بندی برنامه نویسی و طراحی سایت، ثبت نمایید. پس از ثبت این سفارش و تایید آن از سوی سایت، پیشنهادات فریلنسرهای این حوزه برای شما ارسال خواهد شد و با بررسی هر یک از آنها، می توانید فرد مورد نظر خود را انتخاب نمایید. شایان ذکر است که پرداخت هزینه تمامی سفارشات ثبت شده در سایت، با استفاده از سیستم پرداخت امن انجام می شود. همچنین در صورت تمایل برای مطالعه سایر مقالات مرتبط با حوزه های مختلف، می توانید به بخش مقالات سایت کارلنسر مراجعه فرمایید.
آموزش زبان برنامه نویسی MQL (ساخت اکسپرت و اندیکاتور متاتریدر)
آموزش زبان برنامه نویسی MQL (ساخت اکسپرت و اندیکاتور متاتریدر) : این دوره شامل 37 ویدیو در 3 فصل ارئه شده .
مدرس این دوره آقای حسین احمدی است
اکثر آموزشها بر اساس تجربه شخصی آموزش نوشتن اکسپرت برای mt4 مدرس است بنابراین این دوره بسیار ارزشمند
برای فعالین بازارهای مالی و کسانی که تلاش دارند زبان MQL را یاد بگیرند است.
یکی از حسن های این دوره کاربردی بودن آن است این دوره پر است از مثال های عملی کد نویسی
بعد از تماشای کامل این دوره و انجام تمرین های آن شما این امکان را دارید که اندیکاتور یا اکسپرتی که در ذهن خود دارید
روی چارت در متاتریدر 4 پیاده کنید
به دلیل پویای زبان MQL حتی کسانی که آشنای اولیه هم با زبانهای برنامه نویسی ندارند امکان یاد گیری آسانی در این دوره خواهند داشت
این دوره شامل 3 آموزش نوشتن اکسپرت برای mt4 فصل میباشد :
مقدماتی : این فصل شامل متغیر ها ، حلقه ها و توابع و دستورات شرطی و … خواهد بود که مختصی زبان برنامه نویسی MQL خواهد بود
متوسطه : در این فصل ساخت اندیکاتور و اکسپرت و سیستم معامله خودکار را یاد خواهیم گرفت.
پیشرفته : در این فصل به صورت تخصصی تر فصل مقدماتی را باز خوانی میکنیم و با توابع بیشتری آشنا خواهیم شد .
بعد از آموختن این 3 فصل دانشجو میتواند در وبسایت mql5 فعالیت کند.
و با اقدام به فروش اندیکاتورها و اسکرپتها به کسب درآمد از این راه بپردازد.
معرفی دوره
فصل مقدماتی آموزش زبان برنامه نویسی MQL
ردیف | عنوان مطلب و توضیحات | لینک | حجم |
1 | معرفی دوره | دانلود | 11 mg |
2 | متغیر ها | دانلود | 103 mg |
3 | عملگرهای محاسباتی | دانلود | 61 mg |
4 | دستورات شرطی | دانلود | 116 mg |
5 | حلقه ها | دانلود | 95 mg |
6 | برک-کنتینیو -شرط سویچ-آرایه ها | دانلود | 80 mg |
7 | تابع – پایان بخش مقدماتی | دانلود | 52 mg |
فصل متوسطه آموزش زبان برنامه نویسی MQL
ردیف | عنوان مطلب و توضیحات | لینک | حجم |
1 | آرایه ها و متغیر های پیش فرض | دانلود | 80 mg |
2 | توابع زمانی و تاریخ (بخش 1) | دانلود | 75 mg |
3 | توابع زمانی و تاریخ (بخش 2) | دانلود | 47 mg |
4 | توابع پوزیشن گیری و مدیریت پوزیشن (بخش1) | دانلود | 123 mg |
5 | توابع پوزیشن گیری و مدیریت پوزیشن (بخش2) | دانلود | 80 mg |
6 | نمونه کد نویسی اکسپرت (بخش1) | دانلود ویدیو دانلودسورس کد | 80 mg 1 mg |
7 | آموزش نوشتن اکسپرت برای mt4نمونه کد نویسی اکسپرت (بخش2) | دانلود ویدیو دانلودسورس کد | 52 mg 1 mg |
8 | نمونه کد نویسی اکسپرت (بخش3) | دانلود ویدیو دانلودسورس کد | 32 mg 1 mg |
9 | کد نویسی اندیکاتور های خطی (بخش1) | دانلود ویدیو دانلود سورس کد | 93 mg 1 mg |
10 | کد نویسی اندیکاتور های خطی (بخش2) | دانلود ویدیو دانلود سورس کد | 49 mg 1 mg |
11 | استفاده از اندیکاتور ها | دانلود ویدیو | 75 mg |
12 | استفاده از اندیکاتور های(کد نویسی) | دانلود ویدیو دانلود سورس کد | 81 mg 1 mg |
13 | استفاده از اندیکاتور های خارجی | دانلود ویدیو | 44 mg |
14 | ترلینگ استاپ-محاسبه نقاط پیوت | دانلود ویدیو دانلود سورس کد | 81 mg 1 mg |
15 | توابع مدیریت حساب – چند نکته در مورد اکسپرت نویسی | دانلود ویدیو دانلود سورس کد | 86 mg 1 mg |
نکته های این فصل :
دوستان توجه داشته باشند تابع OnTiket زمانی توسط برنامه فراخوانی میشه که یک قیمت جدید در بازار به وجود بیاد،و
در روزهای شنبه و یک شنبه به دلیل تعطیلی بازار و عدم به وجود اومدن یک قیمت جدید،این تابع در بازار لایو فراخونی نمیشه ،
دوستانی که کدهاشون رو در این تابع مینویسن در روز های تعطیلی بازار باید در استراتژی تستر برنامشون رو چک کنند
چگونه کد یک اکسپرت را کات کنیم تا زندگی آسودهتر و خطاهای کمتری داشته باشیم…
سیستمهای ترید زیادی بر اساس تحلیل تکنیکال وجود دارند که یا اندیکاتور هستند یا طرحهای گرافیکی، که یک ویژگی مهم دارند. منظورم تقارن و همانند بودن چنین سیستمهایی در جهتِ معامله است. با توجه به این ویژگی، سیگنالهای ترید و مکانیزم درج معاملات در چنین سیستمهایی را بهطور کلی میتوان بهنسبتِ جهتِ آنها بیان کرد.
رویکرد سادهای که در ادامه آورده شدهاست، به ما اجازه میدهد از این ویژگی بهشکل موثر استفاده کنیم تا بهطرز چشمگیری طولِ کد اکسپرتها را، برمبنای چنین سیستمهای متقارنی، کاهش دهیم. اکسپرتهایی که از این رویکرد استفاده میکنند، از همین کد برای شناسایی سیگنالهای ترید و تولید معامله، هم برای پوزیشنهای بلندمدت و هم برای کوتاهمدتها، بهره میبرند.
در بحث توسعهی اکسپرتها بر اساس سیستمهای متقارن ، رایج است که فرد ابتدا، تولید و پردازش کدهای مربوط به سیگنالهای ترید در یک جهت را انجام داده، و سپس همان کد را کپی کرده و برای جهت دیگر، آن را اصلاح کند. در این شرایط اما خطا کردن چه آسان و شناسایی و رفع خطا چه مشکل خواهد بود… پس، کاهش خطاهای ممکن در منطق اکسپرت، دیگر خصوصیت خوبِ رویکرد مدنظر ما است.
مفهومی که مدنظر ماست، بر اساس جهت معامله است. این جهت ممکن است بلندمدت باشد (سیگنالهای خرید و معاملات)، یا کوتاهمدت باشد (سیگنالهای فروش و معاملات). هدف ما، نوشتن اکسپرتها، به سبکی است که کد آنها با توجه به جهت معاملهی کنونی، نامتغیر است. برای جلوگیری از ارائهی توضیحات اضافه در متن، این کد را نامتغیر میخوانیم، با درنظر گرفتن اینکه این کد فقط نسبت به جهت معامله، نامتغیر است.
برای این کار، یک تابع یا یک متغیر وارد میکنیم، که مقدار آن همیشه جهت معاملهی کنونی را، با یک یا دو مقدار مقدور، نشان میدهد.
ارائهی این متغیر در این کد جنبهی بسیار مهمی دارد. هرچند بهنظر میرسد نوع منطقی [متغیرها] مناسب این مدل اهداف هستند، اما کمی تفاوت داشتن در نحوهی ارائه، یعنی [ارائه با متغیر از نوع] عددصحیح، تاثیرگذارتر است. جهت خودِ معامله را اینگونه کددهی میکنیم:
- جهتِ معاملاتِ بلندمدت: ۱+
- جهتِ معاملاتِ کوتاهمدت: ۱-
در مقایسه با نوع منطقی، مزیت این مدل ارائه این است که میتوان از آن بهشکل بسیار خوب و تاثیرگذاری برای انجام محاسبات مختلف، و نیز انجام بررسیهای مختلف در کد اکسپرت، بدون داشتن شاخههای شرطی مورد استفاده در رویکردهای متعارف، استفاده کرد.
- چگونه از رویکردهای متعارف در کدنویسی به رویکرد نامتغیر، تغییر وضعیت دهیم–ارائه مثال
بیایید این موضوع را با چند مثال، واضحتر کنیم. هرچند، بیایید با درنظر گرفتن چند تابع کمکی شروع کنیم، که بعدها هم مرتباً استفاده خواهند شد:
هدفِ تابع ()sign کاملاً مشخص است: ۱ را برای مقادیر غیرمنفی استدلال، و ۱- را برای مقادیر منفی، برمیگرداند.
تابع ()iif، معادلی برای عملگر زبان C یعنی “condition ? ifTrue : ifFalse” است و اجازه میدهد سادهسازی قابلتوجهی برای اکسپرتهای نامتغیر داشته باشیم، که اکسپرت را فشردهتر و ارائه آن را، بهتر میسازد. این تابع استدلالهای دوگانه را میگیرد، بنابراین، میتوان از آن با مقادیر هم این نوع، و هم نوعِ int (عددصحیح)، و datetime، استفاده کرد. برای اینکه همین کار را با رشتهها انجام دهیم، به تابعِ کاملاً مشابهِ ()iifStr نیاز خواهیم داشت تا مقادیر نوع رشتهای را بگیرد.
تابع ()orderDirection، جهتِ معاملهی ترید کنونی را، با توجه به توافقات ما دربارهی چگونگی ارائهی جهتهای معامله، برمیگرداند (بهعبارت دیگر، همان معاملهای که توسط تابع ()OrderSelect انتخاب شدهاست).
اکنون بیایید با مثالهای خاص ببینیم که چگونه رویکرد نامتغیر با این شکل کدنویسی برای جهتهای معامله، به ما اجازه میدهد کدهای اکسپرت را سادهسازی کنیم:
۲-۱. مثال ۱. تبدیلِ تحقق تریلینگ اِستاپ
- توانستیم از وارد شدن به شاخههای شرطی سنگین اجتناب کنیم؛
- فقط از یک رشته برای فراخوانی تابع ()OrderModify بهجای دو رشتهی اولیه، استفاده کردیم؛ و،
- بهعنوان نتیجهی مورد (۲)، کد را برای پردازش [جهت یافتن] خطاها، کوتاه کردیم.
بهیاد داشته باشید که توانستیم فقط از یک فراخوان برای تابع ()OrderModify استفاده کنیم و بهخاطر همین موضوع، بلافاصله جهتِ معاملهی ترید را، در عبارت محاسباتی، برای محاسبهی خطوط استاپ (stop levels)، بهکار گرفتیم. اگر از یک ارائهی منطقی برای جهت معامله استفاده میکردیم، این کار غیرممکن میشد.
اساساً، یک اکسپرتنویس باتجربه، میتواند [حتی] با استفاده از همان رویکردهای متعارف [و بعضاً سنتی]، فقط از یک فراخوان برای ()OrderModify استفاده کند؛ با این حال، در کار ما (در رویکرد ما)، این اَمر (یعنی استفاده از فقط یک فراخوان)، کاملاً بهصورت طبیعی اتفاق میاُفتد و نیاز به هیچگونه مرحلهی اضافی نداریم.
۲-۲. مثال ۲. تبدیلِ شناسایی سیگنال ترید
بهعنوان مثال، بیایید شناسایی سیگنالهای ترید را در یک سیستم با دو مووینگ اَورج، درنظر بگیریم:
اکنون بیایید کد نامتغیر را با توجه به جهت ترید، ایجاد کنیم:
فکر میکنم کاملاً واضح است که کد بسیار فشردهتر شدهاست. و طبیعتاً، دو بار بررسی خطاها، به یک بار، تبدیل شدهاست.
علیرغم این حقیقت که مثالهای بالا بسیار ساده هستند، ویژگیهای اصلی و مثبتِ رویکرد ما بسیار واضح دیده میشوند. در بعضی از مواردِ پیچیدهتر، تفاوت بین رویکرد سنتی و رویکرد ما، حتی از الان نیز بیشتر مشهود خواهد آموزش نوشتن اکسپرت برای mt4 بود. بیایید از این بابت با یک مثال از یک اکسپرت استاندارد، یعنی MACD Sample، مطمئن شویم.
برای اینکه مقاله خیلی طولانی نشود، کد کامل این اکسپرت را در اینجا لحاظ نمیکنیم. به آن بخشهایی از کد میرویم که با آنها کار داریم و تغییر میکنند.
کد کامل اکسپرت را میتوانید در نرمافزار متاتریدر ۴ یا در فایلهای پیوستشده به همین مقاله، بیابید. نسخهی سادهشده را نیز، جهت راحتی کار شما، گذاشتهایم (MACD Sample-2.mq4).
بیایید با بلوکی شروع کنیم که برای شناسایی سیگنالهای ترید نوشته شدهاست. کد اولیهی آن را در اینجا مشاهده میکنید:
اکنون، با استفاده از روشهای بالا، بیایید همین کد را بهشکلی بازنویسی کنیم که برای سیگنالهای Buy و Sell یکسان باشد:
اکنون بیایید به بلوکی برویم که مسئول بستن پوزیشنهای باز و پردازش تریلینگ اِستاپها است. همانند قبل، بیایید نسخهی اولیه را ابتدا ببینیم:
بیایید با توجه به جهت ترید، این کد را به یک کد نامتغیر تبدیل کنیم:
لطفاً بهیاد داشته باشید که نسخهی اولیهی این اکسپرت، در پردازش تریلینگ اِستاپ، شرط OrderStopLoss() == 0 را فقط برای پوزیشنهای کوتاه، بررسی میکند. این کار برای پردازش شرایطی که در آن فرد، تعیینِ stop level اولیه را انجام نداده، ضروری است (برای مثال، بهخاطر اینکه خیلی نزدیک به قیمت بازار بوده است).
این واقعیت که این شرط برای پوزیشنهای بلندمدت بررسی نمیشود را میتوان بهعنوان خطایی بسیار عادی در نوشتن چنین اکسپرتهای متقارنی، با استفاده از روش کپی-پِیست، درنظر گرفت.
توجه داشته باشید که این خطا بهصورت اتوماتیک، برای هر دو جهتِ ترید، در کد توسعهدادهشده، برطرف شدهاست. ذکر این نکته لازم است که اگر این خطا حین نوشتن کد نامتغیر رخ میداد، هم در پردازش پوزیشنهای بلند و هم در پردازش پوزیشنهای کوتاه، این خطا را داشتیم و نیازی به گفتن نیست که این کار احتمال شناسایی آن حین تست را افزایش میداد.
بسیار خب، اگر اکسپرتها را با تنظیمات مشابه روی دادههای مشابه تست کنید، خواهید دید که کاملاً یکسان هستند. هرچند، نسخهی سادهشده بسیار فشردهتر و قابلنگهداری است.
تا الان، حالتهای مختلف تغییر از رویکرد قدیمی در کدها به رویکرد نامتغیر را دیدهایم. با این حال، توسعهی یک ربات ترید از ابتدا، با استفاده از اصول مطرحشده، کار بهتر و تاثیرگذارتری هست.
در نگاه اول، شاید ساده بهنظر نرسد، زیرا برای انجام این کار نیاز به مهارت و تجربههای خاص در ایجاد شرایط و بیان مسئله، با توجه به جهت معامله، داریم. هرچند، با کمی تمرین، کدنویسی به این سبک روی روال خواهد افتاد و اصلاً سخت نیست.
چند توصیه دارم که به شما کمک میکند از رویکرد تاثیرگذارتری استفاده کنید:
- هنگامی که دارید بخشی از کد را توسعه میدهید، اول از همه، جهتِ معاملات بلندمدت را پردازش کنید – در بسیاری از مواقع، آموزش نوشتن اکسپرت برای mt4 راه سادهتر این است که کد نامتغیر را ترکیب کینم، زیرا جهت این معامله، با مقدار ۱+ ارائه شدهاست و هنگام نوشتن و تحلیل روابط نامتغیر، کار زیادی نمیبَرَد.
- اگر کار روی جهت بلندمدت را آغاز کردید، اول، شرطی بدون متغیر/تابع بنویسید که جهت معامله را منعکس میکند. مطمئن شوید که بیان [مسئله] صحیح بوده و جهت معامله را درون آن اضافه کنید. بعد از کسب کمی تجربه، میتوانید بدون تقسیم مراحل کار کنید.
- به جهت بلندمدت، مانند کَنه “نچسبید” – بعضیوقتها بهتر این است که شرط را برای جهت کوتاهمدت تعریف کنید.
- جاهایی که امکان کار با محاسبات وجود دارد، سعی کنید از شاخههای شرطی و استفاده از تابع iif() اجتناب کنید.
بهعنوان جملهی آخر در اینجا میخواهم بگویم، ممکن است شرایطی پیش بیاید که نتوانید بدون شاخههای شرطی کار را جلو ببرید. هرچند، بهتر این است که تلاش خود را بکنید و شرایط را یککاسه کنید و شرایط را در توابع کمکیِ جهت معامله، بهصورت جداگانه طوری پخش کنید که وابسته به یک اکسپرت خاص نباشید. این توابع، همانند توابع بالا، ()sign()، iif، و ()orderDirection، ممکن است مناسب یک کتابخانهی خاص باشند که اکسپرتهای شما بعداً بتوانند از آن استفاده کنند.
برای دوباره شفافسازی همهچیز، بیایید فرض کنیم مشکل زیر را داریم:
در یک معامله، برای یک پوزیشن طولانی، stop level باید در پایینترین سطح کندل قبلی، و برای پوزیشن کوتاه، باید در بالاترین سطح کندل قبلی باشد.
میتوانیم در کد این موضوع را اینگونه ارائه دهیم:
بهنظر ساده و شفاف میآید، هرچند، حتی این ساختارهای ساده ممکن است و باید، به توابع ساده و کوچکتر تقسیم شوند، تا بتوان از آنها بارها و بارها استفاده کرد.
بیایید از عملگر شرطی، با جایگزینی آن در تابع کمکی، و به قصد اهداف کلیتر، اجتناب کنیم:
اکنون میتوانیم محاسبهی stop levelها را، به این شکل، بیان کنیم:
اگر در نگاه اول دیدید که تفاوت بسیار ناچیز است، لطفاً تحت تاثیر قرار نگیرید. این حالت، مزیتهای بسیار خوبی دارد:
- هدفش را کاملاً شفاف و بهشکل نامتغیر بیان میکند؛
- ترغیب به نوشتن کد اکسپرت، با سبکی بسیار مناسب میکند؛
- خواندن آن راحت است و توسعههای بعدی را راحتتر میسازد.
این فقط یک مثال بود. در واقع، بسیاری از اِلمانهای استاندارد کد اکسپرتها را میتوان به همین شکل بیان کرد. خودتان نیز میتوانید بهراحتی این کار را انجام دهید. بنابراین پیشنهاد میکنم کد خودتان را بررسی کرده و در آن به این شیوه بازنگری کنید.
بهنظر من، مفهومی که توضیح داده شد، مزیتهای بسیار مهم زیر را دارد:
- کاهش سورس کد بدون کم شدن کارایی آن، و در نتیجه، صرف زمان کمتر حین توسعه و اصلاح سیستمهای ترید؛
- کاهش تعداد خطاهای بالقوه؛
- افزایش احتمال شناسایی خطاهای موجود؛
- سادهتر شدن اصلاح اکسپرت در آینده (تغییرات بهصورت خودکار هم برای سیگنالها و هم برای پوزیشنهای بلند و کوتاهمدت، اِعمال میشوند).
فقط متوجه یک عیب شدم: این کار ممکن است دشواریهای کوچکی در فهم و مطالعه در مراحل ابتدایی، بوجود بیاورد. هرچند، این موضوع در برابر مزیتهایی که در بالا ذکر شدهاند، تقریباً هیچ است. علاوه بر اینها، فقط بحث زمان است و تجربه – اکسپرتنویسهایی که به این سبک کار میکنند پس از مدتی کار برایشان بسیار راحت و طبیعی میشود.
نتیجهگیری
رویکردی که برای کدنویسی اکسپرتها در MQL4 ذکر شد، برمبنای استفاده و ارائهی مفهومِ جهت معامله، آنهم بهشکلی موثر، است. در عمل، به شما اجازه میدهد از تکرار مجدد برخی از بخشهای کد، که کاملاً یکسان هستند، جلوگیری کنید. تکرار مجدد، در رویکرد سنتی و در کد اکسپرتها، موضوعی طبیعی بهحساب میآید. بهرهگیری از روشی که توضیح داده شد، منجر به کاهش حجم سورس کد، و به دنبال آن، سایر مزیتها، میشود که بسیار ضروری بهنظر میرسد.
مثالهایی که در این مقاله ارائه شد، برای تازهکارها و باتجربهها منبع خوبی بود تا کدها و کدنویسی خودشان را آپدیت کنند – البته اگر بخواهند! مثالهایی که درنظر گرفته شدند، ساده بودند تا اهداف مورد نظر، یعنی خواندن و فهم سادهی موضوع، اجابت شوند. با این حال، از این رویکرد در تحقق سیستمهای بسیار پیچیده هم استفاده شدهاست؛ سیستمهایی که ابزارهای تحلیل تکنیکال، مانند کانالها، خطوط روند، چنگال آندرو، امواج الیوت، و دیگر روشهای متوسط یا پیشرفتهی تحلیل بازار را، در خود دارند.
دانلود کتاب PDF آموزش زبان برنامه نویسی MQL (MQL4 و MQL5)
هم اکنون امکان دانلود کتاب آموزش زبان برنامه نویسی MQL برای متاتریدر 4 و 5 (MQL4 و MQL5) به زبان انگلیسی با فرمت PDF به صورت رایگان را برای شما عزیزان آماده کرده ایم که در ادامه این مقاله می توانید از داتیس نتورک دریافت کنید.
دانلود کتاب آموزش زبان برنامه نویسی MQL
MQL مخفف MetaQuotes Language یک زبان برنامه نویسی است که به طور انحصاری توسط نرم افزار MetaTrader برای ایجاد ربات های معاملاتی خودکار و اندیکاتور های بازار مالی مورد استفاده قرار می گیرد.
برنامه نویسان که اسکریپت های MQL می نویسند باید از برنامه نویسی شی گرا ، سینتکس MQL و بازارهای مالی که قصد دارند اسکریپت های ام کیو ال را در آنها مستقر کنند ، آگاهی کافی داشته باشند.
هدف از نوشتن اسکریپت های MQL این است روند تجزیه و تحلیل بازارهای مالی ، در درجه اول بازارهای ارز (Forex) و تجارت ابزارهای مالی به صورت خودکار انجام شود.
اگر علاقه مند به یادگیری زبان برنامه نویسی MQL هستید، یکی از بهترین روش های آموزشی استفاده از کتاب های الکترونیکی با فرمت PDF است زیرا در تمامی پلتفرم ها و در هر شرایط زمان و مکانی می توانید از آن برای یادگیری و مطالعه استفاده کنید.
هم اکنون یکی از بهترین کتاب های آموزشی در زمینه یادگیری برنامه نویسی MQL (MQL4 و MQL5) را برای شما عزیزان آماده کرده ایم که در ادامه این مقاله به صورت رایگان می توانید از داتیس نتورک دریافت کنید.
دیدگاه شما