Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарабатывай на сервисах MQL5. Это просто!
Сергей
595
Сергей 2016.06.29 08:10 
Как узнать закрыта ли позиция по ее тикету?
Aleksey Semenov
3718
Aleksey Semenov 2016.06.29 08:43  
Сергей:
Как узнать закрыта ли позиция по ее тикету?
ордер клоузтайм() будет не равен нулю
Сергей
595
Сергей 2016.06.29 08:50  
Aleksey Semenov:
ордер клоузтайм() будет не равен нулю
 а в mql5?
Vladimir Karputov
Модератор
45799
Vladimir Karputov 2016.06.29 08:51  
Сергей:
Как узнать закрыта ли позиция по ее тикету?

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

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

Maxim Dmitrievsky
13816
Maxim Dmitrievsky 2016.06.29 09:06  

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

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

Alexey Viktorov
6841
Alexey Viktorov 2016.06.29 09:10  

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

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

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

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Торговые функции / HistorySelectByPosition - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Vladimir Karputov
Модератор
45799
Vladimir Karputov 2016.06.29 09:12  
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
Файлы:
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий