در جلسه شانزدهم از آموزش دوره اسکریپت نویسی، با تابع ()OrderModify و ()OrderSelect در زبان برنامه نویسی MQL آشنا خواهید شد.
در جلسه قبل اشاره شد که برخی بروکر ها به تریدر اجازه نمی دهند که به محض اینکه پوزیشن باز شد مقدار stoploss و Takeprofit را تغییر دهد، در این بروکر ها که اصطلاحا به آنها بروکرهای ECN گفته می شود ابتدا باید با تابع OrderSend پوزیشن را باز کنیم و پارمترهای مربوط به stoploss و Takeprofit را صفر قرار دهیم و پس از اینکه پوزیشن با موفقیت باز شد با استفاده از تابع OrderModify مقدار stoploss و Takeprofit را تغییر بدهیم .
()OrderModify : برای Modify کردن stoploss و Takeprofit مورد استفاده قرار می گیرد . که در ادامه با آرگمان های تابع آشنا خواهید شد :
bool OrderModify( int ticket, // ticket double price, // price double stoploss, // stop loss double Takeprofit, // take profit datetime expiration, // expiration color arrow_color // color );
ticket : این پارامتر مقدار ticket number می باشد .
Price : این پارامتر مربوط به قیمت باز شدن پوزیشن می باشد. اگر پوزیشن از نوع pending باشد و بخواهیم قیمت باز شدن را تغییر دهیم اینجا قیمت جدید را وارد می کنیم و اگر پوزیشن از نوع MarketOrder باشد قیمت باز شدن قبل را وارد می کنیم .
برای بدست آوردن قیمت باز شدن order از تابع ()OrderOpenPrice کمک می گیریم. این تابع قیمت باز شدن order ای که Select شده است را بر می گرداند. قبل از استفاده از این تابع حتما باید با کمک تابع ()OrderSelect آن order مورد نظر select شده باشد.
Stoploss : این پارامتر بر حسب قیمت می باشد و مقدار Stoploss را تعیین می کند.
Takeprofit : این پارامتر بر حسب قیمت می باشد و مقدار Takeprofit را تعیین می کند.
Expiration : این پارامتر مربوط به تاریخ انقضای order های pending می باشد. اگر پوزیشن از نوع Market بود اینجا عدد صفر قرار می دهیم.
arrow_color : این پارامتر رنگ فلشی است که پس از باز کردن پوزیشن روی چارت قرار می گیرد.
int ticket = OrderSend(_Symbol,OP_BUY,0.10,Ask,30,0,0,”buy Script” ,12345,0,clrGreen); OrderSelect(ticket , SELECT_BY_TICKET); OrderModify(ticket , OrderOpenPrice(),OrderOpenPrice() -100 * Point() , OrderOpenPrice() +200 *Point() , 0 ,clrBlue);
تابع OrderSelect : قبل از استفاده از تابع OrderOpenPrice حتما باید order ما select شود که با استفاده از تابع OrderSelect این کار را انجام می دهیم و این تابع یکی از پر کاربرد ترین توابع در اکسپرت می باشد که در ادامه با آرگمان های تابع آشنا خواهید شد :
bool OrderSelect( int index, // index or order ticket int select, // flag int pool=MODE_TRADES // mode );
index : این پارامتر می تواند دو مقدار داشته باشد:
- شامل اندیس پوزیشن مورد نظر باشد
- شامل مقدار ticket number پوزیشن مورد نظر باشد.
زمانی که در متاتریدر چند پوزیشن باز می کنیم، پوزیشن ها به ترتیب تاریخ لیست می شوند که اندیس آنها به ترتیب تاریخی که باز شده اند از صفر شماره گذاری می شود، یعنی اولین پوزیشن اندیس صفر دارد و الی آخر
Select : این پارامترمی تواند دو مقدار SELECT_BY_POS و یا SELECT_BY_TICKET باشد و بدین منظور استفاده می شود که مشخص کنیم مقداری که در پارامتر اول وارد کرده ایم اندیس پوزیشن است و یا ticket number می باشد.
Pool : اگر پوزیشن و یا order ای را بر حسب اندیس، select کردیم حتما باید این پارامتر را وارد کنیم. این پارامتر بدین منظور استفاده می شود که مشخص کنیم که order مورد نظر از پول ترید قرار است انتخاب بشود و یا از پول history ؟
Pool چیست : اگر به دو تب trade و Account History در متاتریدر دقت کنید مشاهده می کنید که order هایی در این دو تب قابل مشاهده هستند، در تب trade به ما order هایی نشان داده می شوند که از نوع market و یا pending هستند اما در تب Account History همه ی order هایی که close و یا cancel شده اند قابل مشاهده می باشند. پس ممکن است یک order در تب ترید با یک order دیگر از تب Account History اندیس یکسان داشته باشد.