请问一下多个数据源时起始bar数和最大回溯bar数是否可以分别设置?ONINIT中用range对每个数据源的起始bar数量和回溯bar数量分别设置可以不?下面代码最大回溯bar出现错误。
OnInit()
{
formula_params=[42,57,42,58,48,45,39,66,48,32,59,66,48,80,81,43,63,46,60,72,45,48,40,51,42];
Integer i = 0;
Range[i=0:DataCount-1]
{
//=========数据源相关设置==============
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
SetBeginBarMaxCount(formula_params[i]+1); //设置最大起始bar数
SetBackBarMaxCount(formula_params[i]+1); //设置最大回溯bar数
//=========交易相关设置==============
SetInitCapital(10000000); //设置初始资金为1000万
}
}
没有问题
检查你的字符吧
我测试增减数据源回测结果变化很大,并且指标线成锯齿状,后来我把最大回溯bar数改为100,指标线锯齿状消失,结果按常规判断也是正确,我怀疑最大回溯bar数 都是按数组的最后一个元素来设定的。您看一下中间那个的指标线成锯齿状。
Params
Vars
Numeric i;
Global Array<Integer> formula_params;
Series<numeric> avgout(0); //均线1
Series<numeric> myvolav(0);
Series<numeric> leprice(0);
Series<numeric> seprice(0);
Series<numeric> sigma(0);
Events
OnInit()
{
SubscribeBar("cu888.SHFE","1d",20100104,0,Enum_Data_ActivePeriod);
SubscribeBar("T9888.CFFEX","1D",20150320,0,Enum_Data_ActivePeriod);
SubscribeBar("sn888.SHFE","1D",20150327,0,Enum_Data_ActivePeriod);
formula_params=[42,81,43];
Integer i = 0;
Range[i=0:DataCount-1]
{
//=========数据源相关设置==============
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
SetBeginBarMaxCount(formula_params[i]+1); //设置最大起始bar数为10
SetBackBarMaxCount(formula_params[i]+1); //设置最大回溯bar数为10
//=========交易相关设置==============
SetInitCapital(10000000); //设置初始资金为100万
}
}
OnBar(ArrayRef<Integer> indexs)
{
Integer i = 0;
Range[i=0:DataSourceSize() - 1]
{
//均线指标计算 +
Avgout = Average(close,formula_params[i]);
PlotNumeric( "Avgout",Avgout);
sigma = StandardDev(close,formula_params[i],2); //标准差 (StandardDev( close,length)*2)
leprice=avgout+sigma; //上轨道 均线+标准差
seprice= avgout-sigma; //下轨道 均线-标准差
PlotNumeric("leprice",leprice);
PlotNumeric("seprice",seprice);
}
}