// 该函数只能在指标中使用,每次价格变动时调用一次
int OnCalculate(const int rates_total, // 图表上一共有多少根K线
const int prev_calculated, // 已经算过的K线的根数。首次加载时,所有K线都没算过,所以该值为0;
// 当OnCalculate执行过一次后,prev_calculated == rates_total;
// 当一根新的K线生成时,rates_total+1,此时只需计算新K线,rates_total > prev_calculated
const datetime &time[], // 每根K线的开盘时间序列数组,索引为0的元素为最新值,下同
const double &open[], // 开盘
const double &high[], // 最高
const double &low[], // 最低
const double &close[], // 收盘
const long &tick_volume[], // 报价
const long &volume[], // 真实交易量
const int &spread[]) // 点差
{
// printf("rates_total = %d, prev_calculated = %d", rates_total, prev_calculated);
if(prev_calculated == 0)
{
// 首次运行
for(int i = rates_total - 1; i >= 0; --i)
{
drawLineColorIndex(i, false);
}
}
else if(rates_total > prev_calculated)
{
// 一条K线刚好形成
// 这里要注意,K线刚好形成的时候,索引为0的K线是还没形成的新K线,刚形成的K线索引为1
drawLineColorIndex(1);
}
else if(rates_total == prev_calculated)
{
// 新的K线已经出现,但还没有形成,价格还在变动
// drawLineColorIndex(0);
}
else
{
// 不会进入这个分支,进入说明错了
}
return(rates_total);
}
MQL4中OnCalculate函数相关说明
于 2024-07-24 21:56:26 首次发布