分别用 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);
	}
打开源码看一下,有判断起始和没有