PositionGetDouble

이 함수는 PositionGetSymbol 또는 PositionSelect를 사용하여 사전 선택된 오픈 포지션의 요청된 속성을 반환합니다. 위치 속성은 double 유형이어야 합니다. 이 함수엔 2가지 변수가 있습니다

1. 속성 값을 즉시 반환합니다.

double  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id      // 속성 식별자
   );

2. 함수 실행의 성공 여부에 따라 true 또는 false를 반환합니다. 성공하면 속성 값이 마지막 매개 변수에서 참조로 전달되는 수신 변수에 배치됩니다.

bool  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // 속성 식별자
   double&                        double_var       // 여기서 속성 값을 수락합니다
   );

매개 변수

property_id

[in]  포지션 속성 식별자. 이 값은 ENUM_POSITION_PROPERTY_DOUBLE 열거값 중 하나일 수 있습니다.

double_var

[out]  요청된 속성의 값을 수락하는 double 유형의 변수.

반환값

Value of the double type. 이 함수가 실패하면 0이 반환됩니다.

참고

포지션 (ACCOUNT_MARGIN_MODE_RETAIL_NETTINGACCOUNT_MARGIN_MODE_EXCHANGE)의 "netting" 해석의 경우, 언제든지 하나의 포지션이 하나의 심볼에 대해 존재할 수 있습니다. 이 포지션은 하나 이상의 거래의 결과입니다. Toolbox 창의 Trading 탭에도 표시되는 유효한 보류 주문과 포지션을 혼동하지 마십시오

개별 포지션이 허용되는 경우 (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), 하나의 심볼로 여러 포지션을 오픈할 수 있습니다.

포지션에 대한 새로운 데이터를 받으려면 PositionSelect()을 바로 호출한 뒤 참조하는 것이 좋습니다.

예:

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                          |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 모든 계정 포지션에 의한 루프
   int total=PositionsTotal();
   for(int i=0i<totali++)
     {
      //--- 해당 속성에 액세스할 포지션을 자동으로 선택하여 다음 포지션의 티켓을 가져옵니다.
      ulong ticket=PositionGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- 포지션 유형을 가져오고 포지션 실제 속성 목록에 대한 헤더를 표시
      string type=(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE ? "Buy" : "Sell");
      PrintFormat("Double properties of an open position %s #%I64u:"typeticket);
      
      //--- 헤더 아래에서 선택한 포지션의 모든 실제 속성을 인쇄
      PositionPropertiesDoublePrint(15);
     }
   /*
   결과:
   Double properties of an open position Buy #2807075208:
   Volume:        1.00
   Price open:    1.10516
   StopLoss:      0.00000
   TakeProfit:    0.00000
   Price current1.10518
   Swap:          0.00
   Profit:        2.00 USD
   */
  }
//+------------------------------------------------------------------+
//| 선택한 포지션의 실제 속성을 저널에 표시                               |
//+------------------------------------------------------------------+
void PositionPropertiesDoublePrint(const uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- 계정 통화, 포지션 심볼 및 심볼의 소수 자릿수를 가져옵니다.
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   string symbol  =PositionGetString(POSITION_SYMBOL);
   int    digits  =(int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- 헤더 텍스트와 헤더 필드의 너비를 정의합니다.
//--- 헤더 너비가 0과 같은 함수에 전달되면 너비는 헤더 줄 크기 + 1이 됩니다.
   header="Volume:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- 저널에서 지정된 헤더 너비로 포지션 볼륨을 가져오고 표시
   if(!PositionGetDouble(POSITION_VOLUMEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- 포지션 가격 값을 저널에 표시
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_OPENvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- 저널에 StopLoss 값을 표시
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- 저널에 TakeProfit 값을 표시
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- Price current 값을 저널에 표시
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- 누적된 스왑값을 저널에 표시
   header="Swap:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SWAPvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
 
//--- 저널에 현재 수익 값을 표시
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PROFITvalue))
      return;
   PrintFormat("%-*s%-.2f %s"wheadervaluecurrency);
  }

참고 항목

PositionGetSymbol(), PositionSelect(), Position Properties