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 型の変数

戻り値

double 型の値(関数が失敗した場合は 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("Double properties of an active pending order %s #%I64u:", type, ticket);
     
    //--- ヘッダーの下に選択した注文のすべての実数プロパティを表示する
    OrderPropertiesDoublePrint(16);
    }
  /*
   結果:
  Double properties of an active pending order Sell Limit #2812000714:
  Volume initial: 1.00
  Volume current: 1.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 initial: 1.00
  Volume current: 1.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 initial: 0.50
  Volume current: 0.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 initial: 0.50
  Volume current: 0.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(symbol, SYMBOL_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);
 
//--- 操作ログにストップロスレベルを表示する
  OrderPropertyPrint("StopLoss:",header_width,digits,ORDER_SL);
 
//--- 操作ログにテイクプロフィットレベルを表示する
  OrderPropertyPrint("TakeProfit:",header_width,digits,ORDER_TP);
 
//--- 操作ログに注文の銘柄による現在の価格を表示する
  OrderPropertyPrint("Price current:",header_width,digits,ORDER_PRICE_CURRENT);
 
//--- 操作ログにストップリミット注文がアクティブになったときのリミット注文価格を表示する
  OrderPropertyPrint("StopLimit:",header_width,digits,ORDER_PRICE_STOPLIMIT);
 }
//+------------------------------------------------------------------+
//  操作ログに外部取引システムでの注文の実数プロパティを表示する                     |
//+------------------------------------------------------------------+
void OrderPropertyPrint(const string header, uint header_width, int digits, ENUM_ORDER_PROPERTY_DOUBLE property)
 {
  double value=0;
  if(!OrderGetDouble(property, value))
    PrintFormat("Cannot get property %s, error=%d", EnumToString(property), GetLastError());
  else
    {
//--- ヘッダーの幅が関数に渡され、ゼロと等しい場合、幅はヘッダー行のサイズ+1になる
    uint w=(header_width==0 ? header.Length()+1 : header_width);
    PrintFormat("%-*s%-.*f", w, header, digits, value);
    }
 }

参照

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