OrderGetInteger

OrderGetTicket または OrderSelect で事前に選択された注文のリクエストされたプロパティを返します。注文プロパティは datetime または int 型でなければいけません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

long  OrderGetInteger(
  ENUM_ORDER_PROPERTY_INTEGER  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  OrderGetInteger(
  ENUM_ORDER_PROPERTY_INTEGER  property_id,       // プロパティ識別子
  long&                        long_var          // プロパティ値を受け取る
  );

パラメータ

property_id

[in]  注文プロパティの識別子。値は ENUM_ORDER_PROPERTY_INTEGER 列挙のいずれかです。

long_var

[out]  リクエストされたプロパティの値を受け取る long 型の変数

戻り値

long 型の値(関数が失敗した場合は 0 )

注意事項

現在の未決注文はクライアント端末の「ツールボックス」の「取引」タブに表示されているポジションと混乱されてはなりません。

ポジションの『ネッティング』計算時(ACCOUNT_MARGIN_MODE_RETAIL_NETTINGACCOUNT_MARGIN_MODE_EXCHANGE)各シンボルにつき常に一つのポジションのみ(1つ以上の取引の結果である)保有することができます。ポジションと『ツールボックス』パネルの『取引』タブに表示される有効な未決注文と混同しないようにしてください。

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

取得した注文情報が最新であるように、OrderSelect() を参照直前に呼び出すことが推奨されています。

例:

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- すべての口座注文のリストのループ
  int total=OrdersTotal();
  for(int i=0; i<total; i++)
    {
    //--- ループインデックスでリストから注文チケットを取得する
    ulong ticket=OrderGetTicket(i);
    if(ticket==0)
        continue;
     
    //--- 注文タイプを取得し、選択した注文の実数プロパティのリストのヘッダーを表示する
    string type=OrderTypeDescription((ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE));
    PrintFormat("Integer properties of an active pending order %s #%I64u:", type, ticket);
     
    //--- ヘッダーの下に選択した注文のすべての整数プロパティを表示する
    OrderPropertiesIntegerPrint(17);
    }
  /*
   結果:
  Integer properties of an active pending order Buy Limit #2812945317:
  Ticket:         2812945317
  Time setup:     2024.09.04 19:17:16
  Type:           Buy Limit
  State:           Placed
  Time expiration: 0
  Time done:       0
  Time setup msc: 2024.09.04 19:17:16.686
  Time done msc:   0
  Type filling:   Return
  Type time:       Time GTC
  Magic:           0
  Reason:         Client
  Position ID:     0
  Position By ID: 0
  */
 }
//+------------------------------------------------------------------+
//| 選択した注文の整数プロパティを操作ログに表示する                              |
//+------------------------------------------------------------------+
void OrderPropertiesIntegerPrint(const uint header_width=0)
 {
  uint   w=0;
  string header="";
  long   value=0;
 
//--- 操作ログに注文チケットを表示する
  OrderPropertyPrint("Ticket:", header_width, ORDER_TICKET);
 
//--- 操作ログに注文時刻を表示する
  OrderPropertyPrint("Time setup:", header_width, ORDER_TIME_SETUP);
 
//--- 操作ログに注文タイプを表示する
  OrderPropertyPrint("Type:", header_width, ORDER_TYPE);
 
//--- 操作ログに注文ステータスを表示する
  OrderPropertyPrint("State:", header_width, ORDER_STATE);
 
//--- 操作ログに注文の有効期限を表示する
  OrderPropertyPrint("Time expiration:", header_width, ORDER_TIME_EXPIRATION);
 
//--- 操作ログに注文の実行/期限切れの時間を表示する
  OrderPropertyPrint("Time done:", header_width, ORDER_TIME_DONE);
 
//--- 操作ログに1970年1月1日からのミリ秒単位での注文実行時間を表示する
  OrderPropertyPrint("Time setup msc:", header_width, ORDER_TIME_SETUP_MSC);
 
//--- 操作ログに1970年1月1日からのミリ秒単位での注文の実行/期限切れ時間を表示する
  OrderPropertyPrint("Time done msc:", header_width, ORDER_TIME_DONE_MSC);
 
//--- 操作ログに残高による実行タイプを表示する
  OrderPropertyPrint("Type filling:", header_width, ORDER_TYPE_FILLING);
 
//--- 操作ログに注文の有効期限を表示する
  OrderPropertyPrint("Type time:", header_width, ORDER_TYPE_TIME);
 
//--- 操作ログに注文を出したEAのIDを表示する
  OrderPropertyPrint("Magic:", header_width, ORDER_MAGIC);
 
//--- 操作ログに注文の理由または注文元を表示する
  OrderPropertyPrint("Reason:", header_width, ORDER_REASON);
 
//--- 操作ログに注文の実行中に設定されたポジションのIDを表示する
  OrderPropertyPrint("Position ID:", header_width, ORDER_POSITION_ID);
 
//--- 操作ログにORDER_TYPE_CLOSE_BYタイプの注文に対する反対のポジションIDを表示する
  OrderPropertyPrint("Position By ID:", header_width, ORDER_POSITION_BY_ID);
 }
//+------------------------------------------------------------------+
//  操作ログに注文の整数プロパティを表示する                                    |
//+------------------------------------------------------------------+
void OrderPropertyPrint(const string header, uint header_width, ENUM_ORDER_PROPERTY_INTEGER property)
 {
  string svalue="";
  long   lvalue=0;
  if(!OrderGetInteger(property, lvalue))
    PrintFormat("Cannot get property %s, error=%d", EnumToString(property), GetLastError());
  else
    {
    switch(property)
       {
        case ORDER_TICKET          :
        case ORDER_MAGIC           :
        case ORDER_POSITION_ID     :
        case ORDER_POSITION_BY_ID  :
          svalue=(string)lvalue;
          break;
         
        case ORDER_TIME_SETUP      :
        case ORDER_TIME_EXPIRATION :
        case ORDER_TIME_DONE       :
          svalue=(lvalue!=0 ? TimeToString((datetime)lvalue, TIME_DATE|TIME_MINUTES|TIME_SECONDS) : "0");
          break;
         
        case ORDER_TIME_SETUP_MSC  :
        case ORDER_TIME_DONE_MSC   :
          svalue=(lvalue!=0 ? TimeMscToString(lvalue) : "0");
          break;
         
        case ORDER_TYPE            :
          svalue=OrderTypeDescription((ENUM_ORDER_TYPE)lvalue);
          break;
        case ORDER_STATE           :
          svalue=OrderStateDescription((ENUM_ORDER_STATE)lvalue);
          break;
        case ORDER_TYPE_FILLING    :
          svalue=OrderTypeFillingDescription((ENUM_ORDER_TYPE_FILLING)lvalue);
          break;
        case ORDER_TYPE_TIME       :
          svalue=OrderTypeTimeDescription((ENUM_ORDER_TYPE_TIME)lvalue);
          break;
        case ORDER_REASON          :
          svalue=OrderReasonDescription((ENUM_ORDER_REASON)lvalue);
          break;
       
        default                    :
          svalue="Unknown property";
          break;
       }
     
//--- ヘッダーの幅が関数に渡され、ゼロと等しい場合、幅はヘッダー行のサイズ+1になる
    uint w=(header_width==0 ? header.Length()+1 : header_width);
    PrintFormat("%-*s%-s", w, header, svalue);
    }
 }
//+------------------------------------------------------------------+
//| 注文タイプの説明を返す                                                 |
//+------------------------------------------------------------------+
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: "+(string)type);
    }
 }
//+------------------------------------------------------------------+
//| 注文ステータスの説明を返す                                              |
//+------------------------------------------------------------------+
string OrderStateDescription(ENUM_ORDER_STATE state)
 {
  switch(state)
    {
    case ORDER_STATE_STARTED         : return("Started");
    case ORDER_STATE_PLACED          : return("Placed");
    case ORDER_STATE_CANCELED        : return("Canceled");
    case ORDER_STATE_PARTIAL         : return("Partial");
    case ORDER_STATE_FILLED          : return("Filled");
    case ORDER_STATE_REJECTED        : return("Rejected");
    case ORDER_STATE_EXPIRED         : return("Expired");
    case ORDER_STATE_REQUEST_ADD     : return("Request Add");
    case ORDER_STATE_REQUEST_MODIFY  : return("Request Modify");
    case ORDER_STATE_REQUEST_CANCEL  : return("Request Cancel");
    default                          : return("Unknown state: "+(string)state);
    }
 }
//+------------------------------------------------------------------+
//| 注文量充足ポリシーの説明を返す                                          |
//+------------------------------------------------------------------+
string OrderTypeFillingDescription(const ENUM_ORDER_TYPE_FILLING type)
 {
  switch(type)
    {
    case ORDER_FILLING_FOK     : return("Fill or Kill");
    case ORDER_FILLING_IOC     : return("Immediate or Cancel");
    case ORDER_FILLING_BOC     : return("Book or Cancel");
    case ORDER_FILLING_RETURN  : return("Return");
    default                    : return("Unknown type filling: "+(string)type);
    }
 }
//+------------------------------------------------------------------+
//| 注文の有効期限の説明を返す                                            |
//+------------------------------------------------------------------+
string OrderTypeTimeDescription(const ENUM_ORDER_TYPE_TIME type)
 {
  switch(type)
    {
    case ORDER_TIME_GTC           :   return("Time GTC");
    case ORDER_TIME_DAY           :   return("Time Day");
    case ORDER_TIME_SPECIFIED     :   return("Time Specified");
    case ORDER_TIME_SPECIFIED_DAY :   return("Time Specified Day");
    default                       : return("Unknown type time: "+(string)type);
    }
 }
//+------------------------------------------------------------------+
//| 注文理由の説明を返す                                                 |
//+------------------------------------------------------------------+
string OrderReasonDescription(const ENUM_ORDER_REASON reason)
 {
  switch(reason)
    {
    case ORDER_REASON_CLIENT   : return("Client");
    case ORDER_REASON_MOBILE   : return("Mobile");
    case ORDER_REASON_WEB      : return("Web");
    case ORDER_REASON_EXPERT   : return("Expert");
    case ORDER_REASON_SL       : return("Stop Loss");
    case ORDER_REASON_TP       : return("Take Profit");
    case ORDER_REASON_SO       : return("Stop Out");
    default                    : return("Unknown reason: "+(string)reason);
    }
 }
//+------------------------------------------------------------------+
//| ミリ秒で時間を返す                                                    |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_msc, int flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
 {
  return(TimeToString(time_msc/1000, flags) + "." + IntegerToString(time_msc %1000, 3, '0'));
 }

参照

OrdersTotal()OrderGetTicket()注文プロパティ