获取可用的交易品种和市场报价列表
MQL5 API 有几个函数可用于进行交易品种操作。使用这些函数,可以找到可用交易品种的总数、Market Watch 中选择的交易品种数及其名称。我们知道,终端中可用交易品种的一般列表以分层结构的形式显示在 Symbols 对话框中,用户可以使用命令 View -> Symbols 或从 Market Watch 上下文菜单打开该对话框。该列表包括经纪商提供的交易品种和本地创建的 自定义交易品种 。可以使用 SymbolsTotal 函数来计算交易品种的总数。
int SymbolsTotal(bool selected)
selected 参数指定是仅请求 Market Watch 中的交易品种 (true),还是请求所有可用的交易品种 (false)。
SymbolName 函数通常与 SymbolsTotal 一起使用。该函数通过交易品种的索引返回交易品种的名称(这里不考虑将交易品种存储分组到逻辑文件夹中,请参见特性 SYMBOL_PATH)。
string SymbolName(int index, bool selected)
index 参数用于指定所请求交易品种的索引。 Index 索引值必须介于 0 到交易品种数之间,取决于第二个参数 selected 指定的请求上下文:true 将枚举限制为在 Market Watch 中选择的交易品种,而 false 则绝对匹配所有交易品种(类似于 SymbolsTotal)。因此,在调用 SymbolName 时,请将参数 selected 设置为与之前用于定义索引范围的 SymbolsTotal 调用相同的值。
如果出现错误,特别是如果请求的索引超出列表范围,该函数将返回一个空字符串,错误代码将被写入变量 _LastError。
值得注意的是,当启用 selected 选项时,函数对 SymbolsTotal 和 SymbolName 将返回由终端实际更新的交易品种列表信息,即,与服务器执行持续同步的交易品种以及 MQL 程序可获得报价历史的交易品种。该列表可能比 Market Watch 中显示的列表大,其中,元素是由用户或通过 MQL 程序显式添加的(要了解如何添加,请参阅Market Watch中的 编辑列表 一节)。这些交易品种在窗口中是不可见的,当需要它们来计算交叉汇率时,终端会自动连接它们。在交易品种特性中,有两个特性可用于区分显式选择 (SYMBOL_VISIBLE) 和隐式选择 (SYMBOL_SELECT) 的选项;我们将在 交易品种状态检查一节中讨论。严格地讲,对于 SymbolsTotal 和 SymbolName 函数,将 selected 设置为 true 对应启用了 SYMBOL_SELECT 的扩展交易品种集,而不仅仅是 SYMBOL_VISIBLE 为 true 的扩展交易品种集。
Market Watch 交易品种返回的顺序与终端窗口中的顺序一致(需考虑用户可能进行重新排列,但不考虑按任何列排序(即使已启用)。不能以编程方式更改 Market Watch 中的交易品种顺序。
Symbols 的一般列表中的顺序由终端自己设定(Market Watch 的内容和排序方式不影响该顺序)。
例如,我们看一下简单脚本 SymbolList.mq5,用于将可用的交易品种打印到日志中。通过输入参数 MarketWatchOnly,用户可将列表限定为 Market Watch 交易品种(如果参数为 true),也可获取完整列表 (false)。
#property script_show_inputs
|
以下是一个日志示例。
Total symbol count: 10
|