PositionSelectByTicket

포지션에 지정된 티켓 번호를 기준으로 작업할 오픈 포지션을 선택합니다. 성공하면 true를 반환합니다. 함수가 실패하면 false를 반환합니다. 오류 세부정보를 위해서는 GetLastError()를 호출하십시오.

bool  PositionSelectByTicket(
   ulong   ticket     // 포지션 티켓
   );

매개 변수

ticket

[in]  포지션 티켓.

반환값

bool 유형의 값.

참고

PositionSelectByTicket() 함수는 포지션 데이터를 프로그램 환경에 복사합니다. PositionGetDouble(), PositionGetInteger()PositionGetString()를 추가로 호출하면 이전에 복사된 데이터가 반환됩니다. 포지션이 아직 없는 경우(또는 그 크기, 방향 등이 변경된 경우)에도 마찬가지이며, 데이터가 수신되는 경우가 있습니다. 유효한 포지션 데이터를 수신하려면 데이터에 액세스하기 전에 PositionSelectByTicket() 를 호출하는 것이 좋습니다.

예:

#define   EXPERT_MAGIC  123456   // MagicNumber
 
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                          |
//+------------------------------------------------------------------+
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;                           // 주문 매직넘버
   
//--- 요청 전송 요청 전송에 실패한 경우 오류 코드를 표시하고 작업을 완료
   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(), Position Properties