问题已解决。
原本我以为是数组序列和时序列的错位的问题,结果是我犯了一个基本性错误。
修正后的代码如下:
//--- 主计算CZ
if(Limit > 1)
{
for (i = 0;i < Limit-1;i++)
{
CZ_Buffer[i]=(BD_Buffer[i] - BD_Buffer[i+1])*10;
}
}
else
{
if(Limit == 1)
{
CZ_Buffer[0]=(BD_Buffer[0] - BD_Buffer[1])*10;
}
}
指标代码如下:
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[],
const long &volume[],
const int &spread[])
{
//--- 设置计算范围
int i,Limit;
if (prev_calculated == 0)
Limit = rates_total;
else Limit = rates_total - prev_calculated;
printf("用于计算的柱数 %d",Limit);
//--- 辅助计算Var1
for (i = 0;i < Limit;i++)
{
Var1_Buffer[i]=((high[i]+low[i]+open[i]+close[i])/4)-iMA(NULL,0,BD_Long,0,MODE_EMA,PRICE_WEIGHTED,i);
}
//--- 主计算BD
for (i = 0;i < Limit;i++)
{
BD_Buffer[i]=iMAOnArray(Var1_Buffer,0,BD_Short,0,MODE_EMA,i)*1000;
}
//--- 主计算CZ
for (i = 0;i < Limit-1;i++)
{
CZ_Buffer[i]=(BD_Buffer[i] - BD_Buffer[i+1])*10;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
窗口错误如下:
2014.08.27 01:26:07.478 趋势波动_0826_1936 EURUSD,M1: CZ_2=-10737418159.732206
2014.08.27 01:26:26.198 趋势波动_0826_1936 EURUSD,M1: CZ_1=-10737418170.484831
以上错误,是在增加新的K线后出现,但只要在图表窗口右键"刷新",数据就能正常,请问这是什么问题?
图片附件,是存在错误的窗口截屏。