
如图。我想在每根5分钟k线上取到对应的小时线close值,计算小时线macd的diff。问题是,光标在5分钟K移动时,虽然回测一小时之内的data1.close不会变,但以此为计算基础的diff_H的值,却在不断改变。5分钟线的第55分钟close等于小时线的close,这时的diff_H仍然不正确。SetBasePeriod(Data0.Frequency)是关闭的。代码如下:
Vars
Series<Numeric> Diff_H;
Events
OnInit()
{
SubscribeBar(Symbol, "H",20251201);
Range[0:1]
{
//SetBasePeriod(Data0.Frequency); //周期基准:5min
}
}
OnBar(ArrayRef<Integer> indexs)
{
Numeric diff = XAverage(Close, 12) - XAverage(Close, 26);
Diff_H = XAverage(Data1.Close, 12) -
XAverage(Data1.Close, 26);
Commentary("Data1.Open:"+Text(Data1.Open,0) +
",Data1.Close:"+Text(Data1.Close,0));
Commentary("diff:"+Text(diff,2));
Commentary("Diff_H:"+Text(Diff_H,2));
}XAverage(Data1.Close, 12)你对这个函数的理解应该是有问题的。
你应该是以为,这个函数的计算的是在大周期上,从最新一根bar往回数12根,取每根bar上的close计算加权平均。
实际上这个函数计算的是小周期上,从最新一根bar往回数12根,把每一根小周期bar对应的大周期bar的close进行计算加权平均。
你要的表达方式应该是
data1.XAverage(Data1.Close, 12)感谢老师的回复!
按您说的修改后,还是不能查询到正确的数值,查出来的是负值,实际是正数

感谢老师!改成Diff_H = Data1.XAverage(Data1.Close, 12) -Data1.XAverage(Data1.Close, 26);就可以了!
Diff_H = Data1.XAverage(Data1.Close, 12) - Data1.XAverage(Data1.Close, 26);
DEA_H = Data1.XAverage(Diff_H, 26);
请问老师,DEA_H 用上面的方法查不到,用DEA_H = XAverage(Diff_H, 26)能查到,但数值不正确
补充:实盘中,5分钟线的Diff_H的确会不断变化,直到5分钟线的第55分close等于小时线close,但为什么这时计算出的值也不一致?