PositionSelectByTicket

Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

bool  PositionSelectByTicket(
   ulong   ticket     // тикет позиции
   );

Параметры

ticket

[in]  Тикет позиции.

Возвращаемое значение

Значение типа bool.

Примечание

Функция PositionSelectByTicket() копирует данные о позиции в программное окружение, и последующие вызовы PositionGetDouble(), PositionGetInteger() и PositionGetString() возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, направлению и т.д.), а данные этой позиции можно еще получать. Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelectByTicket() непосредственно перед обращением за ними.

Пример:

#define   EXPERT_MAGIC  123456   // MagicNumber
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- объявляем и инициализируем структуры запроса и результата
   MqlTradeRequest request={};
   MqlTradeResult  result ={};
   
//--- заполним параметры торгового запроса для открытия длинной позиции
   request.action    = TRADE_ACTION_DEAL;                      // тип торговой операции
   request.symbol    = Symbol();                               // символ
   request.volume    = 0.1;                                    // объем в 0.1 лот
   request.type      = ORDER_TYPE_BUY;                         // тип ордера
   request.price     = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // цена для открытия
   request.deviation = 5;                                      // допустимое отклонение от цены
   request.magic     = EXPERT_MAGIC;                           // MagicNumber ордера
   
//--- отправляем запрос, если отправить запрос не удалось, выводим код ошибки и завершаем работу
   if(!OrderSend(requestresult))
     {
      PrintFormat("OrderSend error "GetLastError());
      return;
     }
      
//--- выведем информацию об операции
   PrintFormat("Trade request result: retcode: %u, deal: %I64u, order: %I64u"result.retcoderesult.dealresult.order);
   
//--- получим тикет позиции из результата торговой операции и выберем позицию по тикету
//--- тикет только что открытой позиции соответствует тикету ордера, породившего сделку
   ulong ticket=result.order;
   ResetLastError();
   if(!PositionSelectByTicket(ticket))
     {
      PrintFormat("PositionSelectByTicket(%I64u) failed. Error %d"ticketGetLastError());
      return;
     }
 
//--- выведем в журнал данные выбранной по тикету позиции
   ENUM_POSITION_TYPE type  = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
   long               time  = PositionGetInteger(POSITION_TIME_MSC);
   double             price = PositionGetDouble(POSITION_PRICE_OPEN);
   double             volumePositionGetDouble(POSITION_VOLUME);
   string             symbolPositionGetString(POSITION_SYMBOL);
   int                digits= (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   PrintFormat("Current selected position: %s %.2f %s #%I64u at %.*f, %s",
               symbolvolume, (type==POSITION_TYPE_BUY ? "Buy" : "Sell"), ticketdigitspriceTimeMscToString(time));
   /*
   результат:
   Trade request resultretcode10009deal2778100901order2803905975
   Current selected positionEURUSD 0.10 Buy #2803905975 at 1.106722024.09.02 12:09:51.239
   */
  }
//+------------------------------------------------------------------+
//| Возвращает время с миллисекундами                                |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

Смотри также

PositionGetSymbol(), PositionsTotal(), Свойства позиций

OSZAR »