在MT5编程中,OnCalculate事件会因Tick数据的推送而触发。该事件主要通过两种方式进行调用:
int OnCalculate(const int rates_total, // 指标数组的全部元素个数
const int prev_calculated, // 前一次计算完成的指标数组元素个数
const int begin, // 指标数组中最早元素的起始序号
const double &price[]) // 本指标计算所需的K线单个数组
其中,price数组的理解相对有些难度。实际上,这个price数组是由指标初始阶段的一个参数#property indicator_applied_price来定义的。
通常的定义方式如下:
#property indicator_applied_price PRICE_OPEN
上述语句表示在OnCalculate事件中使用的price数组是开盘价(OPEN)对应的数组。
如果没有通过上述语句指定price数组,那么系统默认会使用收盘价(CLOSE)对应的数组。
总结:可以看到,上述第一种OnCalculate事件的调用方式仅适用于基于K线单个数组的技术指标。
================================
第二种调用方式:
int OnCalculate (const int rates_total, // 输入时间序列的大小
const int prev_calculated, // 上一次调用时已处理的柱数
const datetime& time[], // 时间数组
const double& open[], // 开盘价数组
const double& high[], // 最高价数组
const double& low[], // 最低价数组
const double& close[], // 收盘价数组
const long& tick_volume[], // Tick成交量数组
const long& volume[], // 实际成交量数组
const int& spread[] // 点差数组
);
第二种方式与第一种方式的主要区别在于:它引入了K线所有对应的数值数组,从而能够全面利用K线的各类数据进行我们所需的各种处理与操作。
免责声明:本文内容仅供参考,不构成投资建议。投资有风险,入市需谨慎。