13 MQL4自定义指标使用函数

一组用于指标编写的函数。

13.1 IndicatorBuffers(指标缓存大小)

void IndicatorBuffers(    int count)

对于缓冲储存器分配记忆应用自定义指标计算。缓冲储存器的总数不能超过8或者是小于自定义缓冲 属性中所给出的值。 如果客户指标要求另外的缓冲器计数,那么这个功能必须使用为指定总额缓冲。

参量:

count      –      在指标缓冲器和8缓冲储存器之间分配缓冲储存器的总量。

示例:

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Silver

//—- 自定义参量

extern int FastEMA=12;

extern int SlowEMA=26;

extern int SignalSMA=9;

//—- 自定义缓冲

double ind_buffer1[];

double ind_buffer2[];

double ind_buffer3[];

//+——————————————————————+

//| Custom indicator initialization function |

//+——————————————————————+

int init()

{

//—- 使用2个添加缓冲。

IndicatorBuffers(3);

//—- 画出设定

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//—- 绘制3 个添加缓冲位置

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//—- DataWindow 和自定义窗口标签名称

IndicatorShortName(“OsMA(“+FastEMA+”,”+SlowEMA+”,”+SignalSMA+”)”);

//—- 初始化结束

return(0);

}

13.2 IndicatorCounted(已经计算过的数量)

int IndicatorCounted()

在自定义最后一次开启之后,函数返回柱的总数不会改变。计算过的柱数无须重新计算。大多数情况下, 同样数额的索引值不需要重估。函数应用到优化计算中。

注解: 最近的柱无须考虑计算, 在多数情况下, 这个柱是要被重估的。不过,自定义指标显示交易中的新柱的第一替克。 可能先前柱的最后一个替克没有处理的结果(因为在最后 一个替克进入时倒数第二个没有 处理 完成)客定义标将不会显示和计算。 在这样的情况下为了避免错误, IndicatorCounted()函数会返回前一个柱。

示例:

int start()

{

int limit;

int counted_bars=IndicatorCounted();

//—- 检验可能出现错误

if(counted_bars<0) return(-1);

//—- 最后数的柱将被重数

if(counted_bars>0) counted_bars–;

limit=Bars-counted_bars;

//—- 主环

for(int i=0; i<limit; i++)

{

//—- ma_shift set to 0 because SetIndexShift called abowe

ExtBlueBuffer[i]=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);

ExtRedBuffer[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);

ExtLimeBuffer[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);

}

//—- 完成

return(0);

}

13.3 IndicatorDigits(指标精确小数点)

void IndicatorDigits(    int digits)

设置精确格式(计数数字在小数点以后)使自定义值直观化。货币对精确价格 为默认值。 指标会添加到图表中。

参量:

digits      –      精确格式。

示例:

int init()

{

//—- 使用及计算2个添加缓冲。

IndicatorBuffers(3);

//—- 画出参量设置

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(Digits+2);

//—-一个自定义的3个缓冲

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//—- DataWindow 和自定义子窗口”简称”

IndicatorShortName(“OsMA(“+FastEMA+”,”+SlowEMA+”,”+SignalSMA+”)”);

//—- 初始化完成

return(0);

}

13.4 IndicatorShortName(指标简称)

void IndicatorShortName(    string name)

设置显示在数据窗口和子窗口中自定义指标的”简称”。

参量:

name      –      新简称。

示例:

int init()

{

//—-使用计算2个添加缓冲

IndicatorBuffers(3);

//—- 画出设定

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//—- 绘制3个添加缓冲位置

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//—- DataWindow 和自定义子窗口标签名称

IndicatorShortName(“OsMA(“+FastEMA+”,”+SlowEMA+”,”+SignalSMA+”)”);

//—- 初始化完成

return(0);

}

13.5 SetIndexArrow(设置箭头类型)

void SetIndexArrow(    int index, int code)

设置DRAW_ARROW 类型的自定义线为一个箭头货币对。
箭头代码范围限于33到255之间。

参量:

index      –      索引线。必须在0至7之间。

