关于Na1Sort2函数造成的信号闪烁问题

Range[0:DataSourceSize()-1] { Raise = Round(10000 * (Close[1] - Close[6]) / AvgTR[1],0); Drop = Round(10000 * (Close[6] - Close[1]) / AvgTR[1],0); } For i = 0 to DataSourceSize()-1 { ArrayRaise[i] = Data[i].Raise; ArrayDrop[i] = Data[i].Drop; ArrayRaiseID[i] = i; ArrayDropID[i] = i; } Na1Sort2(ArrayRaise,ArrayRaiseID,0,(DataSourceSize()-1),False); // 对上涨强度排序 这里会排序2、3次并形成信号闪烁 Na1Sort2(ArrayDrop,ArrayDropID,0,(DataSourceSize()-1),False); // 对下跌强度排序 这里会排序2、3次并形成信号闪烁 Print(Text(Date)+"ArrayRaiseID"+TextArray(ArrayRaiseID)); Print(Text(Date)+"ArrayDropID"+TextArray(ArrayDropID));按照刘风老师对于截面策略的多品种排序,会发现Na1Sort2函数在多品种排序后,Print会形成几次数组,根据数组发单造成回测的信号闪烁,不知道这里面的问题是什么,计算上涨下跌调用的数据都是历史数据。

不知道你说的什么几次数组猜测如果你这个代码在onbar下面实时tick是每次运行的每个tick都会排序一次,如果价格变动过多的话,排序的结果自然马上变化解决方法:走完K线执行开平仓

回复:感谢您的回复!我也以为是调用了实时的数据造成的信号的闪烁,但是我反复检查并且确认只是用了回溯的数据,还是会有这样的问题。所以怀疑是不是Na1Sort2函数哪里有问题或者使用错误Params //此处添加参数 Vars //此处添加变量 Numeric i; Series<Numeric> LastClose; Array<Numeric> ArrayLastClose; Array<Integer> ArrayLastCloseID; Events //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作 OnInit() { Range[0:DataCount-1] { AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权 AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格 AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓 AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算 } } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Range[0:DataSourceSize()-1] { LastClose = Close[1]; } For i = 0 to DataSourceSize()-1 { ArrayLastClose[i] = Data[i].LastClose; ArrayLastCloseID[i] = i; } Na1Sort2(ArrayLastClose,ArrayLastCloseID,0,DataSourceSize-1,False); Print(Text(CurrentBar)+"ArrayLastCloseID"+TextArray(ArrayLastCloseID)); }