外汇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)
该函数用于搜索指定时间对应的柱索引。若未找到正好匹配的柱,可通过exact参数控制返回值:false返回最近的柱,true返回-1。
参数说明:
symbol - 需计算指标的货币对,NULL表示当前货币对。
timeframe - 时间周期,0为当前周期。
time - 要查找的时间值(柱的开始时间)。
exact - 未找到时的返回模式,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),", "CBCX外汇平台, 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),", ",CBCX外汇平台 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)
该函数根据指定类型返回一定周期内的最低值所对应的位移。
参数说明:
symbol - 需计算指标的货币对,NULL表示当前货币对。
timeframe - 时间周期,0为当前周期。
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));
