检查交易品种状态
前面我们看了几个与交易品种状态相关的函数。注意, SymbolExist 用于检查某个交易品种是否存在, SymbolSelect 用于检查是否包含在 Market Watch 列表中。在交易品种的特性中,有几个用途相似的标志,与上述函数相比,它们的使用既有优点也有缺点。
特别是,SYMBOL_SELECT 特性可用于确定在 Market Watch 中是否选择了指定的交易品种,而 SymbolSelect 函数可更改该特性。
与类似的 SYMBOL_EXIST 特性不同,SymbolExist 函数还可以在输出变量中填充一个指示,用于表明交易品种是否为用户定义交易品种。查询特性时,必须分别分析这两个特性,因为自定义交易品种的特性存储在另一个特性 SYMBOL_CUSTOM 中。但是,在某些情况下,程序可能只需要一个特性,这样就可以进行单独查询。
所有标志都是通过 SymbolInfoInteger 函数获得的布尔值。
标识符 |
说明 |
---|---|
SYMBOL_EXIST |
表示具有给定名称的交易品种存在 |
SYMBOL_SELECT |
表示该交易品种已被选中显示在 Market Watch |
SYMBOL_VISIBLE |
表示指定的交易品种已被选中显示在 Market Watch |
特别值得关注的是 SYMBOL_VISIBLE。事实上,一些交易品种(通常,这些交易品种为计算保证金要求和存款货币利润所必需的交叉汇率)可在 Market Watch 中自动选择,并且不会显示在用户可见的列表中。这种交易品种必须进行明确地选择(由用户选择或以编程方式选择)来显示。因此,正是 SYMBOL_VISIBLE 特性允许你确定某个交易品种在窗口中是否可见:它可以等于 false(对于该 列表中的某些元素),这是使用一对函数 SymbolsTotal 和 SymbolName 在 selected 参数等于 true 的情况下获得的。
考虑一个简单脚本 (SymbolInvisible.mq5),该脚本在终端中搜索隐式选择的交易品种,即那些没有在市场报价中显示的交易品种(SYMBOL_VISIBLE 被重置),同时其 SYMBOL_SELECT 为 true。
#define PUSH(A,V) (A[ArrayResize(A, ArraySize(A) + 1) - 1] = V)
|
尝试以不同账户上编译和运行脚本。并不总会遇到隐式选择交易品种的情况。例如,如果在 Market Watch 中选择了以卢布报价的俄罗斯蓝筹股的分时报价,并且交易账户使用不同的货币(例如,美元或欧元,但不是卢布),那么将会自动选择 USDRUB 交易品种。当然,这是假设其之前没有被明确地添加到 Market Watch 中。然后,我们可以在日志中得到以下结果:
Symbols: total=50681, selected=49, implicit=1
|