Как в языке MQL4 определить тикет ордера, который возникает в результате закрытия встречных ордеров функцией OrderCloseBy() ? - страница 5

 
Andrei:
А что там с поиском тикета из комментария? Может в курсе дела как добыть?

После закрытия позиции по OrderCloseBy() комментарии ордеров могут быть только 2-х видов:  to #тикет   и   from #тикет

комментарий с префиксом to # встречается только в закрытых, а записанный далее тикет - это тикет позиции оставшейся в рынке после закрытия по OrderCloseBy() ,

комментарий с префиксом from # может быть как в открытых так ив закрытых.Если  префикс from # находится в закрытых, то это последняя часть позиции, и в рынке от неё ничего не осталось.

Вот функция коротая "вытягивает" тикет из комментария ордера, если он содержит префиксы to # или from # (сами выберете какой Вам нужен). В параметры передается тикет который можно получить перебором открытых либо закрытых позиций. Если тикет не удалось вытащить из комментария функция вернёт 0.

int GetTicket(int ticket)
{
   int res = 0;
   if(OrderSelect(ticket, SELECT_BY_TICKET))
   {
      string com = OrderComment();
      if(StringFind(com, "from #") != -1) // если ищем "from #"
      //if(StringFind(com, "to #") != -1) // если ищем "to #"
      { 
         res = StrToInteger(StringSubstr(com, 6)); // если ищем "from #"
         //res = StrToInteger(StringSubstr(com, 4)); // если ищем "to #"
      }
   }
   return(res);
}
 
Sergey Kolemanov:

После закрытия позиции по OrderCloseBy() комментарии ордеров могут быть только 2-х видов:  to #тикет   и   from #тикет

Это какая-то не задокументированная опция генерации текста в комментарии?

 
Andrei:

Это какая-то не задокументированная опция генерации текста в комментарии?

Диллинг/брокер туда может вписывать комментарии.

 
Andrei:

Это какая-то не задокументированная опция генерации текста в комментарии?


Ну да, в справке этого нет, но Вам ничто не мешает проверить это на практике, закрыв например позицию вручную по OrderCloseBy(). ))

 
Sergey Kolemanov:

Ну да, в справке этого нет, но Вам ничто не мешает проверить это на практике, закрыв например позицию вручную по OrderCloseBy(). ))

Так если это от брокера зависит, впишет или нет, то это проблематично...
 
Andrei:
Так если это от брокера зависит, впишет или нет, то это проблематично...

так создайте свой комент когда выставляете ордер и потом по нему  и ищите ... 

 
elmucon:

так создайте свой комент когда выставляете ордер и потом по нему  и ищите ... 

Это же новый ордер, он сам собой генерируется... Как в него вписать?
 
Andrei:
Это же новый ордер, он сам собой генерируется... Как в него вписать?

ну значит при его появлении проведите его модификацию ... 

 
Andrei:
Так если это от брокера зависит, впишет или нет, то это проблематично...

Впишет однозначно.На мой взгляд это самый безотказный вариант узнать тикет в данной ситуации.

 
Sergey Kolemanov:

После закрытия позиции по OrderCloseBy() комментарии ордеров могут быть только 2-х видов:  to #тикет   и   from #тикет

комментарий с префиксом to # встречается только в закрытых, а записанный далее тикет - это тикет позиции оставшейся в рынке после закрытия по OrderCloseBy() ,

комментарий с префиксом from # может быть как в открытых так ив закрытых.Если  префикс from # находится в закрытых, то это последняя часть позиции, и в рынке от неё ничего не осталось.

Вот функция коротая "вытягивает" тикет из комментария ордера, если он содержит префиксы to # или from # (сами выберете какой Вам нужен). В параметры передается тикет который можно

получить перебором открытых либо закрытых позиций. Если тикет не удалось вытащить из комментария функция вернёт 0.

Я-бы не сказал, что это однозначно правильный вариант. Каждый ДЦ по-своему редактирует комментарии ордера. Одни дописывают свою информацию к пользовательскому комментарию, а другие затирают то что было.

Следовательно если открывая ордер назначается комментарий, и ДЦ не затирает этот комментарий, то позиция с которой начинается тикет будет плавающей. Зависящей от длины пользовательского комментария.

Если-же попытаться читать тикет с конца комментария, то тоже не получится в связи с тем, что у разных ДЦ разная разрядность нумерации ордеров...

На мой взгляд лучше читать тикет с позиции

int poz = StringFind(com, "from #")+6;

Соответственно с комментарием to #

int poz = StringFind(com, "to #")+4;
Причина обращения: