首页学院交易策略EA智能交易文章详细

MQL4自定义指标编撰有关函数(一)

外汇网2021-06-17 09:40:44 55
汇外网 - 全球专业的黄金外汇门户导航行情资讯网站

本组函数用于设计和编撰自定义指标。

这些函数不能用在智能交易和脚本中。

  • IndicatorBuffers() – 指标报告缓冲区
  • IndicatorCounted() – 指标计数
  • IndicatorDigits() – 设置指标精度
  • IndicatorShortName() – 设置指标简称
  • SetIndexArrow() – 设置指标箭头符号
  • SetIndexBuffer() – 设置指标缓冲区位置
  • SetIndexDrawBegin() – 设置指标线起始位置
  • SetIndexEmptyValue() – 设置图表画线空值
  • SetIndexLabel() – 设置指标线标签
  • SetIndexShift() – 设置指标线偏移值
  • SetIndexStyle() – 设置指标线样式
  • SetLevelStyle() – 设置水平线样式
  • SetLevelValue() – 设置水平线值
IndicatorBuffers() – 指标报告缓冲区
void IndicatorBuffers(int count)

为指标缓冲区分配内存,用于自定义指标计算。缓冲区的个数不能胜过8个或者是差于在自定义缓冲区属性中所给出的值。

假使自定义指标要求更多的缓冲区用于统计,那么这个函数务必运用指定的总缓冲区数。

参数:

count - 分配缓冲区的总数。缓冲区数应当在 indicator_buffers常量值 和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);

//---- 报告窗口和自定义窗口的指标标签名称 IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");

//---- 初始化终结 return(0);

}

IndicatorCounted() – 指标计数
int IndicatorCounted()

在自定义指标上次计算运行之后,本函数返回已经计算好的的柱体(K线)数量。曾计算过的柱体(K线)不必从新计算。大部分情形下,相同的指标值不需要重算,所以本函数用于优化计算。

注:最新的柱体(K线)不必考虑重算,在多数情形下,这个柱子有必要重算,但是,有时会遇到边界情形,也就是在新柱体的第一个价位时从智能交易调用自定义指标。或许先前柱子的最后一个价位还没有处理完(由于在这一跳进入时上一跳还没有处理完),由于这个原因,自定义指标将不会被调用和计算。为了避免指标计算出错,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

ExtRedBuffer[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PR洲际交易所_MEDIAN,i);

ExtLimeBuffer[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PR洲际交易所_MEDIAN,i);

} //---- 完成 return(0);

}

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);

//---- 报告窗口和自定义窗口的指标标签名称 IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");

//---- 初始化完成 return(0);

}

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);

//---- 报告窗口和自定义窗口的指标标签名称 IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");

//---- 初始化完成 return(0);

}

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);

//---- 表明在Data万得ow窗口 SetIndexLabel(0,"Fractal Up");

SetIndexLabel(1,"Fractal Down");

//---- 初始化完成 return(0);

}

SetIndexBuffer() – 设置指标缓冲区位置
void SetIndexBuffer(int index, double array[])

将自定义指标预定义的缓冲区绑定到全局数组。需要计算指标缓冲区的个数由 IndicatorBuffers() 函数设定而且不能胜过8个。假使成功,返回TRUE,否则,将返回FALSE。假使想得到更详细的信息,可以调用 GetLastError() 函数。

参数:

index - 指标线。务必是 0 - 7 之间 array[] - 存储计算指标值的数组。

示例:

  double ExtBufferSilver[];  int init()    {      SetIndexBuffer(0, ExtBufferSilver);

// 第1个指标线指标值的缓冲区 // ... }

标签:

随机快审展示
加入快审,优先展示

加入VIP