OrderComment() выдает неверные данные.

 

Здравствуйте. Помогите решить проблему с OrderComment(). Вместо нужной мне информации на первом скриншоте в поле Комментарий, Выдаёт 1 как на втором скриншоте. Вот кусок кода:

ticket=OrderSend(mvp[k],OP_SELLLIMIT,stavka,iHigh(mvp[k],0,1),slippage,0,0,IntegerToString(expiration),magic,0,Red);

           if(ticket<=0) Print("Ошибка продажи"); else

             {

              if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

                {

                 Print(OrderComment());

                 OrderPrint();

                 if(OrderDelete(ticket,Red)) Print("Отложенный Ордер на продажу закрыт");       

                 else Print("Ошибка закрытия Отложенного ордера на продажу");       

                }

              

             }

Файлы:
vopros.zip  29 kb
 
Vyacheslav Syomin:

Здравствуйте. Помогите решить проблему с OrderComment(). Вместо нужной мне информации на первом скриншоте в поле Комментарий, Выдаёт 1 как на втором скриншоте. Вот кусок кода:



По коду так:

  1. Устанавливается ордер sell limit. По всей видимости expiration равно 1. Значит и комментарий ордера будет 1.
  2. Выбирается ордер, который был только что установлен.
  3. Распечатывается содержимое комментария. Там ведь 1.
Что именно не так? Какую информацию Вы ожидаете получить?
 
Вам наверное не видно. Во вложении вордовский файл, там можно увеличить скриншоты. На первом скриншшоте MT4 в поле комментарий показывает другую инфу: A 01.31.08:14:14 85/20...... Как ее можно получить программно?
 
Vyacheslav Syomin:
Вам наверное не видно. Во вложении вордовский файл, там можно увеличить скриншоты. На первом скриншшоте MT4 в поле комментарий показывает другую инфу: A 01.31.08:14:14 85/20...... Как ее можно получить программно?

Вы запросили содержимое комментария сразу же после открытия ордера. И оно будет таким, который Вы сами установили. Какое значение expiration? Думаю, что 1.

После того, как прошло некоторое время после установки ордера, Вы не запрашивали значение комментария. Во всяком случае такой код Вы не показали. А ведь комментарий мог уже быть изменен со стороны сервера.

Чтобы запросить комментарий существующего ордера, проделайте то же самое, что и в приведенном коде, но отдельно, без операции открытия: выберите ордер (по тикету или по индексу в списке) и распечатайте его комментарий.

Например, по списку ордеров:

for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;
 
   Print("#", OrderTicket(), ", comment: ", OrderComment());
}
Документация по MQL5: Торговые функции / OrderSelect
Документация по MQL5: Торговые функции / OrderSelect
  • www.mql5.com
Выбирает ордер для дальнейшей работы с ним. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в...
 

OrderSend(mvp[k],OP_SELLLIMIT,stavka,iHigh(mvp[k],0,1),slippage,0,0,IntegerToString(expiration),magic,0,Red);

в момент создания приказа Вы не сможете записать в комментарий номер тикета

т.к. ордер еще не открылся и тикет пока не известен, а Вы пишете туда уж точно не номер тикета

поэтому тут чуток шаманим:

  if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

                {

                 //Print(OrderTicket());

                 //OrderPrint();

                 if(OrderDelete(ticket,Red)) Print("Отложенный ордер на продажу закрыт, № "+IntegerToString(OrderTicket()));       

                 else Print("Ошибка закрытия Отложенного ордера на продажу, № "+IntegerToString(OrderTicket()));      

                }

 
Спасибо огромное! Без Вас застрял просто. Началось всё с того, что на БО перед открытием ордера захотел узнать процент выплаты. В справочнике такой функции не нашел, поэтому придумал периодически ставить запредельный селллимит, из комментария узнавать выплату и закрывать. Можете подсказать другой способ?