Скачать MetaTrader 5

Как узнать закрыта ли позиция по ее тикету?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Сергей
776
Сергей  
Как узнать закрыта ли позиция по ее тикету?
Aleksey Semenov
4587
Aleksey Semenov  
Сергей:
Как узнать закрыта ли позиция по ее тикету?
ордер клоузтайм() будет не равен нулю
Сергей
776
Сергей  
Aleksey Semenov:
ордер клоузтайм() будет не равен нулю
 а в mql5?
Vladimir Karputov
Модератор
65423
Vladimir Karputov  
Сергей:
Как узнать закрыта ли позиция по ее тикету?

Можно перебрать открытые позиции - если в списке открытых позиций не нашли позицию с искомым тикетом - значит позиция с искомым тикетом закрыта.

Можно отслеживать события в функции OnTradeTransaction(): если тип торговой транзакции - поле "type" равен "TRADE_TRANSACTION_DEAL_ADD" (добавление сделки в историю) - то смотрим поле "position" (это тикет позиции, открытой, измененной или закрытой в результате исполнения сделки) и ищем эту позицию в открытых.

Maxim Dmitrievsky
19156
Maxim Dmitrievsky  

Так там же одна открытая позиция может быть по символу только, просто проверить есть она или нет ) для неттингового

А в хеджевом как сделано? тоже позиции? 

Alexey Viktorov
14133
Alexey Viktorov  

К сожалению у меня сейчас нет возможности проверить...

А это не может помочь?

Если туда засунуть тикет не закрытой позиции, что вернёт функция?

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Торговые функции / HistorySelectByPosition - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Vladimir Karputov
Модератор
65423
Vladimir Karputov  
Maxim Dmitrievsky:

Так там же одна открытая позиция может быть по символу только, просто проверить есть она или нет ) для неттингового

А в хеджевом как сделано? тоже позиции? 

Да. В хеджевом тоже позиции. Вот на хеджевом счёте открытые позиции (обратите внимание, по символу "EURUSD" открыты ДВЕ ПРОТИВОПОЛОЖНЫЕ позиции:

Хэджевый счёт 

и вот этот код:

//+------------------------------------------------------------------+
//|                                           PositionGetInteger.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<PositionsTotal();i++)
     {
      //--- проверим наличие позиции и выведем время её изменения 
      string pos_symbol=PositionGetSymbol((uint)i);
      if(pos_symbol!=NULL)
        {
         //--- получим идентификатор позиции для дальнейшей работы с ней 
         ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
         Print(pos_symbol," postion #",position_ID);
         //--- получим время образования позиции в миллисекундах с 01.01.1970 
         long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
         PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
                     create_time_msc,TimeToString(create_time_msc/1000));
         //--- получим время последнего изменения позиции в секундах с 01.01.1970 
         long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s",
                     position_ID,update_time_sec,TimeToString(update_time_sec));
         //--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 
         long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
                     position_ID,update_time_msc,TimeToString(update_time_msc/1000));
        }
     }
//--- 
  }
//+------------------------------------------------------------------+

обойдёт все открытые ПОЗИЦИИ и выдаст результат:

2016.06.29 10:12:14.832 PositionGetInteger (USDJPY,M15) EURUSD postion #89078240
2016.06.29 10:12:14.832 PositionGetInteger (USDJPY,M15) Position #89078240  POSITION_TIME_MSC = -168390836864 milliseconds => 2016.06.29 10:08
2016.06.29 10:12:14.832 PositionGetInteger (USDJPY,M15) Position #89078240  POSITION_TIME_UPDATE = 146719490664 seconds => 2016.06.29 10:08
2016.06.29 10:12:14.832 PositionGetInteger (USDJPY,M15) Position #89078240  POSITION_TIME_UPDATE_MSC = -168390836864 milliseconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) GBPUSD postion #89078241
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078241  POSITION_TIME_MSC = -168390653164 milliseconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078241  POSITION_TIME_UPDATE = 146719490864 seconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078241  POSITION_TIME_UPDATE_MSC = -168390653164 milliseconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) USDCHF postion #89078250
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078250  POSITION_TIME_MSC = -168390389664 milliseconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078250  POSITION_TIME_UPDATE = 146719491164 seconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078250  POSITION_TIME_UPDATE_MSC = -168390389664 milliseconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) EURUSD postion #89078258
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078258  POSITION_TIME_MSC = -168389882964 milliseconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078258  POSITION_TIME_UPDATE = 146719491664 seconds => 2016.06.29 10:08
2016.06.29 10:12:14.833 PositionGetInteger (USDJPY,M15) Position #89078258  POSITION_TIME_UPDATE_MSC = -168389882964 milliseconds => 2016.06.29 10:08
Файлы:
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий