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