ترلینگ استاپ و محاسبه نقاط پیوت – درس چهاردهم – کتاب آموزش زبان mql (دوره متوسطه)

ترلینگ استاپ و محاسبه نقاط پیوت

درس چهاردهم

 

❓مسئله شماره :17
اکسپرتی بنویسید که:

  • نقاط پیوت را محاسبه کند و در ابتدای هر روز دو بای استاپ در قیمت  R1و  R2و دو سل استاپ در قیمت  S1و  S2قرار دهد.
  • مقدار استاپ لاس و تیک پرافیت توسط کاربر قابل تعیین باشد.
  • اکسپرت داری تریلینگ استاپ با تعیین کاربر باشد.
  • پیندینگ های که در طول روز باز نشده اند در پایان روز بسته شوند.

محاسبات نقاط پیوت به شیوه زیر می باشد، سه مقدار high+low+close بگیرید:

;double high=iHigh(Symbol(),PERIOD_D1,1)
;double low=iLow(Symbol(),PERIOD_D1,1)
;double close=iClose(Symbol(),PERIOD_D1,1)

برای محاسبه نقاط پیوت باید سه مقدار بالا را جمع و تقسیم بر 3 کنید.

;p =(high+low+close)/3
;R1=2*plow
;R2=p+highlow
;S1=2*phigh
;S2=phigh+low
;R3=(2*p)+(high-(2*low))
;S3=(2*p)-((2* high)-low)

برای کدنویسی اکسپرت جدیدی بسازید و نام گذاری کنید.

ترلینگ استاپ

مقدار اولیه از نوع lot می باشد و مقدار اولیه به آن بدهید. برای تنوع در متغیرها از extern استفاده کنید. سومین متغیر برای تیک پارافیت ، چهارمین متغیر برای مجیک، پنجمین متغیر برای مجیک بای، ششمین برای مجیک سِل، و متغیر دیگر برای تریلینگ استاپ که کاربر توان روشن یا خاموش آن را داشته باشد. و آخرین متغیر برای مقدار تریلینگ استاپ می باشد.
Compile را کلیک کرده و خطای برای متغیرها وجود ندارد. سپس وارد تابع ontick ادامه دهید.

ترلینگ استاپ و محاسبه نقاط پیوت

ابتدا باید چک شود که کندل جاری روزانه باشد. بنابراین از iValume استفاده شود. سپس سمبل، برای تایم فریم ، پریود 1 را قرار دهید و شماره شیفت را صفر بگذارید.
پس اگر کندل روزانه فعلی کوچک تر یا مساوی 1 بود، نقاط پیوت را حساب کند. که نمونه آنها زیر مسئله قید شده اند. در نهایت R1 را کامنت کنید. و compile را کلیک کنید.
دقت نمایید که دستور if درون کامنت قرار بگیرند تا با هر حرکت بازار حساب شود و R1 را چاپ کند.
وارد برنامه شوید. نام کلاس را درون چارت درگ کنید.

قیمت بازار نمایش داده شد. به دلیل طولانی بودن عدد امکان خطا درون آن وجود دارد. قیمت اصلی بازار 5 عدد بعد از صفر می باشد باید مراحلی را انجام داد تا قیمت شبیه قیمت اصلی بشود.
برای این کار از تابع NormalIzeDouble استفاده می شود.

در دستور بالا بعد از R1 ، عدد 2 وارد شده ، به این معنا که دو عدد بعد از اعشار را نمایش دهد.

برای نمایش تعداد استاندارد اعشار از Digits استفاده کنید. تا قیمت نمایش داده مساوی با قیمت چارت باشد.

مساوی بودن تعداد اعشار را مشاهده می کنید.
اینک عملیات فوق را برای کل کدها اجرا کنید. (محاسبات نقاط پیوت)

جهت پوزیشن گیری کدنویسی زیر را دقت نمایید.

چونکه بناست برای چارت اجرا شود 4 بار دستور بالا را کپی کرده و تغییرات جزئی بر آن اجرا کنید.

ابتدا به تعداد 4 چارت مقدار دهی کنید. دومی را به جای R1 ، R2 را قرار دهید. متغیر سومی را sellStop کنید. و به جای R1 ، s1 را بنویسید. به دلیل sell بودن استاپ لاس مثبت و  تیک پارافیت آن منفی می شود. متغیر آخر نیز به جای R1 ، S2 را قرار دهید.  در پایان هر کدنویسی compile تا از خطا نبودن دستورات اطمینان حاصل کنید.
اینک وارد کدنویسی ترینگ استاپ شوید.

در یک تابع جداگانه کدها را بنویسید.

این تابع دو بلوک if دارد که هر دو درون if کادر آبی رنگ می باشند.

برای Buy ها:

If اول بعد از اینکه پوزیشن select شد، چک می کند اگر مجیک پوزیشن با مجیک بای، مساوی بوده مجددا چک می کند پوزیشن را، که اگر bid منهای قیمت باز شده آن پوزیشن اگر بزرگتر از ترینگ استاپ بود در پوینت ضرب می کند. چنانچه بزرگتر بوده استاپ لاس را چک و بررسی می کند . که آیا استاپ لاس کوچک تر از استاپ لاس جدید است یا خیر .

  • استاپ لاس جدید به معنای : Bid-TrailingStop*Point

در پایان پوزیشن را مودی فای کند. و استاپ لاس را تغییر دهد.
برای sell نیز همان مراحل انجام می شوند. (کادر سبز رنگ را دقت کنید.)
چنانچه بخواهید از تریلینگ استاپ استفاده کنید باید در تابع ontick و خارج از شرط if بنویسید. چرا که شرط if برای زمانی است که کندل روزانه به تازگی شروع به کار کرده باشد. اما در این قصد دارید تریلینگ استاپ در طول روز انجام بشود.

تابع پاک کردن پیندینگ ها:

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

راه دیگری که وجود دارد استفاده از روش تاریخ انقضاء می باشد که با تابع TimeCurrent صورت می گیرد. با این تابع می توان زمان فعلی سرور را به دست آورد. (منظور از فعلی زمانیست که تابع فراخوانی می شود)
کافی زمان TimeCurrent را به علاوه یک روز کنید. با این عملیات خود به خود پاک خواهد شد.

با وارد کردن عدد 86400 ثانیه (معادل یک روز) خود به خود یک روز بعد تمام اوردرها پاک خواهند شد. (به شرطی که باز نشوند یا به بای یا سِل تبدیل نشده باشند) وارد برنامه شوید.

گرافیک را مشاهده کنید، خط رو به صعودی است به معنای حرکت خوب می باشد.

با توجه به کادر قرمز رنگ در اینجا سِل باز شده و در کادر سبز رنگ تمام شده است. یعنی به تاریخ انقضاء رسید و پوزیشن بسته شد.

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

مودی فای در اینجا همان استاپ لاس می باشد. همچنین می توانید قیمت ها را نیز بررسی کنید.

در تصویر بالا بعد از باز شدن sell مودی فای شده و t/p خورده است.

در پایان ژورنال را نیز بررسی کنید اخطاری نمایش نداده باشد.
بهتر است برای تاریخ انقضاء از تابع TimeCurrent استفاده کنید و عملیات را به سرور نسپارید.

 

 

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

 

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

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

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

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

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

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

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

پاسخ‌ها

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