استفاده از اندیکاتور ها(نمونه کدنویسی اکسپرت) – درس دوازدهم – کتاب آموزش زبان mql (دوره متوسطه)

استفاده از اندیکاتور ها(نمونه کدنویسی اکسپرت)

درس دوازدهم

 

❓مسئله شماره 15:
اکسپرتی با مشخصات و تنظیمات زیر را بنویسید:
همانند شکل زیر در صورتی که اندیکاتورcci  بالای 100 باشد وخط سیگنال اندیکاتور  macd پایین تر از هستوگرام ان باشد یک پوزیشن buy گرفته شود.

  • در صورتی که اندیکاتور cci پایین خط 100- باشد و خط سگنال اندیکاتور macd بالاتر از هستوگرام آن باشد یک پوزیشن سل گرفته شود.
  • درصورتی که خط سیگنال macd از پایین هستوگرام آن را قطع کرد پوزیشن buy بسته شود
  • درصورتی که خط سیگنال macd از بالا هستگرام آن را قطع کرد پوزیشن sell بسته شود.
  • حجم پوزیشن توسط کاربر قابل تغییر باشد.
  • درصورتی که پوزیشنی وجود نداشته باشد پوزیشن جدید گرفته شود.

استفاده از اندیکاتورها

ابتدا اکسپرتی بسازید، نامگذاری کرده و به پایان (finish) برسانید.

مقداری از کاربر بگیرید.

اندیکاتورها

برای چک کردن وضعیت اندیکاتورها تابع را بنویسید.

آموزش ام کیو ال

به دلیل طولانی بودن دستور در دو تصویر نمایش شده است.

بررسی دستور چک کردن اندیکاتور:

ابتدا دستور از نوع string را با نام MacdCciSinalop بنویسید. اگر خط اصلیMODE_MAIN (خط هیوستگرام)iMACD  بزرگتر از خط سیگنال MODE_SIGNAL بود ، (دقت نمایید از کندل 1 در دستور استفاده شده یعنی کندل یکی مانده به آخر) و همچنین اگر iCCI کندل شماره 1 آن بزرگتر از 100 بود خروجی Buy را نمایش دهد.
خروجی Sell برعکس دستور بالاست. یعنی اگر خط هیوستگرام آن کوچک تر از خط سیگنال بود و همچنین iCCI کوچک تر از 100- بود، Sell را به خروجی بفرستند. در غیر این صورت “NO SIGNAL”  را در خروجی نمایش دهد. دقت نمایید چونکه خروجی ها از نوع استرینگ می باشد بنابراین تابع هم باید از نوع استرینگ باشد.

بررسی تابع شمارش پوزیشن:

تابع از نوع int orders بنویسید. ابتدا متغیر از نوع int بسازید. سپس یک به یک پوزیشن ها چک شوند که اگر OrderMagicNumber آن ها 1111 یا 2222 باشد، یک متغیر اضافه کند. در آخر متغیر را چاپ کند. تفاوتی در Buy یا Sell وجود ندارد.

جهت پوزیشن گرفتن Buy یا Sell :

در تابع OnTick باید بررسی شود که ابتدای کندل باشد و سپس بررسی شود که اوردر (order) وجود نداشته باشد. طبق تصویر سوال درس، پوزیشن بای زمانی گرفته بشود که زیر خط صفر قرار بگیرد و پوزیشن سِل بالای خط صفر گرفته شود، بنابراین MACD کمتر از صفر باشد.

دقت نمایید خط سبز رنگ نمادین، به عنوان خط صفر می باشد چنانچه MACD پایین خط صفر باشد منفی بوده و اگر بالای خط صفر باشد علامت مثبت بودن آن است.

بنابراین در کدها چک شود اگر خروجی تابع MacdCciSignalOP مساوی مساوی با “Buy” باشد و تابع iMACD  طبق تصویر کوچک از صفر بود (نشان می دهد پایین تر از خط صفر می باشد) در این حالتپوزیشن بای را بگیرد. (شیوه نوشتن پوزیشن بای در تصویر آمده و برای پوزیشن سِل نیز از همین شرط استفاده می شود با این تفاوت که درون رشته باید واژه sell قرار بگیرد و  MACD بزرگتر از صفر باشد)

جهت بستن پوزیشن ها:

تابع از نوع string و با نام MacdCciSignalCL می باشد. و چک می کند اگر MACD شماره 2 اگر هیوستگرام آن بزرگتر از سیگنال باشد، و کندل شماره 1 برعکس باشد (یعنی هیوستگرام کمتر از سیگنال باشد) close buy را در خروجی نمایش دهد. اما اگر کندل شماره 2 خط سیگنال آن بزرگتر از خط هیوستگرام آن باشد، و کندل شماره 1 هیوستگرام آن بزرگتر از سیگنال باشد، خروجی close sell را نمایش دهد. در پایان چنانچه هیچ کدام از موارد بالا نبود No signal را به خروجی فرستاده و نمایش دهد.

تابع بستن پوزیشن ها عملکرد آن به این صورت است که ابتدا پوزیشن ها را یک به یک بررسی کرده که اگر شماره مجیک آن با شماره مجیک ورودی برابر بود، پوزیشن را می بندد.

قبل از گرفتن پوزیشن ها close buy و close Sell را چک کنید. در آخر هر کدنویسی گزینه compile را کلیک و نباید اخطاری نمایش دهد. وارد برنامه شوید.

اندیکاتورها در ام کیو ال

نام کلاس را جستجو کرده و start را کلیک کنید.

آموزش ام کیو ال

درصد سود

علاوه بر چک کردن درصد سود در ماه های گذشته، شایسته است که تصویر بالا را نیز بررسی کنید اخطاری نمایش داده نشود. همچنین بهتر است هر چندل کندل را بررسی کنید که عملیات درست انجام شده اند.

کندل

طبق کدی که تعریف شده یک کندل قبل تر چک می شود که شرایط درخواستی اجرا شده باشد.

پوزیشن sell

همچنین در MACD ، cci پایین سطر بوده و خط سیگنال MACD بالای خط هیوستگرام بوده بنابراین پوزیشن sell باز شده است.

اما در اینجا پوزیشن را بسته. خط مکدی 90 و خط سیگنال 129 می باشد بنابراین MACD قطع شده و زیر خط هیوستگرام قرار گرفته است. (سایر نمونه به این شیوه بررسی می شوند)

❓ مسئله شماره 16:
اکسپرتی با مشخصات زیر بنویسید.

  • همانند شکل زیر بعد از برخورد دو مورینگ 12 (قرمز) و 50 (آبی) در صورتی که مورینگ 50 پایین تر از مورینگ 12 باشد یک پوزیشن Buy گرفته شود.
  • همانند شکل زیر بعد از برخورد دو مورینگ 12 و 50 در صورتی که مورینگ 12 پایین تر از مورینگ 50 باشد یک پوزیشن sell گرفته شود.
  • قبل از گرفته شدن پوزیشن Buy در صورت وجود پوزیشن sell ، پوزیشن sell بسته شود.
  • قبل از گرفتن پوزیشن sell در صورت وجود پوزیشن BUY، پوزیشن Buy بسته شود.
  • حجم پوزیشن توسط کاربر قابل تغییر باشد.
  • برنامه از ساعت 8 صبح تا 10 شب پوزیشن جدیدی باز نماید.

ابتدا میزان حجم lot از کاربر گرفته شود.

حجم Lot

کندل شماره 2 را چک می کند که با مورینگ 50 وضعیت آن به چه صورت می باشد اگر مورینگ 12 از مورینگ 50 کوچک تر یا مساوی بود و اگر مورینگ 12 در کندل شماره1 بزرگتر از مورینگ 50 باشد لذا buy در خروجی نمایش دهد.
و در صورت برعکس بودن مسئله(اگر مورینگ 12 بزرگتر از مورینگ 50 باشد در کندل شماره 2 ، و  در کندل شماره 1 اگر این وضعیت تغییر کرد) sell را در خروجی نمایش دهد. چنانچه هیچکدام نباشد No signal را در خروجی نمایش دهد.

در فیلتر ساعت، اگر ساعت بزرگتر از 8 باشد و ساعت بزرگتر از 22 باشد، true را در خروجی نمایش دهد. دقت نمایید چونکه خروجی از نوع true و false می باشد از تابع bool استفاده شده است.
همچنین می توانید متغیری بنویسید و ساعت شروع و پایان را از کاربر بگیرید. به عنوان مثال:

در قسمت فیلتر ساعت به جای عدد ساعت مقدار گرفته شده از کاربر را جایگزین کنید.

برای گرفتن پوزیشن ها ابتدا چک می کند ابتدای کندل باشد، سپس اوردر وجود نداشته باشد و همینطور Hourfilter مساوی با TRUE باشد.
اگر خروجی تابع movStatu مساوی با buy بوده، یک پوزیشن بای باز کند. و اگر خروجی sell بوده یک خروجی sell باز کند بدون stoploss یا TakeProfit
همچنین برای بستن پوزیشن ها اگر خروجی تابع movStatu مساوی با بای بوده پوزیشن های با شماره مجیک 2222 را  close کند. و اگر خروجی sell بوده پوزیشن های با شماره مجیک 1111 را close کند.

در حین اجرای برنامه ژورنال را چک کنید اخطاری نمایش داده نشود.

باز و بسته شدن پوزیشن ها را نیز نمایش می دهد.

باز و بسته شدن پوزیشن ها

 

منبع : کتاب آموزش زبان MQL (دوره مقدماتی)
مدرس : استاد حسین احمدی

 

سایر مقالات مرتبط

متا تریدر چیست؟
متاتریدر

متا تریدر چیست؟

متا تریدر چیست؟ اولین سوالی که هر فرد وقتی می خواهد آموزش های متاتریدر مانند آموزش صفر تا صد mql5،

کامل ترین و بهترین آموزش متاتریدر 4
mql4

کامل ترین آموزش متاتریدر 4

بهترین آموزش متاتریدر 4 متاتریدر4 یک پلتفرم معاملاتی محسوب می‌ شود که دارای رابط کاربری ساده است و همین یادگیری

پاسخ‌ها

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *