У меня есть Ticket ордера, как мне узнать открыт он или закрыт?

 
У меня есть тикет. Как мне узнать открыт от или закрыт? Как это сделать не перебирая ордера в истории или в рынке?
 

Откуда-же берутся такие?…


У открытого ордера время закрытия равно нулю…

Если вопрос о MQL5 то определяется также по времени снятия ордера
OrderCloseTime - Торговые функции - Справочник MQL4
OrderCloseTime - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderCloseTime - Торговые функции - Справочник MQL4
 
Alexey Viktorov:

Откуда-же берутся такие?…


У открытого ордера время закрытия равно нулю…

Если вопрос о MQL5 то определяется также по времени снятия ордера

Откуда-же берутся такие?… Ордера, или о чём речь?

В чётверке я так и делал, а в пятёрке как? Может вариант проще есть? По времени снятия как-то заумно. Мне бы проще.

 
Evgeniy Zhdan:
Выбор ордера по тикету в рынке. Если в рынке нет, значит в истории он (закрыт).

Тут может я затупил, вроде так и пробовал делать.

         if(!OrderSelect(DealTicketDn))
            DealTicketDn=0;
DealTicketDn

Ticket ордера который проверяем. 

Спасибо что помогаете.

 
Evgeniy Zhdan:

Вы точно ордер хотите проверить? Или сделку/позицию?

Если не секрет, какая разница? Что-то я читал, но никак въехать не могу.

Как делаю.

   SymbolInfoTick(_Symbol, latest_price);
   mrequest.action = TRADE_ACTION_DEAL;            // немедленное исполнение
   mrequest.type_filling = ORDER_FILLING_FOK;      // тип исполнения ордера - все или ничего
   mrequest.symbol = _Symbol;                      // символ
   mrequest.volume =  0.01;                        // NormalizeDouble((AccountInfoDouble(ACCOUNT_BALANCE)*Lot)/StopLoss,2);
   mrequest.magic = 20;                            // Magic Number
   mrequest.deviation = 25;                        // проскальзывание от текущей цены
   mrequest.type = ORDER_TYPE_BUY;                                           // ордер Вверх
   mrequest.price = NormalizeDouble(latest_price.ask, _Digits);              // последняя цена ask
   mrequest.sl = NormalizeDouble(latest_price.ask - Stop * _Point, _Digits); // Stop Loss
   mrequest.tp = NormalizeDouble(latest_price.ask + Take * _Point, _Digits); // Take Profit
   mrequest.volume =  NormalizeDouble(AccountInfoDouble(ACCOUNT_BALANCE) * Persent/Stop, 2);         
   if(!OrderSend(mrequest,mresult))
               Print("Order Send Error");
   DealTicketDn = mresult.deal;
   Print("DealTicketDn ",DealTicketDn);

Насколько понимаю deal это у нас то что нужно. Или нет?

В документации написано, что 

   mrequest.action = TRADE_ACTION_DEAL;            // немедленное исполнение

немедленное исполение.

 

Да вообще что-то странное:

            if(!OrderSend(mrequest,mresult))
               Print("Order Send Error");
            DealTicketUp = mresult.deal;
            Print("DealTicketUp ",DealTicketUp," ",mresult.order," ",mresult.price);
            if(OrderSelect(DealTicketUp))
               Print("Select True ",mresult.order);
            else
               Print("Select False ",mresult.order);

Выдаёт такое сообщение

1

В этом месте бы уже жить и радоваться, а он выделывается не по детски.

Что может быть не так?

 
ROMAN KIVERIN:

Откуда-же берутся такие?… Ордера, или о чём речь?

В чётверке я так и делал, а в пятёрке как? Может вариант проще есть? По времени снятия как-то заумно. Мне бы проще.

На вас лично никакого намёка.

Вам в первую очередь обязательно надо освоить терминологию МТ5. Понять и применять выражения в соответствии с этой терминологией. Ордер - это ордер. Сделка - это сделка. Позиция - это позиция. Что есть что объяснять не буду. Всё доступно описано в документации.

Сначала я подумал, что вопрос о mql4 и ответил соответственно… Но потом обратил внимание на раздел где размещён вопрос, засомневался и дал другой ответ.

Так вот ордер в MT5 может быть только отложенный или в истории. В истории может быть исполненный, отменённый. Обо всём этом написано в документации по ссылке в моём предыдущем сообщении. Если есть тикет ордера, выберите его функцией OrderSelect() и проверьте его свойство… Что может быть проще?

 
Evgeniy Zhdan:
Выбор ордера по тикету в рынке. Если в рынке нет, значит в истории он (закрыт).

В mql4 выбор ордера по тикету производится НЕЗАВИСИМО от того, в истории он или в рынке.

 
Evgeniy Zhdan:

Ошибка.

OrderSelect

MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров,
MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров.


Да хоть несколько строк ещё прочтите…

Примечание

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

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

 
Evgeniy Zhdan:

Строите из себя, а элементарного не знаете

Не хотел я вас так… Но вы сами напросились. Именно вас я имел ввиду спрашивая откуда берутся такие… Такие подсказчики. Куда лезете с такими знаниями¿¿¿

 
Alexey Viktorov:

Не хотел я вас так… Но вы сами напросились. Именно вас я имел ввиду спрашивая откуда берутся такие… Такие подсказчики. Куда лезете с такими знаниями¿¿¿

А ну да, не дочитал. Ну значит так. По времени закрытия значит выбирать.

Как будто ты никогда не ошибаешься.