MQL4自定义指标编写相关函数(一)

阅读 :
欢迎访问 外 汇 邦 WWW.WaiHuiBang.com

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

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

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

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);//---- 显示在DataWindow窗口    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个指标线指标值的缓冲区      // ...    }
欢迎访问 外 汇 邦 WWW.WaiHuiBang.com
本文标题:MQL4自定义指标编写相关函数(一) - MT4平台MQL4编程学习
本文地址:http://www.ea666.cn/fxschool/autotrading/mql4/49045.html

相关文章

  • 外汇EA编程教程――数据类型

      所有的程序就是对数据进行操作,我们根据不同的需求对数据定义不同的类型,比如数字类型的数据用于操作数组。价格数据使用浮点型类型数据,MQL本身没有货币类型的数据类型。 不同的数据类型有着不同的处理速度,其中...

    MQL4编程学习
  • 外汇EA编程教程大全之价格函数

    任何可见货币对/时间周期的价格数据的一组函数。iBars iBarShift iClose iHigh iHighest iLow iLowest iOpen iTime iVolume int iBars( string symbol, int timeframe)在指定的图表内返回柱...

    MQL4编程学习
  • MQL4基础:数据类型

    目录[hide]类型转换 整型常量 字符常量 布尔型常量 浮点常量(双精度常量) 字符串常量 颜色常量 时间日期常量任何程序都要依靠数据来运行,数据因日的不同可以有不同的类型。比如,数组可以存取整型数据,价格可以...

    MQL4编程学习
  • 外汇EA自动化交易的语言mq4

    MetaQuotes Language 4 (MQL4) 是一种新的内置型程序用来编写交易策略。 这种语言可以创建你自己的智能交易,使自己的交易策略能够完全自动地执行。而且,MQL4 还能自定义客户指标,脚本和数据库。内包含了大量可以分...

    MQL4编程学习
  • 如何选择盈利的外汇EA?其实只需看这四点
    如何选择盈利的外汇EA?其实只需看这四点

    外汇EA(Expert Advisor),即智能交易系统或交易机器人,常常用在外汇交易中。EA其实一开始是随着MT4交易平台引入进来的,如今在外汇交易市场中EA变得越来越火。国内各种免费和付费的EA更是多如牛毛。市场上EA太多,已经很难分...

    MQL4编程学习
你可能感兴趣