可用柱线数量 (Bars/iBars)

要按交易品种/周期查找时间序列中的柱线总数,有一个更简便的方法是使用函数 BarsiBars(这两个函数没有区别,iBars 的存在是为了与 MQL4 兼容)。

int Bars(const string symbol, ENUM_TIMEFRAMES timeframe)        

int iBars(const string symbol, ENUM_TIMEFRAMES timeframe)        

这些函数返回针对给定交易品种和周期,可供 MQL 程序使用的柱线数量。该值会受到终端的 OptionsMax. bars in chart 参数的影响(请参阅 时间序列的组织与存储技术特性章节中的相关注释)。例如,如果下载到终端的历史数据针对某个特定时间范围有 20,000 根柱线,但在设置中限制为 10,000 根,则以设置中的限制值为准。终端启动后,函数将立即返回 10,000 根柱线的数量。但随着新柱线生成,返回数量将逐渐增加(如果内存足够)。在 MQL5 中,可通过调用 TerminalInfoInteger(TERMINAL_MAXBARS)函数获取该限制值。

此外,Bars函数还提供另一个选项,允许你查找两个日期之间的柱线数量。

int Bars(const string symbol, ENUM_TIMEFRAMES timeframe, datetime start, datetime stop)

此类请求仅查询那些开盘时间在 startstop 范围内(含起始和结束时间)的柱线。无论 startstop 的指定顺序如何:该函数都将按照时间从早到晚的顺序来分析报价。

如果在调用Bars/iBars 函数时,具有指定参数的时间序列数据尚未生成,或尚未与交易服务器同步,则该函数将返回空值。此时,_LastError中的错误特性也将为 0(不存在错误,因为数据尚未下载或准备就绪)。收到 0 后,使用 SeriesInfoInteger(..., SERIES_SYNCHRONIZED) 检查特定时间范围的同步情况,或者使用特殊的 SymbolIsSynchronized 函数检查交易品种的同步情况。

关于如何使用这些函数的示例,将在下一章节的脚本 SeriesBars.mq5中展示,同时还会展示与之相关的 iBarShift 函数。