ORDER_POSITION_ID - страница 2

 
Нужно больше контекста (кода). Откуда берется этот ticket, и чему он равен перед исполнением данного кода?
 
Rosh:

Может потому, что ORDER_POSITION_ID запрашивается сразу же после исполнения ордера, когда торговый сервер еще не успел прислать информацию о совершенной транзакции.

Почитайте статью Торговые события в MetaTrader 5


Я привел кусок кода в качестве примера, а на самом деле функция получения ID выглядит так:

//+------------------------------------------------------------------+
//| Get order position ID function                                   |
//+------------------------------------------------------------------+
long GetOrderPosId( const ulong ticket )
{
  long pos_id = 0;
  
  if ( OrderSelect( ticket ) )
  {
    string pos_symbol = OrderGetString( ORDER_SYMBOL );
    
    if ( PositionSelect( pos_symbol ) )
    {
      return( long( OrderGetInteger( ORDER_POSITION_ID ) ) );
    }
  }
  
  return( pos_id );
}

 P/S Rosh, пожалуйста, не отсылайте меня читать статьи.

Поверьте, я очень много перечитал, а то что я задаю много

вопросов, это от того что в документации много неоднозначностей. 

 
marketeer:
Нужно больше контекста (кода). Откуда берется этот ticket, и чему он равен перед исполнением данного кода?

Если ордер выбран, то, как Вы думаете, какой был тикет?

А тикет взялся из интернета, как ответ о принятии ордера торговым сервером. 

 
Mikalas:

Если ордер выбран, то, как Вы думаете, какой был тикет?

А тикет взялся из интернета, как ответ о принятии ордера торговым сервером. 

А Вы как думаете, откуда нам известно, что и откуда у Вас берется? Вы по-прежнему показываете код, который ничего не говорит о содержимом ticket, о том как выполнялся запрос, и Вы не пользуетесь, например, отладочным принтом или другими средствами, чтобы убедиться что в переменной не левое число (для начала, потом  request.action чему равен?). Косяк может затесаться в любом месте.
 
marketeer:
А Вы как думаете, откуда нам известно, что и откуда у Вас берется? Вы по-прежнему показываете код, который ничего не говорит о содержимом ticket, о том как выполнялся запрос, и Вы не пользуетесь, например, отладочным принтом или другими средствами, чтобы убедиться что в переменной не левое число (для начала, потом  request.action чему равен?). Косяк может затесаться в любом месте.
Спасибо, мне понятна ваша точка зрения.
 
Mikalas:
Спасибо, мне понятна ваша точка зрения.
Всегда пожалуйста. А мне ваша точка не понятна. Вам уже намекали на асинхронность выполнения запроса и получения тикета. Пока вы не покажете код, как и когда вы это хозяйство обрабатываете, вопрос получается обращенным к телепатам.
 
marketeer:
Всегда пожалуйста. А мне ваша точка не понятна. Вам уже намекали на асинхронность выполнения запроса и получения тикета. Пока вы не покажете код, как и когда вы это хозяйство обрабатываете, вопрос получается обращенным к телепатам.

Поясняю.

Из кода, приведённого выше всё очевидно.

И не ВАЖНО какой тикет( ордер выставляется один). Посмотрите внималельно( выбирается ордер по тикету и позиция по символу ордера, открытая частично исполненым этим ордером )

Кроме принт, есть ещё пошаговое выполнение программы и

когда я попадаю в

return( long( OrderGetInteger( ORDER_POSITION_ID ) ) );

 

 Возвращается "0".

Ворос не состоит в том, что умею или не умею я программировать на MQL5 (ровно как и трассировать программу), а

в том, что о документации написано одно, а на деле получается другое (сервисдеск как всегда молчит). 

Или я не правильно истолковываю описание  данное в документации на ORDER_POSITION_ID

( прочтите моё 3 сообщение ) 

 
Mikalas:

Поясняю.

Из кода, приведённого выше всё очевидно.

И не ВАЖНО какой тикет( ордер выставляется один). Посмотрите внималельно( выбирается ордер по тикету и позиция по символу ордера, открытая частично исполненым этим ордером )

Кроме принт, есть ещё пошаговое выполнение программы и

когда я попадаю в

 

 Возвращается "0".

Ворос не состоит в том, что умею или не умею я программировать на MQL5 (ровно как и трассировать программу), а

в том, что о документации написано одно, а на деле получается другое (сервисдеск как всегда молчит). 

Или я не правильно истолковываю описание  данное в документации на ORDER_POSITION_ID

( прочтите моё 3 сообщение ) 

Опять 25. Это ВАЖНО, какой ордер и как вы ставите. Может у вас там, например (гипотетически, потому что все по-прежнему тайна за семью печтаями), отложенник, то какой тогда может быть ID позиции?

Из приведенного кода нифига не ясно.

 
marketeer:

Опять 25. Это ВАЖНО, какой ордер и как вы ставите. Может у вас там, например (гипотетически, потому что все по-прежнему тайна за семью печтаями), отложенник, то какой тогда может быть ID позиции?

Из приведенного кода нифига не ясно.

Извините, но мы с вами говорим на "разных" языках, или вы читаете через строчку.

Отложенный ордер ОДИН, позиция открыта частично исполненым этим ордером, который ещё действует,

при трассировке программы я попадаю в  return( long( OrderGetInteger( ORDER_POSITION_ID ) ) );

 
Mikalas:

Извините, но мы с вами говорим на "разных" языках, или вы читаете через строчку.

Отложенный ордер ОДИН, позиция открыта частично исполненым этим ордером, который ещё действует,

при трассировке программы я попадаю в  return( long( OrderGetInteger( ORDER_POSITION_ID ) ) );

Вы же наблюдаете этот частично исполненный ордер. Где он? В списке торговых или в исполненных?