Позиция Есть функция PositionSelectByTicket не находит Сделки нет функция HistorySelectByPosition находит.

 

 Есть такой код Который проверяет если позиции нет то ищет сделку с выходом =  DEAL_ENTRY_OUT  дебаг проходит все проверки Позиции НЕТ с тикетом 18 но позиция существует снимок ниже . Функция HistoryDealGetTicket возвращает тикет сделки  №18 Но такого тикета ни в ордерах ни сделках нет, снимок ниже.

 bool f(int positionTicket){
ResetLastError();
     double comissin,swap, profit;
 if(!PositionSelectByTicket( positionTicket)){
 int Error=GetLastError();
      if(Error==4753){  
        HistorySelectByPosition( positionTicket);
        int total=HistoryDealsTotal();
        for(int i=total-1;i>=0;i--){
        int ticketDeal= HistoryDealGetTicket(i);
        ENUM_DEAL_ENTRY deal_ENTRY = HistoryDealGetInteger(ticketDeal,DEAL_ENTRY); 
        if(deal_ENTRY == DEAL_ENTRY_OUT){
           comissin =  HistoryDealGetDouble(ticketDeal,DEAL_COMMISSION);
           swap     =  HistoryDealGetDouble(ticketDeal,DEAL_SWAP);
           profit   =  HistoryDealGetDouble(ticketDeal,DEAL_PROFIT);
         
          return true;
          }}}
        }  
return false;} 

фыв фыв фыв

 
Igor Petrov:

 Есть такой код Который проверяет если позиции нет то ищет сделку с выходом =  DEAL_ENTRY_OUT  дебаг проходит все проверки Позиции НЕТ с тикетом 18 но позиция существует снимок ниже . Функция HistoryDealGetTicket возвращает тикет сделки  №18 Но такого тикета ни в ордерах ни сделках нет, снимок ниже.



Позиции в истории не отображаются. Все ордера и сделки участвовавшие в открытии\закрытии позиции объединены одним

POSITION_IDENTIFIER

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

 

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

 

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

long

 

Так я ж пытаюсь выбрать позицию

PositionSelectByTicket( positionTicket)

если ее нет то иду  в историю и по индификатору позиции 

        HistorySelectByPosition( positionTicket);

выбираю,

все сделки и ордера принадлежащие этой позиции. А потом уже ищу сделку которая имеет тип выхода.

Извинясь сдесь тикет написан для простоты на самом деле 
positionTicket   ==  DEAL_POSITION_ID Изначально в коде присвоено это значение 



 
Igor Petrov #:

Так я ж пытаюсь выбрать позицию

если ее нет то иду  в историю и по индификатору позиции 

выбираю,

все сделки и ордера принадлежащие этой позиции. А потом уже ищу сделку которая имеет тип выхода.

Извинясь сдесь тикет написан для простоты на самом деле 

Обратите внимание на разницу

bool  PositionSelectByTicket(
   ulong   ticket     // тикет позиции
   );
bool  HistorySelectByPosition(
   long   position_id     // идентификатор позиции - POSITION_IDENTIFIER
   );

А у вас и там и там, либо ID либо тикет………

 
Alexey Viktorov #:

Обратите внимание на разницу

А у вас и там и там, либо ID либо тикет………

 Да Спасибо Понял.

Причина обращения: