توابع مدیریت حساب، نکات اکسپرت نویسی
درس پانزدهم
نمونه دیگری از پوزیشن گیری نیز وجود دارد: (پیشنهاد نویسنده می باشد)
استراتژی زیر در بسیاری از برنامه ها نتیجه مطلوب (سود بهتر) می دهد؛ زمانی که پوزیشن را تریلینگ استاپ می کنید و استاپ بعد از پوزیشن قرار می گیرد. اگر هنوز سیستم سیگنال بای یا سیگنال sell داد، یک سیگنال بای یا sell دیگری باز شود.
اگر پوزیشن های که باز شدند و تریلینگ استاپ آن ها به قدری جابه جا شد، برای Buy بعد از بازشدن پوزیشن، و برای sell زیر باز شدن پوزیشن ، یک پوزیشن جدید باز کند.
برای بررسی وضعیت مورینگ ها باید مورینگ صفر را چک و بررسی کنید.
اکسپرت جدیدی بسازید و نام گذاری کنید.
همه توابع درس گذشته را کپی کرده و در اینجا paste کنید. یکی از مباحث پوزیشن ها ، تریلینگ استاپ می باشد. این بخش را به کدهای قبلی اضافه کنید.
برای استفاده از تابع کافی است آن را صدا کرد. بهترین بخشی که می توان صدا تابع OnTick می باشد.
در دستور بالا این وضعیت چک و بررسی می شود که آیا مورینگ 12 بالای مورینگ 50 می باشد و شرایط پوزیشن وجود دارد؟ اگر وجود داشت یک پوزیشن بای دیگری قرار دهید.
همچنین برای sell برعکس آن اجرا می شود. بدین معنا که: مورینگ 12 زیر مورینگ 50 باشد یا قیمت آن کمتر باشد. سپس کندل شماره صفر را چک و بررسی کنید.
در ادامه تابع دیگری بنویسید.
تابع جدیدی بسازید. و چک کنید اگر مورینگ 12 کندل صفر آن، بزرگتر از مورینگ 50 کندل صفرش بود، خروجی Buy بدهد. برعکس آن برای sell اگر مورینگ 12 کوچک تر از مورینگ 50 بود در نتیجه sell خروجی بدهد. چانچه هیچ کدام نبود “no signal” را چاپ کند.
این تابع را بعد از تریلینگ استاپ چک کنید.
یک شرط if بنویسید. درون شرط قید کنید که اگر movNew مساوی مساوی بوده با buy و (اوردرها هم باید چک بشوند که حداقل یک اورد باز بشود چراکه اگر این کار انجام نشود پشت سرهم پوزیشن می گیرد، در حالی که در این جا فقط یک پوزیشن مدنظر است)
بنابراین دستور چک کردن اوردرها را بدهید اگر کمتر از 2 بوده، یک پوزیشن باز کند (شیوه کدنویسی آن را در تصویر فوق مشاهده می کنید.) همینگونه برای دستور sell نیز تعریف کنید. بهتر است میان کدها یک فاصله قرار دهید تا در مراجعه های بعدی دچار خطا نشوید.
جهت چک کردن تابع ریسک فریم ، تابع جدیدی نیز نیاز داریم.
ابتدا چک می کند اوردرتوتال بزرگتر از صفر باشد اگر چنین بود شرط های بعدی را اجرا می کند. در شرط سوم آمده که اگر اوردرتایپ مساوی با بای بود، و تابع OrderOpenPrice (مقدار باز شدن پوزیشن) کوچک تر از مقدار استاپ لاس بود Buy را در خروجی بدهد. برعکس این عملیات برای sell اجرا می شوند. بدین معنا اگر قیمت باز شدن پوزیشن بیشتر از مقدار استاپ لاس باشد.
اگر هیچکدام نبود “no position” را چاپ کند. چونکه تابع از نوع استرینگ می باشد حتما یک خروجی بدهد.
اکسپرت درس گذشته را وارد کنید.
stsrt بزنید.
همانگونه که می بینید 288 دلار سود داده است.
اکنون نام کلاس درس فعلی را وارد کنید که مدیریت جدید به آن اضافه شد و استارت بزنید.
مشاهده می کنید 426 دلار سود داشته که با اندکی مدیریت درست، حدودا 140 دلار تفاوت قیمت به وجود آمد.
بنابراین مدیریت معرفی شده در بسیاری از استراتژی ها نتیجه مطلوب می دهد.
همواره برنامه را بررسی کنید که کاری که از پوزیشن خواستید اجرا شده است. در صورت اجرا نشدن به دنبال پیدا کردن علت آن باشید. به عنوان مثال چرا پوزیشن باز با بسته نشده است.
دستور زیر در صورت باز نشدن پوزیشن اخطار را در بخش ژورنال نمایش می دهد.
زمانی که بدانید درخواستی فرستاده شد اما پوزیشن باز نشده اما علت Erorr آن را ندانید. دستور پرینت را وارد کنید همچنین از تابع GetLastErorr استفاده نمایید. عملکرد این تابع بدین شکل است که آخرین خطای برنامه را برمی گرداند. بنابراین دستور بالا به ما کمک می کند اگر پوزیشن باز نشود خطای آن را به راحتی از ژورنال متوجه بشوید.
چنانچه نام تابع را انتخاب کنید و F1 را فشار دهید وارد راهنمای برنامه خواهید شد.
از آنجایی که برنامه کد Erorr را نمایش می دهد لازم است در قسمت راهنما با انواع کدهای Erorr آشنایی حاصل شود.
در تصویر بالا با انواع خطاهای برنامه آشنا می شوید.
می توانید دستور اعلام خطا را برای تمام دستورها کپی و paste کنید. تا در صورت پیش آمدن خطا برنامه آن را اعلام کند.
دقت نمایید به دلیل به وجود آمدن چند خط دستوری حتما بلاکت ها را فراموش نکنید. در پایان هر کدنویسی complile را کلیک کنید.
Stsrt برنامه را کلیک کنید تا شروع به کار کند.
در اینجا برنامه چندین ا خطار را نمایش می دهد. به عنوان مثال کد خطا 131 نمایش داده شده، که می توان در قسمت کدنویسی مراجعه کرد و تعریف خطای نمایشی را مشاهده کنید.
در تعریف بالا خطای 131 را متعلق به valuom می داند که همان lot می باشد. پیام خطا بودن لات را می رساند. بنابراین راحت به خطای کار خود می رسید.
با تغییر lot می توانید خطای پیش آمده را اصلاح کنید. بنابراین با استفاده از تابع معرفی شده می توانید سریع تر به خطاهای پیش آمده دسترسی پیدا کنید.
مسئله دیگر مرتبط با property می باشید.
زمانی که نام کلاس را درون برنامه درگ کنید کادری ظاهر می شود که اطلاعات برنامه درون آن قید شده است. از جمله ورژن برنامه می باشد.
می توانید ورژن برنامه را تغییر دهیدو comoile را کلیک کنید.
با درگ کردن مجدد نام کلاس ، ورژن برنامه تغییر خواهد کرد.
همچنین اگر بر خط آبی رنگ کلیک کنید. وارد سایت تعریف شده خواهد شد.
می توانید اطلاعات را وارد یا ویرایش کنید.
همچنین می توانید دو خط دیگر نیز در property تعریف کنید. دقت نمایید که property به دلیل رشته بودن آنها، سمیکالن (نفطه ویرگول) لازم ندارند.
اطلاعات نمایش داده شد. که می توان اطلاعات دیگری نیز قرار داد.
یک سری توابعی وجود دارند که برای مدیریت حساب از آنها استفاده می شوند.
توابع مدیریت حساب:
دقت نمایید که هیچ کدام از توابع بالا ورودی ندارد.
AccountBalance، AccountEquity ، AccountFreeMargin ، AccountLeverage ، AccountMargin توابعی هستند که به مدیریت مالی اکسپرت شما کمک شایانی می کند. با این توابع می توانید اکسپرت با مدیریت مالی مدنظر را بنویسید.
همینطور AccountCompany ، AccountName ، AccountNumber می توانید برنامه تان را برای یک شخص خاص، یا یک شماره حساب خاص محدود کنید.
AccountServer برای اطلاعات از آن استفاده می شود.
منبع : کتاب آموزش زبان MQL (دوره مقدماتی)
مدرس : استاد حسین احمدی
پاسخها