Алгоритм поиска сделки на вход (DEAL_ENTRY_IN)

 

коллеги, вопрос на алгоритм:

использую OnTradeTransaction, проверяю, что сделка DEAL_ENTRY_OUT. Мне нужно в истории найти ее пару, т.е. сделку на вход. Для того, чтобы ее найти, мне нужно вызвать HistorySelect, куда я передаю время от и до. Как оптимально достать историю, чтобы не забирать лишние ресурсы? Как глубоко брать по времени историю, если я не знаю, когда был вход? Он мог быть и минуту назад, и неделю, и месяц. Мне нужно достать коммент и другую инфу из сделки на вход.

 
#property script_show_inputs

input long inDealOutTicket = 0;

#include <HistoryPosition.mqh> // https://www.mql5.com/ru/blogs/post/755007

void OnStart()
{
  if (HistoryPositionSelect(inDealOutTicket))
    Print(HistoryPositionGetInteger(POSITION_HISTORY_TICKET_DEAL_IN));
}
 
Nikita Chernyshov:

коллеги, вопрос на алгоритм:

использую OnTradeTransaction, проверяю, что сделка DEAL_ENTRY_OUT. Мне нужно в истории найти ее пару, т.е. сделку на вход. Для того, чтобы ее найти, мне нужно вызвать HistorySelect, куда я передаю время от и до. Как оптимально достать историю, чтобы не забирать лишние ресурсы? Как глубоко брать по времени историю, если я не знаю, когда был вход? Он мог быть и минуту назад, и неделю, и месяц. Мне нужно достать коммент и другую инфу из сделки на вход.

Если вы используете OnTradeTransaction() то в момент проверки что сделка DEAL_ENTRY_OUT получите DEAL_POSITION_ID который совпадает с POSITION_IDENTIFIER и по нему выбор всех ордеров и сделок 

POSITION_IDENTIFIER

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

 

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

 

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

long

bool  HistorySelectByPosition(
   long   position_id     // идентификатор позиции - POSITION_IDENTIFIER
   );
 
fxsaber #:

спасибо)

Alexey Viktorov #:

Если вы используете OnTradeTransaction() то в момент проверки что сделка DEAL_ENTRY_OUT получите DEAL_POSITION_ID который совпадает с POSITION_IDENTIFIER и по нему выбор всех ордеров и сделок 

POSITION_IDENTIFIER

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

 

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

 

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

long

благодарю)