跳至内容

绘画风格

绘画风格

当创建一个自定义指标,可以指定18字节的图解测绘中任意一种(显示在基本图表窗口或者图表子窗口),其价格指定在ENUM_DRAW_TYPE 计算式中。

在一个自定义指标中,可以使用任意指标新建/绘画风格,为存储必要数据,每个建筑风格要求5种全局数组数组中的一个。通过使用SetIndexBuffer()函数可使这些数据数组与指标缓冲区绑定在一起,ENUM_INDEXBUFFER_TYPE数据类型是每个缓冲区指定的。

依据绘图风格,需要1-4个缓冲区(显示为INDICATOR_DATA)。如果该风格承认兼容的动态交替颜色(所有包含在颜色中的名称),就需要更多颜色的缓冲区(指示类型INDICATOR_COLOR_INDEX)。在价值缓冲区与风格相一致时,颜色缓冲区会受到限制。

ENUM_DRAW_TYPE

ID描述数据缓冲颜色缓冲
DRAW_NONE没有画线10
DRAW_LINE画线10
DRAW_SECTION线条10
DRAW_HISTOGRAM从0位线画柱状图10
DRAW_HISTOGRAM2两个指标命令的柱状图20
DRAW_ARROW画箭头10
DRAW_ZIGZAG之字设计允许垂直界面20
DRAW_FILLING两层间的颜色20
DRAW_BARS以字符序列展示40
DRAW_CANDLES以蜡烛台序列展示40
DRAW_COLOR_LINE多色线11
DRAW_COLOR_SECTION多色分段11
DRAW_COLOR_HISTOGRAM从0线开始的多色直方图11
DRAW_COLOR_HISTOGRAM2两个指标缓冲区的多色直方图21
DRAW_COLOR_ARROW描绘多色箭头11
DRAW_COLOR_ZIGZAG多色之字形21
DRAW_COLOR_BARS多色字节41
DRAW_COLOR_CANDLES多色蜡烛台41

提取所选描绘类型标识符,ENUM_PLOT_PROPERTY列表列出函数 PlotIndexSetInteger()PlotIndexGetInteger()

ENUM_PLOT_PROPERTY_INTEGER

ID描述属性类型
PLOT_ARROWDRAW_ARROW类型箭头代码uchar
PLOT_ARROW_SHIFTDRAW_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_CANDLESstring

在自定义指标中,有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);
  }