绘画风格

当创建一个自定义指标,可以指定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中的指标图解系列的名称. 当使用复杂的需要多个指标缓冲区来显示的图形风格时,可以使用","作为分隔符来指定每个缓冲区的名称。示例代码显示在 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);

  }