Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
linewarsxxx
69
linewarsxxx  

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

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
20747
Alexey Viktorov  

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

Примечание

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

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


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

Dmitry Fedoseev
47919
Dmitry Fedoseev  

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

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

Ihor Herasko
16480
Ihor Herasko  
linewarsxxx:


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

  

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