POSITION_TICKET != POSITION_IDENTIFIER

 

зная id позиции можно ли без перебора узнать тикет позиции?

long pos_id=HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
PositionSelectByTicket(pos_id);
long pos_ticket; // = ?
PositionSelectByTicket(pos_ticket);
 
Pavel Kolchin:

зная id позиции можно ли без перебора узнать тикет позиции?

Если позиция не результат переворота позиции в режиме неттинга, то можно.

POSITION_IDENTIFIER

Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция.

 

Идентификатор позиции указывается в каждом ордере (ORDER_POSITION_ID) и сделке (DEAL_POSITION_ID), которая ее открыла, изменила или закрыла. Используйте это свойство для поиска ордеров и сделок, связанных с позицией.

 

При развороте позиции в режиме неттинга (единой сделкой in/out) идентификатор позиции POSITION_IDENTIFIER не изменяется. Однако при этом POSITION_TICKET изменяется на тикет ордера, в результате которого произошел разворот. В режиме хеджинга разворот позиции не предусмотрен.

long

 
Alexey Viktorov:

Если позиция не результат переворота позиции в режиме неттинга, то можно.

POSITION_IDENTIFIER

Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция.

 

Идентификатор позиции указывается в каждом ордере (ORDER_POSITION_ID) и сделке (DEAL_POSITION_ID), которая ее открыла, изменила или закрыла. Используйте это свойство для поиска ордеров и сделок, связанных с позицией.

 

При развороте позиции в режиме неттинга (единой сделкой in/out) идентификатор позиции POSITION_IDENTIFIER не изменяется. Однако при этом POSITION_TICKET изменяется на тикет ордера, в результате которого произошел разворот. В режиме хеджинга разворот позиции не предусмотрен.

long

Выделенное - ошибка.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "В MetaTrader 5 добавлена хеджинговая система учета позиций"

fxsaber, 2018.01.17 18:45

Хронологически

  1. Отложенный ордер сработал частично - открылась позиция с Position_ID = Order_Ticket.
  2. Закрыли позицию руками.
  3. Остаток ордера исполнился - открылась позиция с Position_ID != Order_Ticket.

Чему будет равен итоговый ORDER_POSITION_ID и как, соответственно, отработает HistorySelectByPosition - еще тот вопрос.

Очевидно, что у одной (из двух) сделки открытия в ее ордере DEAL_ORDER будет DEAL_POSITION_ID != ORDER_POSITION_ID.

Так что на HistorySelectByPosition даже на Хедже закладываться точно не стоит.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "В MetaTrader 5 добавлена хеджинговая система учета позиций"

fxsaber, 2018.01.25 10:14

  1. Показан пример торговой ситуации, на которую Андрей обратил внимание при прочтении данной статьи.
  2. HistorySelectByPosition может не выбрать ордер, который был причиной сделки.
  3. Ордер и сделка, которую он породил, могут быть с разными ID.
Второй и третий пункт должны хоть где-то быть озвучены. Что и сделал.

Речь про анализ истории даже ручной торговли, про написание ТС не говорим.

Например, хотим понять, как проскользила сделка.
Поэтому и на хедже сабж случается. Разработчики не предусмотрели многие ситуации, чтобы можно было удобно их обрабатывать.
 
fxsaber:

Выделенное - ошибка.

Поэтому и на хедже сабж случается. Разработчики не предусмотрели многие ситуации, чтобы можно было удобно их обрабатывать.

Давайте по-порядку:

"Отложенный ордер сработал частично - открылась позиция с Position_ID = Order_Ticket." - Это всегда соответствует? Независимо от того что открыта только часть ордера?

Если "ДА" то всё в соответствии с документацией.

"Остаток ордера исполнился - открылась позиция с Position_ID != Order_Ticket." - А тикету какого ордера должно соответствовать? Тому, часть которого уже исполнена, или тому который остался после частичного исполнения? И с каким вы сравнивали?

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

Чтобы удобно было обрабатывать не значит что должны быть функции к которым можно было-бы обращаться "Хочу, хочу, хочу"...

 
Alexey Viktorov:

Давайте по-порядку:

"Отложенный ордер сработал частично - открылась позиция с Position_ID = Order_Ticket." - Это всегда соответствует? Независимо от того что открыта только часть ордера?

100% утверждать не возьмусь.

Если "ДА" то всё в соответствии с документацией.

"Остаток ордера исполнился - открылась позиция с Position_ID != Order_Ticket." - А тикету какого ордера должно соответствовать? Тому, часть которого уже исполнена, или тому который остался после частичного исполнения? И с каким вы сравнивали?

