用 XAverage、Average 在OnBarClose、OnBar里写均线代码的一些疑问

分别用 XAverage、Average在OnBarClose、OnBar里写均线代码,加载在合成橡胶br000 后复权1分钟图表上。用XAverage时,无论是OnBarClose、OnBar里写的,第一根K线就已经开始计算均线值(K线并没有满足5根、15根或30根),计算的依据是什么?而如果用Average写的话,OnBar里,也是从第一根K线就开始计算,但在OnBarClose里,第29根的时候计算,没到30根K线。为什么会出现这样的情况,有没有朋友指点一下。Params Numeric Length1(5); Numeric Length2(15); Numeric Length3(30); Vars Numeric Ma1; Numeric Ma2; Numeric Ma3; Numeric Ma1_1; Numeric Ma2_1; Numeric Ma3_1; Events OnInit() { //与数据源有关 Range[0:DataCount-1] { //=========数据源相关设置============== AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权 AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格 AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓 AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算 AddDataFlag(Enum_Data_NotGenReport()); //设置数据源不参与生成报告标志 } } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Ma1_1 = XAverage(C,Length1); Ma2_1 = XAverage(C,Length2); Ma3_1 = XAverage(C,Length3); Commentary("---OnBar---"); Commentary("Ma1_1:"+Text(Ma1_1)); Commentary("Ma2_1:"+Text(Ma2_1)); Commentary("Ma3_1:"+Text(Ma3_1)); } //下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组 OnBarClose(ArrayRef<Integer> indexs) { Ma1 = XAverage(C,Length1); Ma2 = XAverage(C,Length2); Ma3 = XAverage(C,Length3); Commentary("---OnBarClose---"); PlotNumeric("Ma1",Ma1); PlotNumeric("Ma2",Ma2); PlotNumeric("Ma3",Ma3); }

打开源码看一下,有判断起始和没有