EA编程教程:掌握价格函数用法
在EA编程中,有一组用于获取不同货币对和周期价格数据的函数,它们是构建交易策略的基础工具。本文将为读者系统梳理这些实用函数,方便在编写智能交易系统时快速查阅。
主要涉及的价格函数包括:iBars、iBarShift、iClose、iHigh、iHighest、iLow、iLowest、iOpen、iTime、iVolume等。这些函数各有分工,下面逐一介绍其作用与用法。
int iBars( string symbol, int timeframe)
此函数用于获取指定图表中柱形的数量。对于当前图表,柱体总数信息还可以通过预定义变量Bars来读取。
参数说明:
symbol - 需要计算指标所依据的货币对名称,若设为NULL则代表使用当前货币对。timeframe - 时间周期,可选用任意时间周期枚举值,0表示当前图表的时间周期。示例:
Print("在货币对'EUROUSD'带有PERIOD_H1柱数",iBars("EUROUSD",PERIOD_H1)); int iBarShift( string symbol, int timeframe, datetime time, void exact)
该函数用于查找柱形开始的时间,并返回对应柱形的索引值。如果未找到指定时间的柱,函数将依据参数返回值,可能是-1或最近柱的编号。
参数说明:
symbol - 需要计算指标所依据的货币对名称,NULL代表当前货币对。timeframe - 时间周期,可以是任意时间周期枚举值,0为当前图表周期。time - 需要查找的时间值。exact - 未找到柱时的返回模式,DLSM外汇false表示返回最近柱,true表示返回-1。示例:
datetime some_time=D'2004.03.21 12:00'; int shift=iBarShift("EUROUSD",PERIOD_M1,some_time); Print("带有打开时间平移柱 ",TimeToStr(some_time)," 是 ",shift); double iClose( string symbol, int timeframe, int shift)
用于获取指定货币对在特定时间周期及偏移量上的柱形收盘价。如果历史数据未加载,则返回0。对于当前图表,收盘价信息也可从预定义数组Close[]中获取。
参数说明:
symbol - 货币对名称,NULL代表当前货币对。timeframe - 时间周期,0为当前图表周期。shift - 从指标缓冲器中获取的索引值。示例:
Print("对于USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ", iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ", iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i)); double iHigh( string symbol, int timeframe, int shift)
返回指定货币对在特定周期和偏移位置柱形的最高价。若历史数据为空,函数返回0。当前图表的高价信息可以使用High[]数组获取。
参数说明:
symbol - 货币对名称,NULL为当前货币对。timeframe - 时间周期,0为当前图表周期。shift - 指标缓冲器中的索引值。示例:
Print("对于USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ", iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ", iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i)); int iHighest( string symbol, int timeframe, int type, void count, void start)
该函数依据指定类型,在给定范围内找出最大值对应的柱形编号。
参数说明:
symbol - 货币对名称,NULL为当前货币对。timeframe - 时间周期,0为当前图表周期。type - 系列数组的识别符,可以是系列数据识别符中的任意值。count - 参与计算的周期数量。start - 起始柱的偏移量,相对于当前柱。示例:
double val; // 在范围内20个连续柱计算最大值 // 在当前图表上从第4个至第23个的索引 val=High[iHighest(NULL,0,MODE_HIGH,20,4)];
double iLow( string symbol, int timeframe, int shift) 返回指定货币对在特定周期和偏移位置的柱形最低价。若历史数据为空,则返回0。当前图表低价信息可从Low[]数组中读取。
参数说明:
symbol - 货币对名称,NULL为当前货币对。timeframe - 时间周期,0为当前图表周期。shift - 指标缓冲器中的索引值。示例:
Print("对于USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ", iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ", iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i)); int iLowest( string symbol, int timeframe, int type, void count, void start)
与iHighest类似,该函数用于查找指定范围内的最小值对应的柱形编号。
参数说明:
symbol - 货币对名称,NULL为当前货币对。timeframe - 时间周期。type - 系列数组的识别符。count - 参与计算的时间周期数量。start - 起始柱的偏移量。示例:
// 在范围内计算连续10个柱的最低值 // 在当前图表从第10个到第19个的索引 double val=Low[iLowest(NULL,0,MODE_LOW,10,10)]; double iOpen( string symbol, int timeframe, int shift)
该函数用于获取指定柱形的开盘价。若历史数据未加载,则返回0。当前图表的开盘价可通过Open[]数组读取。
参数说明:
symbol - 货币对名称,NULL为当前货币对。timeframe - 时间周期,0为当前图表周期。shift - 指标缓冲器中的索引值。示例:
Print("对于USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ", iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ", iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i)); datetime iTime( string symbol, int timeframe, int shift)
返回指定柱形的开盘时间值。若历史数据为空,函数返回0。当前图表的时间信息可通过Time[]数组获取。
参数说明:
symbol - 货币对名称,NULL为当前货币对。timeframe - 时间周期,0为当前图表周期。shift - 指标缓冲器中的索引值。示例:
Print("对于USDCHF H1当前货币对: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ", iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ", iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i)); double iVolume( string symbol, int timeframe, int shift)
用于获取指定柱形的成交量值。若历史数据未加载,返回0。当前图表的成交量信息可通过Volume[]数组读取。
参数说明:
symbol - 货币对名称,NULL为当前货币对。timeframe - 时间周期,0为当前图表周期。shift - 指标缓冲器中的索引值。示例:
Print("对于USDCHF H1的当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ", iOpen("USDCHF",PERIOD_H1,i),", ", iHigh("USDCHF",PERIOD_H1,i),", ", iLow("USDCHF",PERIOD_H1,i),", ", iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));
