使用来自 MQL 程序的现成指标

在上一章中,我们学习了如何开发自定义指标。用户可以将这些指标加载到图表上,并使用它们进行手动技术分析。但这并非使用指标的唯一方式。MQL5 允许通过编程方式创建指标实例并请求其计算数据。这一功能可通过以下两种途径实现:在将多个简单指标组合成更复杂的指标;在 EA 交易中基于指标信号实现自动或半自动交易。

只要了解指标参数及其计算数据在公共缓冲区中的位置和含义,即可构建这些新应用的时间序列并获取访问权限。

在本章中,我们将学习用于创建和删除指标以及读取其缓冲区的函数。这些知识不仅适用于用 MQL5 编写的自定义指标,还适用于大量内置指标。

与指标进行程序化交互的一般原则包括以下几个步骤:

  • 创建指标 描述符 ,指标描述符是系统响应特定函数调用(如 iCustomIndicatorCreate)所分配的唯一标识号,MQL 代码通过指标描述符指定所需指标的名称和参数
  • 使用 CopyBuffer 函数从描述符指定的指标缓冲区读取数据
  • 如果不再需要该指标,释放其句柄 (IndicatorRelease)

创建和释放描述符通常分别在程序初始化和反初始化阶段执行,而缓冲区的读取和分析则会根据需要重复进行(例如在分时报价到达时)。

除了需在程序执行期间动态更改指标设置的特殊情况以外,建议在 OnInit或全局对象类的构造函数中一次性获取指标描述符。

所有指标创建函数至少包含两个参数:交易品种和时间范围。可以传递 NULL 替代交易品种,这表示当前金融工具。此外,值 0 对应当前时间范围。也可以选择使用内置变量 _Symbol_Period。如有必要,可设置与图表无关的任意交易品种和时间范围。因此,尤其可以实现多资产和多时间范围指标。

创建指标实例后无法立即访问指标数据,因为缓冲区的计算需要一定时间。读取数据前,应使用 BarsCalculated 函数检查数据是否就绪(该函数也接受描述符作为参数,并返回已计算柱线数量)。否则,将收到错误,而非数据。虽然这并非致命错误(不会导致程序停止或卸载),但缺失数据会使程序失去意义。

在本章后续内容中,为简洁起见,我们将创建指标实例并获取其描述符的操作简称为“创建指标”。需将该术语与“创建自定义指标”这一相似术语区分开来,在上一章,“创建自定义指标”指的是编写指标的源代码。