MT4指标编程入门(六):市场数据取值解析

MT4指标编程非常看重市场数据的取值,因为指标编程的很多问题本质上都与市场数据息息相关。

MT4指标编程入门(六):市场数据取值

一、预定义数组(MT4已内置,可直接调用)

开盘价、最高价、最低价、收盘价、成交量等历史数据,每根K线蜡烛都各有一个对应值,所以必须用数组来存储,MT4为此提供了几个预定义数组:

开盘价Open[]、最高价High[]、最低价Low[]、收盘价Close[]、成交量Volume[]、所属时间Time[]

上述数据均为双精度double型(即可精确到小数)。

这里需要注意位置编号的问题,最右边的K线蜡烛(也就是最新的一根)编号为0,第二根蜡烛编号为1,第三根蜡烛编号为2,即从右向左倒着计数。

Open[0]、High[0]、Low[0]、Close[0],表示最新的开盘价、最高价、最低价、收盘价

Open[1]、High[1]、Low[1]、Close[1],表示第2根K线蜡烛的开盘价、最高价、最低价、收盘价

Open[2]、High[2]、Low[2]、Close[2],表示第3根K线蜡烛的开盘价、最高价、最低价、收盘价

Open[3]、High[3]、Low[3]、Close[3],表示第4根K线蜡烛的开盘价、最高价、最低价、收盘价

Open[i]、High[i]、Low[i]、Close[i],表示第i+1根K线蜡烛的开盘价、最高价、最低价、收盘价

以此类DLSM外汇推……

注意:这些是数组,使用的是方括号。

二、预定义变量

买入价、卖出价属于实时价格,MT4用预定义变量Ask和Bid来表示,数值类型为double双精度。

还有一些常用的预定义变量,例如:

Bars表示图表中的蜡烛总数,类型为int整数型。

Digits表示当前货币对的小数位数,类型为int整数型,无日元币对为4,有日元币对为2,黄金石油等通常也为2。

Point表示当前货币对的点值,类型为双精度double型,无日元币对为0.0001,有日元币对为0.01,与Digits正好对应。

三、指标函数

1、价格、成交量、时间

这些函数都有三个参数:货币对名称、K线周期、位置序号。

开盘价:iOpen(symbol,timeframe,shift) 双精度double型

收盘价:iClose(symbol,timeframe,shift) 双精度double型

最高价:iHigh(symbol,timeframe,shift) 双精度double型

最低价:iLow(symbol,timeframe,shift) 双精度double型

成交量:iVolume(symbol,timeframe,shift) 双精度double型

所属时间:iTime(symbol,timeframe,shift) 日期时间datetime型

K线周期分为:1分钟图(PERIOD_M1)、5分钟图(PERIOD_M5)、15分钟图(PERIOD_M15)、30分钟图(PERIOD_M30)、1小时图(PERIOD_H1)、4小时图(PERIOD_H4)、DLSM外汇日线图(PERIOD_D1)、周线图(PERIOD_W1)、月线图(PERIOD_MN1)。

例:

iOpen("USDJPY",PERIOD_H1,0) 表示美元兑日元1小时图最新K线蜡烛的开盘价。

iClose("EURUSD",PERIOD_H4,2) 表示欧元兑美元4小时图第3根K线蜡烛的收盘价。

iClose("GBPUSD",PERIOD_H1,i) 表示英镑兑美元1小时图第i+1根K线蜡烛的收盘价。

iHigh(NULL,0,0) 既不指定商品,也不指定K线周期,用在哪个图表上就是哪个图表的数据。

2、移动平均值,返回双精度double型。

iMA(symbol,timeframe,period,ma_shift,ma_method,applied_price,shift)

参数共7个,分别为:商品名称、K线周期、均线周期、均线偏移、平均模式、价格种类、位置序号。

均线周期:10日均线的均线周期为10,20日均线的均线周期为20。

均线偏移:均线位置整体左右移动的偏移量。

平均模式:简单移动平均(MODE_SMA)、指数移动平均(MODE_EMA)、平滑移动平均(MODE_SMMA)、线性加权移动平均(MODE_LWMA)。

价格种类:收盘价(PRICE_CLOSE)、开盘价(PRICE_OPEN)、最高价(PRICE_HIGH)、最低价(PRICE_LOW)、中值(PRICE_MEDIAN)、典型价格(PRICE_TYPICAL)、加权价格(PRICE_WEIGHTED)。

例1:iMA("EURUSD",PERIOD_H1,20,0,MODE_SMA,PRICE_CLOSE,0)

表示:在欧元1小时图上,以收盘价计算的20小时简单移动平均线,最新K线所对应的值。

例2:iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2)

表示:在当前商品、当前K线周期图表上,以收盘价计算的20周期指数移动平均线,第3根K线所对应的值。

其他如MACD指标、威廉指标、RSI、SAR、布林线等指标的取值方式与移动平均线指标类似。

3、在数组中求元素的移动平均值,返回双精度double型。

iMAOnArray(数组名,总数,平均周期,均线偏移,平均模式,位置序号)

这个函数与iMA类似,不过数据源换成了数组。

从数组中不仅可以求得移动平均值,还可以通过相关函数求得RSI等指标值。

4、求自定义指标的值

我们经常自己编写一些自定义指标,这时可以用iCustom函数来获取自定义指标的值。

iCustom(商品名,K线周期,自定义指标名称,参数1,参数2,参数3,...,指标线编号,位置序号)

如果自定义指标只有一根指标线,则指标线编号为0。

如果自定义指标有多根指标线,则第一条指标线编号为0,第二条为1,第三条为2,以此类推。

例如:iCustom(NULL,0,"mymacd",12,26,9,2,0) 其中(12,26,9)为自定义指标mymacd的三个参数。

表示:求当前图表中,自定义指标mymacd(12,26,9)的第3条指标线在最新位置的值。