跳至内容

SymbolInfoDouble

SymbolInfoDouble

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

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

参数

name

[in] 符号名称。

prop_id

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

double_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);
  }
最后更新于