Тикет закрытой позиции как в мт4, как найти? как вытащить тикет закрытой позиции, по тикету сделки? РЕШЕНО!

 

Всем привет, 

кто рассуждал на тему приведения кода мт4 под мт5?

вот возникла такая сложность в определении:

 

в мт4:

Есть открытая позиция, у нее есть тикет 123, позиция закрывается ее тикет 123.

 

В мт5:

все кардинально по другому,

Позиция = сделка или несколько сделок с разными тикетами, но тикет позиции 1.

после закрытия появляется еще сделка уже с другим тикетом,

 

Вопрос: по сути, как вытащить тикет закрытой позиции, по тикету сделки?

DEAL_POSITION_ID пробовал но это не то.

Если позиция, например, состоит из нескольких сделок, к примеру 5 сделок = 5 тикетов,

мы открываем противоположную сделку, тем самым закрывая часть позиции,

Как сделать что-то похожее на мт4? голову ломаю, никак не могу придумать.  

 

 


 

РЕШЕНО 

 

для тех кто не знал, или скрывал :-) 

в общем: свойства сделок и IN и OUT выдает один и тот же идентификатор позиции, тоесть тикет, так что все нормально, просто в истории он другой но если залезть в МКЛ5 то можно вытянуть тикет нормально.

(PositionGetInteger(POSITION_IDENTIFIER))

 и

 HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_POSITION_ID) 

 

выдают один и тот же тикет позиции, и не важно сколько было открыто или закрыто сделок в этой позиции

 история выглядит так: видно что тикеты разные

 

 

но если вытянуть тикеты позиции  HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_POSITION_ID)  то все отлично 

 

 

или так например, первая графа тикет позиции вторая тикет сделки:

 

 
Сначала надо определиться, где же находятся тикеты позиций? Где? Когда найдете, где они находятся, тогда можно будет думать, как их от туда вытащить.
 
тикеты позиций находятся в истории,
 
Vladislav Andruschenko:

Всем привет, 

кто рассуждал на тему приведения кода мт4 под мт5?

вот возникла такая сложность в определении:

 

в мт4:

Есть открытая позиция, у нее есть тикет 123, позиция закрывается ее тикет 123.

 

В мт5:

все кардинально по другому,

Позиция = сделка или несколько сделок с разными тикетами, но тикет позиции 1.

после закрытия появляется еще сделка уже с другим тикетом,

 

Вопрос: по сути, как вытащить тикет закрытой позиции, по тикету сделки?

А что Вы вообще хотите узнать? (МТ5)

Зачем Вам тикет закрытой позиции?

Если нужно определить кол-во сделок, их напрвление  и цену исполнения, то нужно знать POSITION_IDENTIFIER

 

дело в другом

в мт4: 1 тикет на открытие и закрытие

в мт5 у каждой сделки свой тикет, и невозможно понять через историю, сделка какой позиции закрыта.

 

привести функции мт5 в подобие мт4.

думал может массивами заполнять открытые сделки, потом искать по объему закрытую сделку и вытягивать с массива тикет похожей сделки.

а если две сделки одинакового объема?  

 
Vladislav Andruschenko:
тикеты позиций находятся в истории,
Да? А где вообще у позиции тикет?
 
Dmitry Fedoseev:
Да? А где вообще у позиции тикет?

Вот пример, если позиция открыта (в примере только берутся данные по увеличению позиции.)

//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice( const string aSymbol )
{
  double price_in = 0;
  double volume_in = 0;
  
  if ( PositionSelect( aSymbol ) )
  {
    ulong pos_id = ulong( PositionGetInteger( POSITION_IDENTIFIER ) );
    
    if ( pos_id > 0 )
    {
      if ( HistorySelectByPosition( pos_id ) )
      {
        int deals = HistoryDealsTotal();
      
        for( int i = 0; i < deals; i++ )
        {
          ulong deal_ticket = HistoryDealGetTicket( i );
          ulong order_ticket = ulong( HistoryDealGetInteger( deal_ticket, DEAL_ORDER ) );
        
          if ( order_ticket > 0 )
          {
            ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY( HistoryDealGetInteger( deal_ticket, DEAL_ENTRY ) );
              
            if ( deal_entry == DEAL_ENTRY_IN )
            {
              double price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              double volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_in += price * volume;
              volume_in += volume;  
            }
          }
        }
        if ( volume_in > 0 ) return( NormalizeDouble( price_in / volume_in, _Digits ) );
      }
      else
      {
        Print( "GetPositionPrice: Невозможно получить историю позиции по символу ", aSymbol );
      }
    }
    else
    {
      Print( "GetPositionPrice: Невозможно определить идентификатор позиции по символу ", aSymbol );
    }
  }
  return( 0 );
}

 Если позиция закрыта, то нужно смотреть в истории, но когда позиция открывается лучше

взять ее ID ( POSITION_IDENTIFIER ) Идентификатор позиции позволит быстро найти сделки в истории.

 
Михаил:

Вот пример, если позиция открыта (в примере только берутся данные по увеличению позиции.)

 Если позиция закрыта, то нужно смотреть в истории, но когда позиция открывается лучше

взять ее ID ( POSITION_IDENTIFIER 

А мне то вы зачем рассказываете? 
 

Есть POSITIO_IDENTFIER используется в функции PositionGetInteger()

Есть DEAL_POSITION_ID используется в функции HistoryDealGetInteger()

Есть ORDER_POSITION_ID используется в функции HistoryOrderGetInteger()

Есть история ордеров и история сделок, других историй нет. 

 
Dmitry Fedoseev:
А мне то вы зачем рассказываете? 

Вы спросили - я ответил. 

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