توابع پوزیشن گیری و مدیریت پوزیشن (بخش سوم)
درس هشتم
❓ مسئله شماره 12:
اکسپرتی با مشخصات و تنظیمات زیر را بنویسید:
- در صورتی که در تایم روزانه یک کندلی صعودی در حال شکل گرفتن باشد و همچنین در تایم یک ساعته دو کندل صعودی پشت سر هم تشکل شد یک پوزیشن بای گرفته شود.
- در صورتی که در تایم روزانه یک کندلی نزولی در حال شکل گرفتن باشد و همچنین در تایم یک ساعته دو کندل نزولی پشت سر هم تشکل شد یک پوزیشن sell گرفته شود.
- در صورتی که پوزیشن buy وجود نداشته باشد پوزیشن buy دیگری گرفته شود.
- در صورتی که پوزیشن sell وجود نداشته باشد پوزیشن sell دیگری گرفته شود
- در صورتی که روند صعودی کندل روزانه به نزولی تبدیل شد پوزیشن buy بسته شود
- در صورتی که روند نزولی کندل روزانه به صعودی تبدیل شد پوزیشن sell بسته شود
- میزان حجم پوزیشن ها توسط کاربر قابل تغییر باشد
- از ساعت 11 شب تا 8 صبح اکسپریت هیچ پورشن جدیدی باز نکند.
برای حل مسئله ابتدا اکسپرت ساخته نام گذاری کنید و یک حجم lot را از کاربر بگیرید.
برای بازکردن پوزیشن ها کدهای زیر را وارد کنید.
چک کردن کندل اول(کندل شماره صفر) valoum کمتر از یک باشد. سپس تابع ساعت را چک کنید.
قسمت پایین تر می توانید ساعت را تنظیم کنید.
اگر ساعت فعلی بزرگ تر از 8 بود و ساعت فعلی کوچک تر از 23 بود true را در خروجی تابع برگرداند. در غیر این صورت false را برگرداند. خروجی تابع ساعت bool می باشد.
برگردیم به دستور قبلی (بازکردن پوزیشن ها) :
دستور درون شرط:
تابع candelestatus را چک می کند اگر خروجی مساوی Buy باشد و تابع orders پوزیشن هایی که دارای شماره مجیک 1111 می باشند مساوی صفر باشد ، پوزیشن Buy را بگیرد.
در درس های گذشته شیوه تعریف تابع های ordersend بیان شد.
سپس وضعیت کندل ها را تعریف کنید.
شرط candelestatus به شیوه زیر می باشد که اگر: در تایم یک ساعته close کندل دوم بزرگ تر از open کندل دوم بود ، و همچنین اگر close کندل یک ، بزرگ تر از open کندل یک بود، و نیز اگر در تایم روزانه close کندل صفر بزرگ تر از open کندل صفر بود ، درصورت صحت دستورها BUY را در خروجی نمایش بدهد.
و اگر شرایط قسمت پایین درست بود SELL در خروجی نمایش دهد. چرا که شرایط برعکس بالاست و نمودار نزولی خواهد بود. در غیر این صورت NO Signal را خروجی بدهد. توجه نمایید که خروجی از نوع string می باشد.
برای شمارش order ها دستورهای زیر وارد کنید.
این تابع از نوع int می باشد و یک عدد نمایش می دهد. در دستورهای بالا یک متغیر بسازید و مقدار صفر بدهید. یک به یک بررسی می کند چنانچه شماره مجیک پوزیشن های که باز بوده با شماره مجیک ورودی برابر باشد به متغیر num یکی اضاف کند و در نهایت نتیجه متغیر را به خروجی نمایش دهد.
کدهای بستن پوزیشن:
کدهای بستن پوزیشن ها، قبل از بستن پوزیشن ها قید می شود.
این گونه عمل می کند که کندل روزانه بررسی می شود چنانچه کندل روزانه نزولی می باشد و پوزیشن buy با شماره 1111 بوده آن ها را ببندد. اگر کندل روزانه صعودی بوده و پوزیشن sell وجود داشته پوزیشن های با شماره مجیک 2222 را close کند.
کد نویسی تابع close:
عملکرد آن به این صورت است که اگر شماره مجیک پوزیشن، با شماره مجیک ورودی برابر باشد ، پوزیشن را ببندد. در درس های گذشته شیوه و ورودی های بستن پوزیشن بیان گردید.
پایان کدنوبسی ها compile را کلیک و نباید اخطار نمایش دهد.
وارد برنامه شوید. نام کلاس را انتخاب و start را کلیک کنید.
همانگونه که مشاهده می کنید پوزیشن ها بسته شده اند.
گزارش برنامه و مشاهده درصد سود. در پایان می توانید مقدار پوزیشن های روانه را بررسی کنید و از صحت عملکرد برنامه اطمینان حاصل کنید.
منبع : کتاب آموزش زبان MQL (دوره مقدماتی)
مدرس : استاد حسین احمدی
پاسخها