OrderGetString

返回要求的订单属性,使用 OrderGetTicket 或者 OrderSelect预选择。订单属性一定是字符串型。有2种变量函数可以使用。

1. 立即返回属性值。

string  OrderGetString(
   ENUM_ORDER_PROPERTY_STRING  property_id        // 属性标识符
   );

2. 依据函数成功与否返回真值或者错误值。如果成功,目标变量的属性值通过引用传递到最后参量。

bool  OrderGetString(
   ENUM_ORDER_PROPERTY_STRING  property_id,       // 属性标识符
   string&                     string_var         // 这里接受属性值
   );

参量

property_id

[in]  订单性质标识符,值可以是 ENUM_ORDER_PROPERTY_STRING 列举值中的一个。

string_var

[out]  接收要求属性值的字符串型变量。

返回值

字符串 类型。

注释

不要使仓位挂单混乱,它显示在客户端“工具箱”的“交易”标签中。

对于"单边" 持仓 (ACCOUNT_MARGIN_MODE_RETAIL_NETTINGACCOUNT_MARGIN_MODE_EXCHANGE),无论任何时候一个交易品种只能存在一个持仓 。该持仓是一个或多个交易的结果。请不要混淆也显示在工具箱窗口交易标签中的有效挂单的持仓。

如果允许单独持仓 (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("String properties of an active pending order %s #%I64u:"typeticket);
      
      //--- 在标题下方打印选中订单的所有字符串型属性
      OrderPropertiesStringPrint(13);
     }
   /*
   结果:
   String properties of an active pending order Sell Limit #2813781342:
   Comment:     Test OrderGetString
   Symbol:      EURUSD
   External ID
   */
  }
//+------------------------------------------------------------------+
//| 在日志中显示选定订单的字符串型属性                                    |
//+------------------------------------------------------------------+
void OrderPropertiesStringPrint(const uint header_width=0)
  {
//--- 在日志中显示注释
   OrderPropertyPrint("Comment:"header_widthORDER_COMMENT);
   
//--- 在日志中显示所下订单的交易品种
   OrderPropertyPrint("Symbol:"header_widthORDER_SYMBOL);
   
//--- 在日志中显示在外部系统中的订单 ID
   OrderPropertyPrint("External ID:"header_widthORDER_EXTERNAL_ID);
  }
//+------------------------------------------------------------------+
//| 在日志中显示订单字符串属性值                                         |
//+------------------------------------------------------------------+
void OrderPropertyPrint(const string headeruint header_widthENUM_ORDER_PROPERTY_STRING property)
  {
   string value="";
   if(!OrderGetString(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%-s"wheadervalue);
     }
  }
//+------------------------------------------------------------------+
//| 返回订单类型的描述                                                  |
//+------------------------------------------------------------------+
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);
     }
  }

另见

OrdersTotal()OrderGetTicket()订单属性