توابع پوزیشن گیری و مدیریت پوزیشن (بخش دوم)
درس چهارم
OrderModify :
برای Modify کردن stoploss و Takeprofit مورد استفاده قرار می گیرد . یا به تعبیر دیگر مدیریت پوزیشن هاست. که در ادامه با آرگمان های تابع آشنا خواهید شد :
ticket : این پارامتر مقدار ticket number می باشد .
Price : این پارامتر مربوط به قیمت باز شدن پوزیشن می باشد. اگر پوزیشن از نوع pending باشد و بخواهیم قیمت باز شدن را تغییر دهیم اینجا قیمت جدید را وارد می کنیم
Stoploss: این پارامتر بر حسب قیمت می باشد و مقدار Stoploss را تعیین می کند.
Takeprofit : این پارامتر بر حسب قیمت می باشد و مقدار Takeprofit را تعیین می کند.
Expiration : این پارامتر مربوط به تاریخ انقضای order های pending می باشد.
arrow_color : این پارامتر رنگ فلشی است که پس از باز کردن پوزیشن روی چارت قرار می گیرد.
لازم است بدانید چنانچه مقداری را نخواهید تغییر دهید باید مقدار قبلی آن را بنویسید. یکی از راه این است که زمان باز کردن پوزیشن جدید، مقدارها را در یک متغیر یا چند متغیر بنویسید. راه دیگر آن انتخاب یک پوزیشن می باشد و هرآنچه از آن مدنظر دارید را تغییر دهید. به عنوان مثال در فضای متاتریدر زیر سه پوزیشن باز شده که می توان یکی از آن ها را انتخاب نمود.
همچنین می توانید از پوزیشن های باز یا پوزیشن های در history استفاده کنید.
برای انتخاب پوزیشن، شماره تیکت می باشد. برخی مواقع این شماره در دسترس نمی باشد. البته باید بدانید که شماره پوز از بالاترین ردیف از صفر شروع شده و به ترتیب پایین آمدن پوزیشن ها 1 و 2 و 3 می باشد.
برای history نیز به همین ترتیب شماره گذاری می شوند. اینک به شیوه انتخاب پوزیشن چه با شماره پوز چه با شماره تیکت را توجه نمایید. برای انتخاب پوزیشن از تابع OrderSelect استفاده کنید.
تابع OrderSelect :
قبل از استفاده از تابع OrderOpenPrice حتما باید order ما select شود که با استفاده از تابع OrderSelect این کار را انجام می دهیم و این تابع یکی از پر کاربرد ترین توابع در اکسپرت می باشد که در ادامه با آرگمان های تابع آشنا خواهید شد :
ticket/pos: برای نوشتن شماره پوریشن یا شماره پوز
select: این پارامترمی تواند دو مقدار SELECT_BY_POS و یا SELECT_BY_TICKET باشد و بدین منظور استفاده می شود که مشخص کنیم مقداری که در پارامتر اول وارد کرده ایم اندیس پوزیشن است و یا ticket number می باشد. چنانچه عدد ticket را بنویسید به تبع باید SELECT_BY_TICKET را وارد نمایید و اگر pos را وارد کردید باید SELECT_BY_POS را وارد کنید. به عنوان مثال:
(OrderSelect(1,SELECT_BY_POS,MODE_TRADES
(int pool=MODE_TRADES (MODE_TRADES (default)/MODE_HISTORY
در ورودی سوم چنانچه ticket نوشته باشید ورودی سوم نیست. و اگر pos را نوشته باشید و وردی SELECT_BY_POS را انتخاب کرده باشید رد وردی سوم، 2 انتخاب خواهی داشت: یا از پوزیشن های باز(MODE_TRADES) یا از پوزیشن های هیستوری(MODE_HISTORY) استفاده نمایید. در صورت وارد نکردن وردی سوم به طور پیش فرض MODE_TRADES انتخاب خواهد شد.
به معرفی دو تابع دیگر می پردازیم:
OrdersTotal: این پوزیشن تعداد پوزیشنهای باز و پیندینگ را می دهد ، ورودی ندارد و خروجی آن از نوع int می باشد. در حقیقت این تابع هر آنچه که درون سربرگ ترید می باشد را نمایش می دهد.
OrdersHistoryTotal: این پوزیشن تعداد پوزیشن های بسته شده را نمایش می دهد، ، ورودی ندارد و خروجی آن از نوع int می باشد.
پاره ای از توابع دیگر نیز وجود دارند که بعد از تابع ORDER SELECT فراخوانی می شوند که تمامی آنها بدون ورودی هستند برای آشنایی بیشتر به جدول زیر دقت کنید.
❓ مسئله شماره 8:
اکسپرتی بنویسید که جفت ارز اولین پوزیشن باز را در دستور کامنت چاپ نماید.
برای حل تمرین بالا باید ابتدا ، اولین پوزیشن که شماره پوز آن صفر می باشد را توسط تابع order select انتخاب کنید سپس با دستور comment تابع OrderSymbol را چاپ کنید. به عنوان مثال:
می توانید بجای OrderSymbol مشخصات دیگری را کامنت کنید.
❓ مسئله شماره 9:
اکسپرتی بنویسید که پوزیشن های بای موجود در حساب را ببندد.
در پایان دستورات compile را کلیک کنید و نباید اخطاری نمایش شود.
همانگونه که مشاهده می کنید 6 پوزیشن باز قابل مشاهده هستند که با اجرای کلاس تمام نوع buy باید بسته شوند.
نام کلاس را به داخل فضای برنامه درگ کنید تا کادر Export-class5 ظاهر شود ok را انتخاب نمایید.
پوزیشن ها با اجرای دستور بسته شدند. یکی از اشتباهات رایج در کد نویسی مساوی کردن i با 0 می باشد. دلیل عملی خطابودن آن را در تصاویر زیر مشاهده کنید.
سه پوزیشن جدید تعریف کنید.
اگر بخواهید کدی بنویسید و بگوییم نصف پوزیشن ها را ببندد در این حالت پوزیشن به آخر می رود و در نتیجه شماره پوز پوزیشن تغییر خواهد کرد.
مشاهده می کنید شماره پوز صفر بعد از بستن به شماره پوز 2 تغییر کرد. بنابراین بهترین روش این است که از آخر به صفر شمرده شود.
منبع : کتاب آموزش زبان MQL (دوره مقدماتی)
مدرس : استاد حسین احمدی
پاسخها
سلام من یک سوال در مورد دستور ORDER_SEND دارم.
وقتی این دستور را اجرا می کنم هیچ اتفاقی نمی افتد و پوزیشنی هم باز نمی شود.
لطفا راهنمایی کنید.
ممنون
بستگی داره کجای کد استفاده میکنید
همچنین اگر انجام نشه باید در سربگر اکسپرت به شما یک خطا نمایش بده
ویدیو مربوط به این درس رو بیبینید به احتمال زیاد متوجه مشکلتون میشید