result1 = Summation(data1.CurrentBar,6);
result2 = data1.Summation(data1.currentbar,6);
考察这两行代码。
result1 和 result2 计算的都是最近6根bar的currentbar序号的和,区别仅仅在于外面的summation一个是基于图层data0,一个是基于图层data1.
如果图层1和2的周期一致,函数summation的运行结果是一致的。
如果图层1和2的周期不一致,我们能看到结果有明显的区别。
我们设置data0为30分钟,data1为1小时
OnBar(ArrayRef<Integer> indexs)
{
Numeric result1;
Numeric result2;
commentary("currentbar="+text(data1.CurrentBar));
result1 = Summation(data1.CurrentBar,6);
result2 = data1.Summation(data1.currentbar,6);
Commentary("result1="+text(result1));
Commentary("result2="+text(result2));
}
result1 = 161 = 29 + 28 + 27 + 26 + 26 + 25
result2 = 159 = 29 + 28 + 27 + 26 + 25 + 24
对于函数来说,前缀的图层决定了他向前回溯的主序列是哪个图层。如果函数是data0,数据是data1,那么实际的计算过程就是在data0上逐一向前回溯,然后根据data0bar对应的data1bar取数据。