MT4智能交易编程教程-绘画风格
当创建一个自定义指标,可以指定18字节的图解测绘中任意一种(显示在基本图表窗口或者图表子窗口),其价格指定在ENUM_DRAW_TYPE 计算式中。 在一个自定义指标中,可以使用任意指标新建/绘画风格,为存储必要数据,每个建筑风格要求5种全局数组数组中的一个。通过使用SetIndexBuffer()函数可使这些数据数组与指标缓冲区绑定在一起,ENUM_INDEXBUFFER_TYPE数据类型是每个缓冲区指定的。 依据绘图风格,需要1-4个缓冲区(显示为INDICATOR_DATA)。如果该风格承认兼容的动态交替颜色(所有包含在颜色中的名称),就需要更多颜色的缓冲区(指示类型INDICATOR_COLOR_INDEX)。在价值缓冲区与风格相一致时,颜色缓冲区会受到限制。 ENUM_DRAW_TYPE ID | 描述 | 数据缓冲 | 颜色缓冲 | DRAW_NONE | 没有画线 | 1 | 0 | DRAW_LINE | 画线 | 1 | 0 | DRAW_SECTION | 线条 | 1 | 0 | DRAW_HISTOGRAM | 从0位线画柱状图 | 1 | 0 | DRAW_HISTOGRAM2 | 两个指标命令的柱状图 | 2 | 0 | DRAW_ARROW | 画箭头 | 1 | 0 | DRAW_ZIGZAG | 之字设计允许垂直界面 | 2 | 0 | DRAW_FILLING | 两层间的颜色 | 2 | 0 | DRAW_BARS | 以字符序列展示 | 4 | 0 | DRAW_CANDLES | 以蜡烛台序列展示 | 4 | 0 | DRAW_COLOR_LINE | 多色线 | 1 | 1 | DRAW_COLOR_SECTION | 多色分段 | 1 | 1 | DRAW_COLOR_HISTOGRAM | 从0线开始的多色直方图 | 1 | 1 | DRAW_COLOR_HISTOGRAM2 | 两个指标缓冲区的多色直方图 | 2 | 1 | DRAW_COLOR_ARROW | 描绘多色箭头 | 1 | 1 | DRAW_COLOR_ZIGZAG | 多色之字形 | 2 | 1 | DRAW_COLOR_BARS | 多色字节 | 4 | 1 | DRAW_COLOR_CANDLES | 多色蜡烛台 | 4 | 1 |
提取所选描绘类型标识符,ENUM_PLOT_PROPERTY列表列出函数 PlotIndexSetInteger() 和 PlotIndexGetInteger() ENUM_PLOT_PROPERTY_INTEGER ID | 描述 | 属性类型 | PLOT_ARROW | DRAW_ARROW类型箭头代码
| uchar | PLOT_ARROW_SHIFT | DRAW_ARROW类型垂直箭头转换
| int | PLOT_DRAW_BEGIN | 在DataWindow中没有描绘和值的原始字节数量 | int | PLOT_DRAW_TYPE | 图解建筑类型 | ENUM_DRAW_TYPE | PLOT_SHOW_DATA | 在DataWindow中显示建筑值标志 | bool | PLOT_SHIFT | 在字节中与时间轴一起描绘的指标转换 | int | PLOT_LINE_STYLE | 画线类型 | ENUM_LINE_STYLE | PLOT_LINE_WIDTH | 画线层次 | int | PLOT_COLOR_INDEXES | 颜色数量 | int | PLOT_LINE_COLOR | 包含绘画颜色的缓冲区指标 | 颜色 修饰符 = 颜色数量指标 |
函数 PlotIndexSetDouble() ENUM_PLOT_PROPERTY_DOUBLE ID | 描述 | 属性类型 | PLOT_EMPTY_VALUE | 测绘空值,没有绘图 | double |
函数 PlotIndexSetString() ENUM_PLOT_PROPERTY_STRING ID | 描述 | 属性类型 | PLOT_LABEL | 显示在DataWindow中的指标图解系列的名称. When working with complex graphical styles requiring several indicator buffers for display, the names for each buffer can be specified using ";" as a separator. Sample code is shown in DRAW_CANDLES | string |
在自定义指标中,有5种类型可以使用绘画线条,他们只在或者厚度时是有效的 ENUM_LINE_STYLE ID | 描述 | STYLE_SOLID | 实线 | STYLE_DASH | 折线 | STYLE_DOT | 虚线 | STYLE_DASHDOT | 折点线 | STYLE_DASHDOTDOT | 双折点线 |
为了建立线条画类型和描绘类型,可以使用 PlotIndexSetInteger() 函数,使用函数 ObjectSetInteger() 可以标明斐波纳契引申厚度和描绘水平类型。 示例: - #property indicator_chart_window
- #property indicator_buffers 1
- #property indicator_plots 1
- //--- 指标缓冲区
- double MABuffer[];
- //+------------------------------------------------------------------+
- //| 自定义指标初始化函数 |
- //+------------------------------------------------------------------+
- void OnInit()
- {
- //--- 绑定数组和指数为0的指标缓冲区
- SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
- //--- 设置画线
- PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
- //--- 设置线型
- PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_DOT);
- //--- 设置线颜色
- PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrRed);
- //--- 设置线粗细
- PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
- //--- 为线设置标签
- PlotIndexSetString(0,PLOT_LABEL,"Moving Average");
- //---
- }
- //+------------------------------------------------------------------+
- //| 自定义指标重复函数 |
- //+------------------------------------------------------------------+
- int OnCalculate(const int rates_total,
- const int prev_calculated,
- const datetime &time[],
- const double &open[],
- const double &high[],
- const double &low[],
- const double &close[],
- const long &tick_volume[],
- const long &volume[],
- const int &spread[])
- {
- //---
- for(int i=prev_calculated;i<rates_total;i++)
- {
- MABuffer[i]=close[i];
- }
- //--- 为下次调用返回prev_calculated值
- return(rates_total);
- }
复制代码
|