SymbolInfoInteger
SymbolInfoInteger
返回指定符号对应的属性值。该函数有两种变体。
- 立即返回属性值。
long SymbolInfoInteger(
string name, // symbol
ENUM_SYMBOL_INFO_INTEGER prop_id // identifier of a property
);- 根据函数是否成功执行返回 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);
}最后更新于