自定义指标属性
自定义指标属性
用在自定义指标中的指标缓冲区的数量是受限的,使用SetIndexBuffer()函数可以设计成自定义缓冲区,因为要存储,所有指定数据类型是有必要的,也可能是ENUM_INDEXBUFFER_TYPE其中一个值。
ENUM_INDEXBUFFER_TYPE
| ID | 描述 |
|---|---|
| INDICATOR_DATA | 描绘数据 |
| INDICATOR_COLOR_INDEX | 颜色 |
| INDICATOR_CALCULATIONS | 媒介运算的辅助缓冲区 |
自定义指标提供许多设置提供方便演绎,这些设置通过使用IndicatorSetDouble(),IndicatorSetInteger()和 IndicatorSetString() 函数来分别相应指标性质,指标属性的标识符列表在ENUM_CUSTOMIND_PROPERTY中。
ENUM_CUSTOMIND_PROPERTY_INTEGER
| ID | 描述 | 属性类型 |
|---|---|---|
| INDICATOR_DIGITS | 描绘指标值的精确度 | int |
| INDICATOR_HEIGHT | 修正指标窗口的高度(预处理命令 #property indicator_height) | int |
| INDICATOR_LEVELS | 指标窗口中的水平数量 | int |
| INDICATOR_LEVELCOLOR | 水平线颜色 | color 修饰符 = 层号 |
| INDICATOR_LEVELSTYLE | 水平线类型 | ENUM_LINE_STYLE 修饰符 = 层号 |
| INDICATOR_LEVELWIDTH | 水平线厚度 | int 修饰符 = 层号 |
| INDICATOR_FIXED_MINIMUM | 修正指标窗口最小值。该属性只能通过IndicatorSetInteger()函数写入 | bool |
| INDICATOR_FIXED_MAXIMUM | 修正指标窗口最大值。该属性只能通过IndicatorSetInteger()函数写入 | bool |
ENUM_CUSTOMIND_PROPERTY_DOUBLE
| ID | 描述 | 属性类型 |
|---|---|---|
| INDICATOR_MINIMUM | 指标窗口最小化 | double |
| INDICATOR_MAXIMUM | 指标窗口最大化 | double |
| INDICATOR_LEVELVALUE | 水平值 | double 修饰符 = 层号 |
ENUM_CUSTOMIND_PROPERTY_STRING
| ID | 描述 | 属性类型 |
|---|---|---|
| INDICATOR_SHORTNAME | 短指标名称 | string |
| INDICATOR_LEVELTEXT | 水平描述 | string 修饰符=层号 |
示例:
//--- 指标设置
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots 2
#property indicator_type1 DRAW_LINE
#property indicator_type2 DRAW_LINE
#property indicator_color1 clrLightSeaGreen
#property indicator_color2 clrRed
//--- 输入参量
extern int KPeriod=5;
extern int DPeriod=3;
extern int Slowing=3;
//--- 指标缓冲区
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//+------------------------------------------------------------------+
//| 自定义指标初始化函数 |
//+------------------------------------------------------------------+
void OnInit()
{
//--- 指标缓冲区绘图
SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);
SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);
SetIndexBuffer(2,HighesBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,LowesBuffer,INDICATOR_CALCULATIONS);
//--- 设置精确性
IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- 设置水平
IndicatorSetInteger(INDICATOR_LEVELS,2);
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,80);
//--- 为子窗口设置最大最小值
IndicatorSetDouble(INDICATOR_MINIMUM,0);
IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//--- 设置第一条画指数的柱
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,KPeriod+Slowing-2);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,KPeriod+Slowing+DPeriod);
//--- 为第二行设置STYLE_DOT类型
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);
//--- 为DataWindow和指标子窗口标签命名
IndicatorSetString(INDICATOR_SHORTNAME,"Stoch("+KPeriod+","+DPeriod+","+Slowing+")");
PlotIndexSetString(0,PLOT_LABEL,"Main");
PlotIndexSetString(1,PLOT_LABEL,"Signal");
//--- 设置画线空值
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- 完成初始化
}