code      –      来自Wingdings数组常数的货币对代码。

示例:

int init()

{

//—- 2 个自定义缓冲

SetIndexBuffer(0,ExtUppperBuffer);

SetIndexBuffer(1,ExtLowerBuffer);

//—- 绘制参量设置

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,217);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,218);

//—- 在DataWindow窗口显示

SetIndexLabel(0,”Fractal Up”);

SetIndexLabel(1,”Fractal Down”);

//—- 初始化完成

return(0);

}

13.6 SetIndexBuffer(绑定指标缓存)

bool SetIndexBuffer(    int index, double array[])

对于自定义指标预定义的缓冲器绑定全球水平。需要使用IndicatorBuffers() 函数计算缓冲器的总数并且不能超过8。如果成功,返回TRUE,否则将返回FALSE。获得详细信息,请查看 GetLastError()函数。

参量:

index      –      索引线。必须在0至7之间。

array[]      –      数组存储计算指标值。

示例:

double ExtBufferSilver[];

int init()

{

SetIndexBuffer(0, ExtBufferSilver); // 第一线缓冲

// …

}

13.7 SetIndexDrawBegin(设置开始画线位置)

void SetIndexDrawBegin(    int index, int begin)

从给出指标线画出必须开始设置柱数字(从数据开始) 。指标线会从左到右画出所给出指标数组值左边部分不会显示在图表或数据窗口中。设置0作为默认值, 随后,所有数据将得出。

参量:

index      –      索引线。必须在0至7之间。

begin      –      第一个画出柱的数字位置。

示例:

int init()

{

//—-使用计算2个添加缓冲

IndicatorBuffers(3);

//—-画出设定

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//—- 绘制3个添加缓冲位置

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//—- DataWindow 和自定义子窗口标签名称

IndicatorShortName(“OsMA(“+FastEMA+”,”+SlowEMA+”,”+SignalSMA+”)”);

//—- 初始化完成

return(0);

}

13.8 SetIndexEmptyValue(将指标值预置为0)

void SetIndexEmptyValue(    int index, double value)

设置图画线省缺值。省缺值不得出或不被显示在DataWindow 。省缺值是EMPTY_VALUE。

参量:

index      –      索引线。必须在0至7之间。

value      –      新 “省缺值”。

示例:

int init()

{

//—-2个添加缓冲

SetIndexBuffer(0,ExtUppperBuffer);

SetIndexBuffer(1,ExtLowerBuffer);

//—- 画出参量设置

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,217);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,218);

//—- 值0 不显示

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

//—- 在DataWindow窗口不显示

SetIndexLabel(0,”Fractal Up”);

SetIndexLabel(1,”Fractal Down”);

//—- 初始化完成

return(0);

}

13.9 SetIndexLabel(设置标签文字)

void SetIndexLabel(    int index, string text)

在DataWindow 和tooltip中设置图画线描述。

参量:

index      –      索引线。必须在0至7之间。

text      –      标签文本。 NULL 表示索引值在DataWindow不显示。

示例:

//+——————————————————————+

//| Ichimoku Kinko Hyo initialization function |

//+——————————————————————+

int init()

{

//—-

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,Tenkan_Buffer);

SetIndexDrawBegin(0,Tenkan-1);

SetIndexLabel(0,”Tenkan Sen”);

//—-

SetIndexStyle(1,DRAW_LINE);

SetIndexBuffer(1,Kijun_Buffer);

SetIndexDrawBegin(1,Kijun-1);

SetIndexLabel(1,”Kijun Sen”);

//—-

a_begin=Kijun; if(a_begin<Tenkan) a_begin=Tenkan;

SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);

SetIndexBuffer(2,SpanA_Buffer);

SetIndexDrawBegin(2,Kijun+a_begin-1);

SetIndexShift(2,Kijun);

//—- 在DataWindow窗口Up Kumo线不显示

SetIndexLabel(2,NULL);

