两个策略用的是同一个公式,但是看交易记录,开始交易的时间不同,第一个是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); //空头平仓
}
}
}
}
代码里好像没有订阅合约,手动订阅通过策略单元设置即可
手动订阅的
建议投稿分析,一般这种分析工作花费时间比较久,有空才会看, 容易忘记
已经私信留言了
上面贴的代码块格式不好看,重新贴了下,麻烦老师看看
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); //空头平仓
}
}
}
}
我其实没太看懂你的问题
正常来说,每个图层的起始时间都是可以独立设置的
你是不是样本没设置对
我其实两个策略用的公式是一样,不同的是一个策略里有最近一两年上的品种,一个策略里剔除了这些品种,然后看回测报告里的交易记录,发现没有最近一两年的品种,开始有交易记录的时间是2015,而有最近一两年的品种这个策略,开始有交易记录的时间是2023年,所以我觉得奇怪,为何两个开始有交易记录的时间不一样,如何解决呢
要看你代码是怎么写的。默认是不会有这个现象的
代码我已经贴在上面了,老师,麻烦你帮看看