OrderGetDouble

OrderGetTicket 또는 OrderSelect를 사용하여 미리 선택된 주문의 요청된 속성을 반환합니다. 주문 속성은 double 유형이어야 합니다. 이 함수엔 2가지 변수가 있습니다

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

double  OrderGetDouble(
   ENUM_ORDER_PROPERTY_DOUBLE  property_id        // 속성 식별자
   );

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

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

매개 변수

property_id

[in]  주문 속성 식별자. 이 값은 ENUM_ORDER_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), 하나의 심볼로 여러 포지션을 오픈할 수 있습니다.

주문에 대한 새로운 데이터를 수신하려면, 해당 데이터를 참조하기 전에 OrderSelect()를 요청하는 것이 좋습니다.

예:

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                          |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 모든 계정 주문 목록에 의한 루프
   int total=OrdersTotal();
   for(int i=0i<totali++)
     {
      //--- 루프 인덱스를 통해 리스트에서 주문 티켓 가져오기
      ulong ticket=OrderGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- 주문 유형을 가져오고 선택한 주문의 실제 속성 목록에 대한 헤더를 표시합니다.
      string type=OrderTypeDescription((ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE));
      PrintFormat("Double properties of an active pending order %s #%I64u:"typeticket);
      
      //--- 헤더 아래에서 선택한 주문의 모든 실제 속성을 인쇄합니다.
      OrderPropertiesDoublePrint(16);
     }
   /*
   결과:
   Double properties of an active pending order Sell Limit #2812000714:
   Volume initial1.00
   Volume current1.00
   Price open:     145.282
   StopLoss:       0.000
   TakeProfit:     0.000
   Price current:  145.044
   StopLimit:      0.000
   Double properties of an active pending order Buy Limit #2812001112:
   Volume initial1.00
   Volume current1.00
   Price open:     144.836
   StopLoss:       0.000
   TakeProfit:     0.000
   Price current:  145.051
   StopLimit:      0.000
   Double properties of an active pending order Buy Stop #2812001488:
   Volume initial0.50
   Volume current0.50
   Price open:     1.10642
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10530
   StopLimit:      0.00000
   Double properties of an active pending order Sell Stop #2812001712:
   Volume initial0.50
   Volume current0.50
   Price open:     1.10374
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10525
   StopLimit:      0.00000
   */
  }
//+------------------------------------------------------------------+
//| 주문 유형 설명을 반환                                               |
//+------------------------------------------------------------------+
string OrderTypeDescription(const ENUM_ORDER_TYPE type)
  {
   switch(type)
     {
      case ORDER_TYPE_BUY              :  return("Buy");
      case ORDER_TYPE_SELL             :  return("Sell");
      case ORDER_TYPE_BUY_LIMIT        :  return("Buy Limit");
      case ORDER_TYPE_SELL_LIMIT       :  return("Sell Limit");
      case ORDER_TYPE_BUY_STOP         :  return("Buy Stop");
      case ORDER_TYPE_SELL_STOP        :  return("Sell Stop");
      case ORDER_TYPE_BUY_STOP_LIMIT   :  return("Buy Stop Limit");
      case ORDER_TYPE_SELL_STOP_LIMIT  :  return("Sell Stop Limit");
      default                          :  return("Unknown order type");
     }
  }
//+------------------------------------------------------------------+
//| 선택한 주문의 실제 속성을 저널에 표시                                 |
//+------------------------------------------------------------------+
void OrderPropertiesDoublePrint(const uint header_width=0)
  {
//--- 주문 심볼과 심볼의 소수 자릿수를 가져옵니다.
   string symbol = OrderGetString(ORDER_SYMBOL);
   int    digits = (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- 저널에 지정된 너비의 헤더로 주문할 때 초기 볼륨을 표시
   OrderPropertyPrint("Volume initial:",header_width,2,ORDER_VOLUME_INITIAL);
   
//--- 미체결 주문량을 저널에 표시
   OrderPropertyPrint("Volume current:",header_width,2,ORDER_VOLUME_CURRENT);
   
//--- 주문에서 지정한 가격을 저널에 표시
   OrderPropertyPrint("Price open:",header_width,digits,ORDER_PRICE_OPEN);
   
//--- 저널에 StopLoss 레벨을 표시
   OrderPropertyPrint("StopLoss:",header_width,digits,ORDER_SL);
 
//--- 저널에 TakeProfit 레벨을 표시
   OrderPropertyPrint("TakeProfit:",header_width,digits,ORDER_TP);
 
//--- 저널의 주문 심볼로 현재 가격을 표시
   OrderPropertyPrint("Price current:",header_width,digits,ORDER_PRICE_CURRENT);
 
//--- StopLimit 주문이 활성화되면 지정가 주문 가격을 저널에 표시
   OrderPropertyPrint("StopLimit:",header_width,digits,ORDER_PRICE_STOPLIMIT);
  }
//+------------------------------------------------------------------+
//| 주문 실제 자산 가치를 저널에 표시                                    |
//+------------------------------------------------------------------+
void OrderPropertyPrint(const string headeruint header_widthint digitsENUM_ORDER_PROPERTY_DOUBLE property)
  {
   double value=0;
   if(!OrderGetDouble(propertyvalue))
      PrintFormat("Cannot get property %s, error=%d"EnumToString(property), GetLastError());
   else
     {
      //--- 헤더 너비가 0과 같은 함수에 전달되면 너비는 헤더 줄 크기 + 1
      uint w=(header_width==0 ? header.Length()+1 : header_width);
      PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
     }
  }

참고 항목

OrdersTotal(), OrderGetTicket(), Order Properties