جلسه شانزدهم – توابع OrderModify و OrderSelect

در جلسه شانزدهم از آموزش دوره اسکریپت نویسی،  با تابع ()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 : این پارامتر می تواند دو مقدار داشته باشد:

  1. شامل اندیس پوزیشن مورد نظر باشد
  2. شامل مقدار 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  اندیس یکسان داشته باشد.

دیدگاهتان را بنویسید

You have to agree to the comment policy.