关于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会形成几次数组,根据数组发单造成回测的信号闪烁,不知道这里面的问题是什么,计算上涨下跌调用的数据都是历史数据。

跨周期数据造成信号闪烁的问题
关于信号闪烁的问题
openint > openint [1] 这样设置开仓会不会造成信号闪烁?
关于信号闪烁的问题
关于信号闪烁的问题
关于信号闪烁
关于信号闪烁的问题
关于信号闪烁的问题
关于信号闪烁问题。
请教一下关于信号闪烁的问题

不知道你说的什么几次数组

猜测如果你这个代码在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));			
	}