外汇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));