请问老师关于多个数据源叠加后做排序轮动交易,怎么设定开始交易的时间呢?

data-href=

两个策略用的是同一个公式,但是看交易记录,开始交易的时间不同,第一个是2015年(里面的品种基本是老品种,日周期数据2000以上),第二个交易时间是2023年(里面品种包含了一些新品种),请问怎样可以让第二个策略交易时间从2015年开始呢?

Params

//此处添加参数


Vars


Series<Numeric> days120_bofu;

Series<Numeric> days120_zhangfu;

Series<Numeric> days120_diefu;

Series<Numeric> zhangfutrend120;

Series<Numeric> diefutrend120;

Series<Numeric> zhangcha250;

Series<Numeric> diecha250;

Series<Numeric> ma120zhangcha250;

Series<Numeric> ma120diecha250;

Series<Numeric> ma5zhangcha250;

Series<Numeric> ma5diecha250;

Series<Numeric> valueup;

Series<Numeric> valuedn;



global array<Numeric> upvaluearray;

global array<Integer> id_upvaluearray;

global array<Numeric> dnvaluearray;

global array<Integer> id_dnvaluearray;

Series<Numeric> sum;

Series<Numeric>sumn;

Events

OnInit()

{

PrintClear;

}

OnBarOpen(ArrayRef<Integer> indexs)

{

if(data[indexs[0]].TrueDate(0)<>data[indexs[0]].truedate(1))

{

arrayclear(upvaluearray);

arrayclear(dnvaluearray);

}

}

//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{

Numeric i;

sum = sum+1;

sumn = sum/10;

Commentary(计数器: +text(sumn));

//评价排序,每十天进行排序一次

if (IntPart(sumn) == sumn)

{

Range[i = 0:datasourcesize-1]

{

days120_bofu = Summation(Abs(close-close[1]));

days120_zhangfu = close - Lowestfc(close,120);

days120_diefu = Highestfc(close,120) - close;

zhangfutrend120 = days120_zhangfu / days120_bofu*100; //120日涨幅强度

diefutrend120 = days120_diefu / days120_bofu*100; //120日跌幅强度

zhangcha250 = (1-(Highestfc(High,250)-close)/Highestfc(High,250))*100;

diecha250 = (1-(close-Lowestfc(low,250))/Lowestfc(low,250))*100;

ma120zhangcha250 = AverageFC(zhangcha250,120);

ma120diecha250 = AverageFC(diecha250,120);

ma5zhangcha250 = AverageFC(zhangcha250,5);

ma5diecha250 = AverageFC(diecha250,5);

valueup = zhangcha250+ma120zhangcha250+ma5zhangcha250+zhangfutrend120;

valuedn = diecha250+ma120diecha250+ma5diecha250+diefutrend120;

//PlotNumeric(value涨,valueup);

//PlotNumeric(value跌,valuedn);

upvaluearray[i] = round(valueup,0);

dnvaluearray[i] = round(valuedn,0);

}

Commentary(upvaluearray + TextArray(upvaluearray));

Commentary(dnvaluearray + TextArray(dnvaluearray));

Numeric iup;//上涨品种序号

for iup = 0 to GetArraySize(upvaluearray)-1

{

id_upvaluearray[iup] = iup;

}

//Commentary(id_upvaluearray + TextArray(id_upvaluearray));

Na1Sort2(upvaluearray,id_upvaluearray, 0 ,(GetArraySize(upvaluearray)-1),False);//按照综合评价由高到底对品种序号排序

Commentary(涨评价排序+TextArray(id_upvaluearray));

Commentary(涨评价前1: +text(id_upvaluearray[0]));

Commentary(涨评价前2: +text(id_upvaluearray[1]));

Commentary(涨评价前3: +text(id_upvaluearray[2]));

Commentary(涨评价前4: +text(id_upvaluearray[3]));

//--------

Numeric idn;//下跌品种序号

for idn = 0 to GetArraySize(dnvaluearray)-1

{

id_dnvaluearray[idn] = idn;

}

//Commentary(id_跌valueazhrray + TextArray(id_dnvaluearray));

Na1Sort2(dnvaluearray,id_dnvaluearray, 0 ,(GetArraySize(dnvaluearray)-1),False);//按照综合评价由高到底对品种序号排序

Commentary(跌评价排序+TextArray(id_dnvaluearray));

Commentary(跌评价前1: +text(id_dnvaluearray[0]));

Commentary(跌评价前2: +text(id_dnvaluearray[1]));

Commentary(跌评价前3: +text(id_dnvaluearray[2]));

Commentary(跌评价前4: +text(id_dnvaluearray[3]));

//多头开仓


for i = 0 to 4

{

if (data[id_upvaluearray[i]].MarketPosition==0 and sum>=250 )

{

data[id_upvaluearray[i]].Buy(1,Close);

}

if (data[id_upvaluearray[i]].MarketPosition==1 and sum>=250)

{

Continue;

}

}

//空头开仓

for i = 0 to 4

{

if (data[id_dnvaluearray[i]].MarketPosition==0 and sum>=250 )

{

data[id_dnvaluearray[i]].SellShort(1,Close);

}

if (data[id_dnvaluearray[i]].MarketPosition==-1 and sum>=250)

{

Continue;

}

}

//排序在后面的品种持仓全部平仓

for i =5 to GetArraySize(id_upvaluearray)-1

{

if (data[id_upvaluearray[i]].BarsSinceEntry >= 10 and data[id_upvaluearray[i]].MarketPosition<>0)

{

data[id_upvaluearray[i]].sell(0,open);  //多头平仓

}

}

for i =5 to GetArraySize(id_dnvaluearray)-1

{

if (data[id_dnvaluearray[i]].BarsSinceEntry >= 10 and data[id_dnvaluearray[i]].MarketPosition<>0)

{

data[id_dnvaluearray[i]].BuyToCover(0,open); //空头平仓

}

}

}

}

横截面策略轮动开仓的问题
请问如何快速的获取到叠加全部品种在交易最早的k线开始,到交易最新k线间的时间刻度(数组或序列变量)
请教老师,如何求得最后20次交易的开始时间
开盘后2分钟开始交易
关于多数据源对齐的 SetBeginBarMaxCount疑问
交易开始前就发单
多数据源叠加的策略单元
如何在股票轮动的情况下,使得资金能够等权重分配到选中的股票上?
怎么从零开始学写交易策略
老师请问个问题,指数做信号 主连做交易回测。

代码里好像没有订阅合约,手动订阅通过策略单元设置即可

手动订阅的

建议投稿分析,一般这种分析工作花费时间比较久,有空才会看, 容易忘记

已经私信留言了

上面贴的代码块格式不好看,重新贴了下,麻烦老师看看

Params
	//此处添加参数

Vars

	Series<Numeric> days120_bofu;
	Series<Numeric> days120_zhangfu;
	Series<Numeric> days120_diefu;
	Series<Numeric> zhangfutrend120;
	Series<Numeric> diefutrend120;
	
	Series<Numeric> zhangcha250;
	Series<Numeric> diecha250;
	Series<Numeric> ma120zhangcha250;
	Series<Numeric> ma120diecha250;
	Series<Numeric> ma5zhangcha250;
	Series<Numeric> ma5diecha250;
	Series<Numeric> valueup;
	Series<Numeric> valuedn;
	


	global array<Numeric> upvaluearray;
	global array<Integer> id_upvaluearray;
	global array<Numeric> dnvaluearray;
	global array<Integer> id_dnvaluearray;
	Series<Numeric> sum;
	Series<Numeric>sumn;
	
	
Events
	OnInit()
	{
		PrintClear;
	}
	OnBarOpen(ArrayRef<Integer> indexs)
	{
		
		if(data[indexs[0]].TrueDate(0)<>data[indexs[0]].truedate(1))	
		{
			arrayclear(upvaluearray);
			arrayclear(dnvaluearray);
		}
	}
	//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
	OnBar(ArrayRef<Integer> indexs)
	{
		Numeric i;
		sum = sum+1;
		sumn = sum/10;
		Commentary(\"计数器: \"+text(sumn));
		//评价排序,每十天进行排序一次
		if (IntPart(sumn) == sumn)
		{
			Range[i = 0:datasourcesize-1]
			{
				days120_bofu = Summation(Abs(close-close[1]));
				days120_zhangfu = close - Lowestfc(close,120);
				days120_diefu = Highestfc(close,120) - close;
				
				zhangfutrend120 = days120_zhangfu / days120_bofu*100; //120日涨幅强度
				diefutrend120 = days120_diefu / days120_bofu*100; //120日跌幅强度
				
				zhangcha250 = (1-(Highestfc(High,250)-close)/Highestfc(High,250))*100;
				diecha250 = (1-(close-Lowestfc(low,250))/Lowestfc(low,250))*100;
				
				ma120zhangcha250 = AverageFC(zhangcha250,120);
				ma120diecha250 = AverageFC(diecha250,120);
				
				ma5zhangcha250 = AverageFC(zhangcha250,5);
				ma5diecha250 = AverageFC(diecha250,5);
				
				valueup = zhangcha250+ma120zhangcha250+ma5zhangcha250+zhangfutrend120;
				valuedn = diecha250+ma120diecha250+ma5diecha250+diefutrend120;
				
				//PlotNumeric(\"value涨\",valueup);
				//PlotNumeric(\"value跌\",valuedn);
				upvaluearray[i] = round(valueup,0);
				dnvaluearray[i] = round(valuedn,0);
			}
			Commentary(\"upvaluearray\" + TextArray(upvaluearray));
			Commentary(\"dnvaluearray\" + TextArray(dnvaluearray));
		
		
			Numeric iup;//上涨品种序号
			for iup = 0 to GetArraySize(upvaluearray)-1
			{
				id_upvaluearray[iup] = iup;
			}
			//Commentary(\"id_upvaluearray\" + TextArray(id_upvaluearray));
			Na1Sort2(upvaluearray,id_upvaluearray, 0 ,(GetArraySize(upvaluearray)-1),False);//按照综合评价由高到底对品种序号排序
			
			Commentary(\"涨评价排序\"+TextArray(id_upvaluearray));
			Commentary(\"涨评价前1: \"+text(id_upvaluearray[0]));
			Commentary(\"涨评价前2: \"+text(id_upvaluearray[1]));
			Commentary(\"涨评价前3: \"+text(id_upvaluearray[2]));
			Commentary(\"涨评价前4: \"+text(id_upvaluearray[3]));
			
			//--------
			
			Numeric idn;//下跌品种序号
			for idn = 0 to GetArraySize(dnvaluearray)-1
			{
				id_dnvaluearray[idn] = idn;
			}
			//Commentary(\"id_跌valueazhrray\" + TextArray(id_dnvaluearray));
			Na1Sort2(dnvaluearray,id_dnvaluearray, 0 ,(GetArraySize(dnvaluearray)-1),False);//按照综合评价由高到底对品种序号排序
			Commentary(\"跌评价排序\"+TextArray(id_dnvaluearray));
			Commentary(\"跌评价前1: \"+text(id_dnvaluearray[0]));
			Commentary(\"跌评价前2: \"+text(id_dnvaluearray[1]));
			Commentary(\"跌评价前3: \"+text(id_dnvaluearray[2]));
			Commentary(\"跌评价前4: \"+text(id_dnvaluearray[3]));
			
			//多头开仓

			for i = 0 to 4
			{
				if (data[id_upvaluearray[i]].MarketPosition==0  )
				{
					data[id_upvaluearray[i]].Buy(1,Close);
				}	
				if (data[id_upvaluearray[i]].MarketPosition==1 )
				{
					Continue;
				}
			
				
			}
			//空头开仓
			for i = 0 to 4
			{
				if (data[id_dnvaluearray[i]].MarketPosition==0 )
				{
					data[id_dnvaluearray[i]].SellShort(1,Close);
				}
					
				
				if (data[id_dnvaluearray[i]].MarketPosition==-1 )
				{
					Continue;
				}
			}
			//排序在后面的品种持仓全部平仓
			for i =5 to GetArraySize(id_upvaluearray)-1
			{
				if (data[id_upvaluearray[i]].BarsSinceEntry >= 10 and data[id_upvaluearray[i]].MarketPosition<>0)
				{
					data[id_upvaluearray[i]].sell(0,open);  //多头平仓
					
				}
			}
			for i =5 to GetArraySize(id_dnvaluearray)-1
			{
				if (data[id_dnvaluearray[i]].BarsSinceEntry >= 10 and data[id_dnvaluearray[i]].MarketPosition<>0)
				{
					
					data[id_dnvaluearray[i]].BuyToCover(0,open); //空头平仓
				}
			}
		}
	}
				
	
						
			

Params

//此处添加参数

Vars


Series<Numeric> days120_bofu;

Series<Numeric> days120_zhangfu;

Series<Numeric> days120_diefu;

Series<Numeric> zhangfutrend120;

Series<Numeric> diefutrend120;

Series<Numeric> zhangcha250;

Series<Numeric> diecha250;

Series<Numeric> ma120zhangcha250;

Series<Numeric> ma120diecha250;

Series<Numeric> ma5zhangcha250;

Series<Numeric> ma5diecha250;

Series<Numeric> valueup;

Series<Numeric> valuedn;



global array<Numeric> upvaluearray;

global array<Integer> id_upvaluearray;

global array<Numeric> dnvaluearray;

global array<Integer> id_dnvaluearray;

Series<Numeric> sum;

Series<Numeric>sumn;

Events

OnInit()

{

PrintClear;

}

OnBarOpen(ArrayRef<Integer> indexs)

{

if(data[indexs[0]].TrueDate(0)<>data[indexs[0]].truedate(1))

{

arrayclear(upvaluearray);

arrayclear(dnvaluearray);

}

}

//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{

Numeric i;

sum = sum+1;

sumn = sum/10;

Commentary(\"计数器: \"+text(sumn));

//评价排序,每十天进行排序一次

if (IntPart(sumn) == sumn)

{

Range[i = 0:datasourcesize-1]

{

days120_bofu = Summation(Abs(close-close[1]));

days120_zhangfu = close - Lowestfc(close,120);

days120_diefu = Highestfc(close,120) - close;

zhangfutrend120 = days120_zhangfu / days120_bofu*100; //120日涨幅强度

diefutrend120 = days120_diefu / days120_bofu*100; //120日跌幅强度

zhangcha250 = (1-(Highestfc(High,250)-close)/Highestfc(High,250))*100;

diecha250 = (1-(close-Lowestfc(low,250))/Lowestfc(low,250))*100;

ma120zhangcha250 = AverageFC(zhangcha250,120);

ma120diecha250 = AverageFC(diecha250,120);

ma5zhangcha250 = AverageFC(zhangcha250,5);

ma5diecha250 = AverageFC(diecha250,5);

valueup = zhangcha250+ma120zhangcha250+ma5zhangcha250+zhangfutrend120;

valuedn = diecha250+ma120diecha250+ma5diecha250+diefutrend120;

//PlotNumeric(\"value涨\",valueup);

//PlotNumeric(\"value跌\",valuedn);

upvaluearray[i] = round(valueup,0);

dnvaluearray[i] = round(valuedn,0);

}

Commentary(\"upvaluearray\" + TextArray(upvaluearray));

Commentary(\"dnvaluearray\" + TextArray(dnvaluearray));

Numeric iup;//上涨品种序号

for iup = 0 to GetArraySize(upvaluearray)-1

{

id_upvaluearray[iup] = iup;

}

//Commentary(\"id_upvaluearray\" + TextArray(id_upvaluearray));

Na1Sort2(upvaluearray,id_upvaluearray, 0 ,(GetArraySize(upvaluearray)-1),False);//按照综合评价由高到底对品种序号排序

Commentary(\"涨评价排序\"+TextArray(id_upvaluearray));

Commentary(\"涨评价前1: \"+text(id_upvaluearray[0]));

Commentary(\"涨评价前2: \"+text(id_upvaluearray[1]));

Commentary(\"涨评价前3: \"+text(id_upvaluearray[2]));

Commentary(\"涨评价前4: \"+text(id_upvaluearray[3]));

//--------

Numeric idn;//下跌品种序号

for idn = 0 to GetArraySize(dnvaluearray)-1

{

id_dnvaluearray[idn] = idn;

}

//Commentary(\"id_跌valueazhrray\" + TextArray(id_dnvaluearray));

Na1Sort2(dnvaluearray,id_dnvaluearray, 0 ,(GetArraySize(dnvaluearray)-1),False);//按照综合评价由高到底对品种序号排序

Commentary(\"跌评价排序\"+TextArray(id_dnvaluearray));

Commentary(\"跌评价前1: \"+text(id_dnvaluearray[0]));

Commentary(\"跌评价前2: \"+text(id_dnvaluearray[1]));

Commentary(\"跌评价前3: \"+text(id_dnvaluearray[2]));

Commentary(\"跌评价前4: \"+text(id_dnvaluearray[3]));

//多头开仓


for i = 0 to 4

{

if (data[id_upvaluearray[i]].MarketPosition==0  )

{

data[id_upvaluearray[i]].Buy(1,Close);

}

if (data[id_upvaluearray[i]].MarketPosition==1 )

{

Continue;

}

}

//空头开仓

for i = 0 to 4

{

if (data[id_dnvaluearray[i]].MarketPosition==0 )

{

data[id_dnvaluearray[i]].SellShort(1,Close);

}

if (data[id_dnvaluearray[i]].MarketPosition==-1 )

{

Continue;

}

}

//排序在后面的品种持仓全部平仓

for i =5 to GetArraySize(id_upvaluearray)-1

{

if (data[id_upvaluearray[i]].BarsSinceEntry >= 10 and data[id_upvaluearray[i]].MarketPosition<>0)

{

data[id_upvaluearray[i]].sell(0,open);  //多头平仓

}

}

for i =5 to GetArraySize(id_dnvaluearray)-1

{

if (data[id_dnvaluearray[i]].BarsSinceEntry >= 10 and data[id_dnvaluearray[i]].MarketPosition<>0)

{

data[id_dnvaluearray[i]].BuyToCover(0,open); //空头平仓

}

}

}

}


data-href=

我其实没太看懂你的问题

正常来说,每个图层的起始时间都是可以独立设置的

你是不是样本没设置对

我其实两个策略用的公式是一样,不同的是一个策略里有最近一两年上的品种,一个策略里剔除了这些品种,然后看回测报告里的交易记录,发现没有最近一两年的品种,开始有交易记录的时间是2015,而有最近一两年的品种这个策略,开始有交易记录的时间是2023年,所以我觉得奇怪,为何两个开始有交易记录的时间不一样,如何解决呢

要看你代码是怎么写的。默认是不会有这个现象的

代码我已经贴在上面了,老师,麻烦你帮看看