Тут два варианта

  1. Никакому тикету ордера поза не будет соответствовать, потому что поза с таким ID уже была.
  2. Будет равен тикету ордера, но тогда имеем несколько позиций с одинаковым ID. С соответствующими свистоплясками при анализе истории.
К сожалению, частичное исполнение не воспроизвести без ECN.

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

Чтобы удобно было обрабатывать не значит что должны быть функции к которым можно было-бы обращаться "Хочу, хочу, хочу"...

Архитектурно не продумано, а не отсутствие каких-то функций.

 
fxsaber:

100% утверждать не возьмусь.

Руководствуясь документацией, получается, что 100%

Тут два варианта

  1. Никакому тикету ордера поза не будет соответствовать, потому что поза с таким ID уже была.
  2. Будет равен тикету ордера, но тогда имеем несколько позиций с одинаковым ID. С соответствующими свистоплясками при анализе истории.

Тикет позиции может быть не равен тикету ордера, но две позиции с одинаковым ID нигде не оговорено. Я не проверял и вряд-ли стану проверять, но разве где-то запрещено иметь две позиции с разными тикетами и одинаковыми ID? Потому и спросил, "А тикету какого ордера должно соответствовать? Тому, часть которого уже исполнена, или тому который остался после частичного исполнения?"

В этом случае и надо проверить

  • Тикет ордера.
  • Тикет частично открытой позиции.
  • ID частично открытой позиции.
  • Тикет ордера остатка.
  • Тикет открывшегося остатка.
  • ID открывшегося остатка.

Если ID будет одинаковым, следовательно все ордера и сделки принадлежат одной заявке, или первоначально размещённому ордеру. А так просто утверждать, что не равны... Ну, не равны и что? Чему-то ведь должны быть равны... Просто надо понять логику соответствий тикетов и ID позиций.

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

Заявка была на 10 лотов, исполнили только 6, чуть позже исполнили 4 ну и что? это ведь принадлежит одной заявке. Или сказать моей хотелке. Вот от этой хотелки и плясать-бы надо.

 
Alexey Viktorov:

В этом случае и надо проверить 

Проверяйте! Комментариев от разработчиков ноль. Вру, был один

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "В MetaTrader 5 добавлена хеджинговая система учета позиций"

Rashid Umarov, 2018.01.25 09:48

По-моему, вы придумываете проблемы на ровном месте. Ну открылась (на хеджевом счете) вторая позиция по остатку ордера с другим Position_ID. Допустим. Какая в этом проблема? Позиции то реально разные будут. HistorySelectByPosition тут не причем.

Хотите отлавливать все торговые операции четко по конкретному сигналу - ставьте им MagicNumber и самостоятельно раскручивайте цепочку. 99.99% трейдеров не поймут вашей кручины.

Думаю, что сами разработчики не в курсе, как у них на самом деле устроено.

 
fxsaber:

Проверяйте! Комментариев от разработчиков ноль.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

POSITION_TICKET != POSITION_IDENTIFIER

Alexey Viktorov, 2018.02.12 11:13

Руководствуясь документацией, получается, что 100%

Тикет позиции может быть не равен тикету ордера, но две позиции с одинаковым ID нигде не оговорено. Я не проверял и вряд-ли стану проверять, но разве где-то запрещено иметь две позиции с разными тикетами и одинаковыми ID? Потому и спросил, "А тикету какого ордера должно соответствовать? Тому, часть которого уже исполнена, или тому который остался после частичного исполнения?"

Не исключено, что сами не понимают как сделали. Работал с этой частью терминала один человек, а отвечать должен другой. Кто делал уже забыл что там наколбасил...
 

fxsaber:

Думаю, что сами разработчики не в курсе, как у них на самом деле устроено.

Я думаю что Рашид не понял что чему не равно и что чему должно быть равно. Лично я тоже не понял что вы этим сказать хотели. Ну не равен ID тикету ордера остатка и что? А чему он равен? Или просто от фонаря назначен? Вы ведь не уточнили.

 
Alexey Viktorov:

Я думаю что Рашид не понял что чему не равно и что чему должно быть равно. Лично я тоже не понял что вы этим сказать хотели. Ну не равен ID тикету ордера остатка и что? А чему он равен? Или просто от фонаря назначен? Вы ведь не уточнили.

Потрем лампу - @Rashid Umarov.

 
Не сплю, на вахте.
Причина обращения: