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

 

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

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 игнорируется?

 

   

 

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

Примечание

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

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


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

 

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

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

 
linewarsxxx:


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

  

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