跳至内容

SymbolInfoInteger

SymbolInfoInteger

返回指定符号对应的属性值。该函数有两种变体。

  1. 立即返回属性值。
long  SymbolInfoInteger(
   string                    name,      // symbol
   ENUM_SYMBOL_INFO_INTEGER  prop_id    // identifier of a property

   );
  1. 根据函数是否成功执行返回 true 或 false。如果成功,属性值将被放入最后一个参数引用的接收变量中。
bool  SymbolInfoInteger(
   string                    name,      // symbol
   ENUM_SYMBOL_INFO_INTEGER  prop_id,   // identifier of a property
   long&                     long_var   // here we accept the property value
   );

参数

name

[in] 符号名称。

prop_id

[in] 符号属性的标识符。该值可以是 ENUM_SYMBOL_INFO_INTEGER 枚举中的一个值。

long_var

[out] 接收请求属性值的长类型变量。

返回值

长类型的值。如果执行失败,可以使用 GetLastError() 函数获取关于错误的信息:

  • 4106 – 符号未在“市场观察”中选中(未出现在可用符号列表中),
  • 4051 – 符号属性无效,
  • 4024 – 内部错误。

注意

如果该函数用于获取最近一次交易的信息,建议使用 SymbolInfoTick() 函数。由于终端可能尚未连接到交易账户,因此可能还没有出现任何报价。在这种情况下,请求的值将是不确定的。

在大多数情况下,只需使用 SymbolInfoTick() 函数,用户即可在单次调用中收到 Ask、Bid、Last、Volume 以及最近一次交易到达时间的值。

示例:

void OnTick()
  {
//--- obtain spread from the symbol properties
   bool spreadfloat=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT);
   string comm=StringFormat("Spread %s = %I64d points\r\n",
                            spreadfloat?"floating":"fixed",
                            SymbolInfoInteger(Symbol(),SYMBOL_SPREAD));
//--- now let's calculate the spread by ourselves
   double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   double spread=ask-bid;
   int spread_points=(int)MathRound(spread/SymbolInfoDouble(Symbol(),SYMBOL_POINT));
   comm=comm+"Calculated spread = "+(string)spread_points+" points";
   Comment(comm);
  }
最后更新于