Скачать MetaTrader 5

Помогите разобраться с командой OrderSelect

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Отслеживай хиты продаж в Маркете!
linewarsxxx
74
linewarsxxx 2016.09.08 19:09 

Привожу к примеру часть кода

int S_tik = 10000000001;      // к примеру 

if ( OrderSelect(S_tik,SELECT_BY_TICKET,MODE_TRADES)  )

 {

   // Ордер существует

  ...... // действие

  printf(OrderLots()); 

 }

else

 {

  // ордера не существут

 ...... // действие 

 } 

 

При выполнении данного кода, если у меня был ордер с тиком  S_tik = 10000000001, всегда получаю ответ что ордер существует, даже если ордер уже закрыт.

параметр MODE_TRADES - ордер выбирается среди открытых и отложенных ордеров 

Пример 

Существует ордер с тиком  S_tik = 10000000001, объемом - 5.90 

 printf(OrderLots())    =====  5.90

Частично закрыли ордер на 2.00, в истории закрытых ордеров ордер с тиком  S_tik = 10000000001, объемом - 2.00 

  printf(OrderLots())    =====  2.00

При выполнении данного кода при частичном закрытии или закрытии данного ордера я в ответе должен получать что ордера не существует, а мне в ответ что он есть

Такое ощущение что  что параметр MODE_TRADES игнорируется?

 

   

Alexey Viktorov
6708
Alexey Viktorov 2016.09.08 19:32  

Внимательно читай документацию. Там сказано что выбор ордера по тикету работает не зависимо от нахождения его в открытых или закрытых ордерах.

Примечание

Параметр pool игнорируется, если ордер выбирается по номеру тикета. Номер тикета является уникальным идентификатором ордера.

Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала.


когда закрываешь часть ордера, происходит полное закрытие его и открытие оставленной части по прежней цене, но уже с другим тикетом.

Dmitry Fedoseev
42877
Dmitry Fedoseev 2016.09.08 22:47  

По тикету выбираете, ордер существует, но в истории. Кроме того  OrderSelect()=false или true не имеет никакого отношения к существованию или не существованию ордера.

При выборе по тикету MODE_TRADES игнорируется. Об этом в справке должно быть.

Ihor Herasko
9025
Ihor Herasko 2016.09.09 06:29  
linewarsxxx:


Такое ощущение что  что параметр MODE_TRADES игнорируется?

  

Это не ощущение, это так и есть: при выборе по тикету третий параметр игнорируется. Чтобы проверить, в каком из списков находится ордер (в рабочих ордерах или в истории), достаточно обратиться к OrderCloseTime(). Если равно нулю, ордер в рабочем списке, если не равно - ордер в истории счета.
linewarsxxx
74
linewarsxxx 2016.09.09 16:05  
Всем спасибо что помогли разобраться
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий