- DRAW_NONE
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
指标类型示例
MetaTrader 5 客户端包含可以使用相应函数用在MQL5程序的38种技术指标。但是MQL5语言的主要优势在于创建自定义指标的能力,然后将其用在EA交易或简单地应用在价格图表,用于技术分析。
指标的整个设定可以源自于几种基本的 绘图类型,主要为标图。标图是指展示数据的方式,可以用于指标计算,存储和提供请求。共有七种这类的基本标图类型:
- 线型
- 节(段)
- 直方图
- 箭头(符号)
- 禁区(填充的通道)
- 柱形图
- 日式蜡烛图
每个标图都需要一至五个双精度类型的数组,指标值可以存在这里。为方便起见,这些数组与指标缓冲区相联。一个指标缓冲区的数量必须使用编译程序指令提前声明,例如:
#property indicator_buffers 3 // 缓冲区数量
|
指标缓冲区的数量通常大于或等于指标标图的数量。
由于每个基本标图类型都可以有颜色变量或结构规范,所以MQL5标图类型的实际数量是18:
标图 |
描述 |
价值缓冲区 |
颜色缓冲区 |
---|---|---|---|
不直观显示在图表中,但是在数据窗口可以看到相应缓冲区的值 |
1 |
- |
|
在相应缓冲区的值上标绘线型(缓冲区的空值不符合) |
1 |
- |
|
绘制为相应缓冲区值之间的线段(通常有很多空值) |
1 |
- |
|
绘制为从零线到相应缓冲区值的直方图(可能有很多空值) |
1 |
- |
|
绘制为基于两个指标缓冲区的直方图(可能有空值) |
2 |
- |
|
绘制为符号(可能有空值) |
1 |
- |
|
类似 DRAW_SECTION 样式,但又不一样,它可以在柱上绘制垂直段 |
2 |
- |
|
颜色填充在两条线之间。相应缓冲区的2个值显示在数据窗口 |
2 |
- |
|
绘制为柱形。相应缓冲区的4个值显示在数据窗口 |
4 |
- |
|
绘制为日式蜡烛图。相应缓冲区的4个值显示在数据窗口 |
4 |
- |
|
您可以在不同柱上替换颜色或随时改变其颜色的线 |
1 |
1 |
|
类似 DRAW_SECTION 样式,但每段的颜色可以单独设置;颜色也可以动态设置 |
1 |
1 |
|
类似 DRAW_HISTOGRAM 样式,但每一条都可能有不同的颜色,您可以设置动态颜色 |
1 |
1 |
|
类似 DRAW_HISTOGRAM2 样式,但每一条都可能有不同的颜色,您可以设置动态颜色 |
2 |
1 |
|
类似 DRAW_ARROW 样式,但每个符号都可能有它的颜色。颜色可以动态改变 |
1 |
1 |
|
DRAW_ZIGZAG 样式具有节段单独颜色和动态颜色改变的选项 |
2 |
1 |
|
DRAW_BARS 样式具有柱形单独颜色和动态颜色改变的选项 |
4 |
1 |
|
DRAW_CANDLES 样式具有蜡烛图单独颜色和动态颜色改变的选项 |
4 |
1 |
指标缓冲区和数组之间的不同性
每个指标中,在其全局水平,您都应该声明一个或多个双精度类型的数组,然后必须使用SetIndexBuffer()函数用作指标缓冲区。若要绘制指标标图,只可使用指标缓冲区的值,任何其他数组都不能为此目的使用。另外,缓冲区的值展示在数据窗口。
一个指标缓冲区应该是动态的并且不需要规范大小 用作指标缓冲区的数组大小,通过程序端执行子系统自动设置。
数组绑定指标缓冲区以后,标引方向 像普通数组一样默认设置,但是您可以使用ArraySetAsSeries()函数更改访问数组元素的方式。默认下,指标缓冲区被用于存储用于标图的数据(INDICATOR_DATA)。
如果指标值的计算需要保持中间计算并存储每个柱的额外值,然后这个数组可以被声明为绑定期间的计算缓冲区(INDICATOR_CALCULATIONS)。对于中间值,您也可以使用正规数组,但是在这种情况下,程序员必须管理数组大小。
一些标图允许为每个柱形设置颜色。若要存储颜色信息,需要使用颜色缓冲区(INDICATOR_COLOR_INDEX)。颜色是整型color ,但是所有指标缓冲区必须是具有双精度类型的特点。颜色的值和辅助 (INDICATOR_CALCULATIONS) 缓冲区的值不能通过使用CopyBuffer()来获得。
指标缓冲区的数量必须使用编译程序指令#property indicator_buffers number_of_buffers来指定:
#property indicator_buffers 3 // 指标有3个缓冲区 |
一个指标可允许的最大缓冲区数量是512。
指标缓冲区和标图的关联
每个标图都是基于一个或多个指标缓冲区。所以,若要显示简单的蜡烛图,则需要四个值 - 开盘价,最高价,最低价和收盘价。相应地,若要以蜡烛图的形式显示一个指标,必须为它们声明4个指标缓冲区和4个双精度类型的数组。例如:
//--- 指标有4个指标缓冲区
|
图形标图根据标图号自动使用指标缓冲区。标图数从1开始,缓冲区数从0开始。如果第一个标图需要4个指标缓冲区,那么开始的4个指标缓冲区将被用于绘制它。这四个缓冲区应该使用SetIndexBuffer() 函数,以正确的标引连接相应的数组。
//--- 绑定数组和指标缓冲区
|
标图蜡烛图,指标将只使用这开始的四个缓冲区,因为“蜡烛图”的标图在第一个数字下已经公布。
改变示例,并添加简单的线型标图 - DRAW_LINE。现在假设线的编号为1,而蜡烛图的编号为2。缓冲区和标图的数量会增加。
//--- 指标有5个指标缓冲区
|
标图顺序已经改变,现在线型是第一位,紧跟着是日式蜡烛图。因此,缓冲区的顺序也相应改变 - 首先我们公布的是0标引线型缓冲区,然后是四个蜡烛图缓冲区。
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA); // 第一个缓冲区对应0标引
|
缓冲区和标图的数量仅可以通过使用编译程序指令来设置,不可以使用函数动态改变这些属性。
颜色版本样式
正如表格中所见,样式被分成两组。第一组包括名字中无COLOR的样式,我们调用这些基本样式:
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
在第二组,样式名称包括 COLOR,我们称它们颜色版本:
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
所有颜色版本的样式不同于基本版,因为他们允许为标图的每个部分指定颜色。标图的最小部分是柱形,所以我们可以说颜色版允许在每个柱形上设置颜色。
除了 DRAW_NONE 和 DRAW_FILLING样式,它们没有颜色版。
若要在每个柱上设置标图颜色,存储颜色标引的额外缓冲区已被添加到颜色版。这些标引在特定数组指出颜色数量,包括预定颜色组。颜色数组大小是64.这意味着每个样式的演示版都允许用64种不同颜色涂色标图。
在指定颜色数组中,颜色的设置和数量可以通过编译程序指令#property indicator_color来设置,在这里您可以通过逗号分隔指定所有必需的颜色。例如,指标中的这种输入:
//--- 定义8种颜色用于蜡烛图涂色(它们存储在指定数组)
|
说明标图 1,8种颜色被设置,将被置于指定数组。另外在程序中,我们将不会指定标图的颜色,但不仅它的标引。如果我们想要为K柱设置红色,那么来自数组的颜色标引值应该在指标的颜色缓冲区设置。红色首先在指令中指定,它对应0标引号。
//--- 设置蜡烛图颜色clrRed
|
颜色设置不会一劳永逸的一次性给予,它可以使用PlotIndexSetInteger()函数动态变化。例如:
//--- 为每个标引设置颜色,像属性PLOT_LINE_COLOR
|
指标和标图属性
对于指标标图,属性可以借助编译程序指令和使用相应的函数进行设置。在指标属性和函数之间的连接文章中阅读关于它的更多信息。使用指定函数动态改变指标属性允许创建更灵活的自定义指标。
图表上指标绘制的起点
在许多情况下,根据算法的条件,不可能在当前柱立即启动计算指标值,因为在历史记录中必须提供之前柱的最小数。例如,多种平滑类型意味着在之前的N柱上使用价格数组,并且在这些值的基础上,计算当前柱的指标值。
在这种情况下,既无法为开始的N柱计算指标值,这些值也不能显示在图表上而只能辅助计算进一步的值。为避免在历史记录的开始N柱上标图指标,则在相应的标图设置N值到PLOT_DRAW_BEGIN属性:
//--- 绑定数组和蜡烛图的指标缓冲区
|
在这里:
- number_of_plot 从0到indicator_plots-1的值 (从0开始的标图数)。
- N - 历史记录中开始柱的数量,在这里指标不能显示在图表上。