设置缓冲区和绘图的数量

指标要在图表上显示计算结果,必须定义一个或多个数组并将其声明为指标缓冲区。缓冲区数量通过以下指令设置:

#property indicator_buffers N

这里 N 是 1 到 512 之间的整数。该指令设置代码中可用于计算指标的缓冲区数量。

N 必须是整数常量(字面量)或等效宏定义。由于这是预处理指令,在源代码预处理阶段尚不存在变量(即使带有 const修饰符)。

然而,仅靠缓冲区不足以将计算数据可视化。在 MQL5 中,可视化系统采用两级结构。第一级由指标缓冲区构成,也就是动态数组,用于存储待显示的数据。第二级负责管理这些数据的显示方式。它基于名为图形构造(或图表、绘图)的新实体构建。关键在于,不同的数据显示方式可能需要不同数量的指标缓冲区。例如,移动平均线每根柱线仅需一个值,因此单个指标缓冲区即可满足此类折线图需求。然而,要显示蜡烛图,则每根柱线需要 4 个值(开盘价、最高价、最低价、收盘价)。因此,一个这样的图形绘图需要 4 个指标缓冲区。

图表数量 (P) 也必须在源代码中使用特殊指令定义。

#property indicator_plots   P

在最简单的情况下,缓冲区和图表的数量相同。但我们很快会分析需要缓冲区数量多于图形构造的示例。除了特定类型的图形构造需要预定数量的缓冲区的情况外,我们有时还需要为中间计算分配一个或多个数组。此类数组不直接参与渲染,但包含用于构建渲染缓冲区的数据。当然,你可以将简单动态数组用于此类目的,而无需将其声明为缓冲区。但我们必须自行控制和调整它们的大小。将它们设置为缓冲区,从而指示终端分配内存,这样会更加便捷。

缓冲区和图形绘图的数量只能通过预处理指令设置;无法使用 MQL5 函数动态更改这些特性。

在确定缓冲区和图表的数量后,应在源代码中明确定义将作为指标缓冲区的数组。

我们来开始开发一个新的指标示例IndReplica1.mq5,以演示源代码中的必要组成部分。该指标的本质很简单:我们将在其唯一的缓冲区中显示接收到的data参数数组的值。如前所述,用户在将指标应用于图表时选择要传递到 data数组的特定时间序列;默认情况下将提供收盘价时间序列。

让我们添加声明一个缓冲区和一个图表的指令。

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1

这些指令并不分配缓冲区本身,而只是设置指标的特性,并让运行时系统为程序进一步确定和配置指定数量的数组做好准备。接下来,我们将演示如何将数组注册为缓冲区。