SetIndexStyle(5,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(5,SpanA2_Buffer);

SetIndexDrawBegin(5,Kijun+a_begin-1);

SetIndexShift(5,Kijun);

SetIndexLabel(5,”Senkou Span A”);

//—-

SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);

SetIndexBuffer(3,SpanB_Buffer);

SetIndexDrawBegin(3,Kijun+Senkou-1);

SetIndexShift(3,Kijun);

//—- 在DataWindow窗口Down Kumo 线不显示

SetIndexLabel(3,NULL);

//—-

SetIndexStyle(6,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(6,SpanB2_Buffer);

SetIndexDrawBegin(6,Kijun+Senkou-1);

SetIndexShift(6,Kijun);

SetIndexLabel(6,”Senkou Span B”);

//—-

SetIndexStyle(4,DRAW_LINE);

SetIndexBuffer(4,Chinkou_Buffer);

SetIndexShift(4,-Kijun);

SetIndexLabel(4,”Chinkou Span”);

//—-

return(0);

}

13.10 SetIndexShift(设置指标平移位置)

void SetIndexShift(    int index, int shift)

撤销画线设置。对于仓位值,画线将会平移到右侧或是平移到左侧。在当前柱计算值将被平移到相应的柱。

参量:

index      –      索引线。必须在0至7之间。

shift      –      平移植。

示例:

//+——————————————————————+

//| Alligator initialization function |

//+——————————————————————+

int init()

{

//—-当画出时线平移

SetIndexShift(0,JawsShift);

SetIndexShift(1,TeethShift);

SetIndexShift(2,LipsShift);

//—- 当画出时越过地一个位置

SetIndexDrawBegin(0,JawsShift+JawsPeriod);

SetIndexDrawBegin(1,TeethShift+TeethPeriod);

SetIndexDrawBegin(2,LipsShift+LipsPeriod);

//—- 绘制3个添加缓冲位置

SetIndexBuffer(0,ExtBlueBuffer);

SetIndexBuffer(1,ExtRedBuffer);

SetIndexBuffer(2,ExtLimeBuffer);

//—- 画出设定

SetIndexStyle(0,DRAW_LINE);

SetIndexStyle(1,DRAW_LINE);

SetIndexStyle(2,DRAW_LINE);

//—- 索引标签

SetIndexLabel(0,”Gator Jaws”);

SetIndexLabel(1,”Gator Teeth”);

SetIndexLabel(2,”Gator Lips”);

//—- 初始化完成

return(0);

}

13.11 SetIndexStyle(设置指标画线样式)

void SetIndexStyle(    int index, int type, void style, void width, void clr)

设置新型、样式、宽度和颜色为一条指定的显示线。

参量:

index      –      索引线。必须在0至7之间。

type      –      样式风格。可以是画线样式列表其中一个。

style      –      画线风格。可以应用单线。可以是划线风格列表其中一个。 EMPTY 值表示风格不变。

width      –      线的宽度。线的宽度可以是1,2,3,4,5。 EMPTY 值表示着风格不变。

clr      –      线的颜色。.现存的参量表示颜色将不会改变。

示例:

SetIndexStyle(3, DRAW_LINE, EMPTY, 2, Red);

13.12 SetLevelStyle(设置指标画线风格)

void SetLevelStyle(    int draw_style, int line_width, void clr)

函数设置指标水平线输入新型、样式、宽度和颜色输入数据。

参量:

draw_style      –      画线风格。可以应用单线。可以是划线风格列表其中一个。 EMPTY 值表示风格不变。

line_width      –      线的宽度。线的宽度可以是1,2,3,4,5。 EMPTY 值表示着风格不变。

clr      –      线的颜色。.现存的参量表示颜色将不会改变。

示例:

//—- 红色单线显示水平

SetLevelStyle(STYLE_SOLID,2,Red)

13.13 SetLevelValue(设置指标水平值)

void SetLevelValue(    int level, double value)

函数设置输入数据指标的水平线。该函数用于独立窗口显示的指标。

参量:

level      –      水平索引(0-31)。

value      –      给出的指标水平值。

示例:

SetLevelValue(1,3.14);