MQL4技术指标函数详解(二)

MQL4不仅能够计算当前图表中的任何指标,还可以计算任意有效货币对或图表时段的数据。当请求的数据(货币对名称或图表时段)不同于当前图表时,如果对应的图表未在客户端中打开,数据就需要从服务器下载。此时,错误信息ERR_HISTORY_WILL_UPDATED(4066-历史数据正在更新中)会被存储到last_error变量中,用户需要再次请求更新数据(参见ArrayCopySeries()示例)。

iAC() – 加速震荡指标

iAD() – 离散指标

iAlligator() – 鳄鱼指标

iADX() – 平均方向运动指数指标

iATR() – 平均真实波幅指标

iAO() – 动量震荡指标

iBearsPower() – 熊力指标

iBands() – 布林线指标

iBandsOnArray() – 基于数组计算布林线指标

iBullsPower() – 牛力指标

iCCI() – 顺势指标

iCCIOnArray() – 基于数组计算顺势指标

iCustom() – 自定义指标

iDeMarker() – 德马克指标

iEnvelopes() – 包络线指标

iEnvelopesOnArray() – 基于数组计算包络线指标

iForce() – 强力指标

iFractals() – 分形指标

iGator() – 鳄鱼振荡指标

iIchimoku() – 一目均衡表指标

iBWMFI() – 市场促进指数指标

iMomentum() – 动量指标

iMomentumOnArray() – 基于数组计算动量指标

iMFI() – 资金流量指标

iMA() – 移动平均线

iMAOnArray() – 基于数组计算移动平均线

iOsMA() – 移动平均振荡指标

iMACD() – 指数平滑异同移动平均线指标

iOBV() – 能量潮指标

iSAR() – 抛物线转向指标

iRSI() – 相对强弱指数指标

iRSIOnArray() – 基于数组计算相对强弱指数指标

iRVI() – 相对活力指数指标

iStdDev() – 标准差指标

iStdDevOnArray() – 基于数组计算标准差指标

iStochastic() – 随机震荡指标(KDJ)

iWPR() – 威廉 percent range 指标(%R)

iBullsPower() – 牛力指标

double iBullsPower(string symbol, int timeframe, int period, int applied_price, int shift) 用于计算牛力指标。

参数:

symbol - 要计算指标的货币对名称。NULL表示当前货币对。timeframe - 时间周期。可以是时间周期枚举中的任意值。LMAX官网0表示当前图表的时间周期。period - 计算的周期数。applied_price - 应用的价格,可以是应用价格枚举中的任意值。shift - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。示例:

double val=iBullsPower(NULL, 0, 13, PRICE_CLOSE, 0);iCCI() – 顺势指标

double iCCI(string symbol, int timeframe, int period, int applied_price, int shift) 用于计算顺势指标。

参数:

symbol - 要计算指标的货币对名称。NULL表示当前货币对。timeframe - 时间周期。可以是时间周期枚举中的任意值。0表示当前图表的时间周期。period - 计算的周期数。applied_price - 应用的价格,可以是应用价格枚举中的任意值。shift - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。示例:

if(iCCI(NULL,0,12,PRICE_TYPICAL,0) < iCCI(NULL,0,20,PRICE_TYPICAL,0)) return(0);iCCIOnArray() – 基于数组计算顺势指标

double iCCIOnArray(double array[], int total, int period, int shift) 基于数值型数组中的数据计算顺势指标。与iCCI()不同,iCCIOnArray函数不通过货币对名称、图表时段或请求价格的方式获取数据,而是要求价格数据事先准备好,并从左到右计算指标。为了能像序列数组那样存取数组元素(即从右到左),必须使用ArraySetAsSeries函数。

参数:

array[] - 需要计算数据的数组。total - 要参与计算的元素个数。0意味着使用整个数组。period - 计算的周期数。shift - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。示例:

if(iCCIOnArray(ExtBuffer,total,12,0) < iCCI(NULL,0,20,PRICE_TYPICAL,0)) return(0);iCustom() – 自定义指标

double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift) 用于计算指定的自定义指标并返回其值。自定义指标程序文件(*.EX4文件)需要预先编译,并且必须放在 terminal_directory/experts/indicators 目录内。

参数:

symbol - 要计算指标的货币对名称。NULL表示当前货币对。timeframe - 时间周期。可以是时间周期枚举中的任意值。0表示当前图表的时间周期。name - 自定义指标编译后的程序名。... - 参数设置(如果需要)。传递的参数及其顺序必须与自定义指标外部参数声明的顺序和类型一致。mode - 指标线索引。可以从0到7,并且必须与SetIndexBuffer函数使用的索引一致。shift - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。示例:

double val=iCustom(NULL, 0, "示例Ind", 13, 1, 0);iDeMarker() – 德马克指标

double iDeMarker(string symbol, int timeframe, int period, int shift) 用于计算德马克指标。

参数:

symbol - 要计算指标的货币对名称。NULL表示当前货币对。timeframe - 时间周期。可以是时间周期枚举中的任意值。0表示当前图表的时间周期。period - 计算的周期数。shift - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。示例:

double val=iDeMarker(NULL, 0, 13, 1);iEnvelopes() – 包络线指标

double iEnvelopes(string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, double deviation, int mode, int shift) 用于计算包络线指标。

参数:

symbol - 要计算指标的货币对名称。NULL表示当前货币对。timeframe - 时间周期。可以是时间周期枚举中的任意值。0表示当前图表的时间周期。ma_period - MA计算的周期数。ma_method - MA方法,可以是任意移动平均方法枚举值。ma_shift - MA偏移量。applied_price - 应用的价格,可以是应用价格枚举中的任意值。deviation - 与主线的百分比偏差。mode - 指标线的标识符,可以是指标线标识符中的对应值。shift - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。示例:

double val=iEnvelopes(NULL, 0, 13, MODE_SMA, 10, PRICE_CLOSE, 0.2, MODE_UPPER, 0);iEnvelopesOnArray() – 基于数组计算包络线指标

double iEnvelopesOnArray(double array[], int total, int ma_period, int ma_method, int ma_shift, double deviation, int mode, int shift) 基于数值型数组中的数据计算包络线指标。与iEnvelopes()不同,iEnvelopesOnArray函数不通过货币对名称、图表时段或请求价格的方式获取数据,而是要求价格数据事先准备好,并从左到右计算指标。为了能像序列数组那样存取数组元素(即从右到左),必须使用ArraySetAsSeries函数。

参数:

array[] - 需要计算数据的数组。total - 要参与计算的元素个数。0意味着使用整个数组。ma_period - MA计算的周期数。ma_method - MA方法,可以是任意移动平均方法枚举值。ma_shift - MA偏移量。deviation - 与主线的百分比偏差。mode - 指标线的标识符,可以是指标线标识符中的对应值。shift - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。示例:

double val=iEnvelopesOnArray(ExtBuffer, 0, 13, MODE_SMA, 0.2, MODE_UPPER, 0);