回测报告中的信号丢失。问题如图,回测报告中负收益与净值为1的策略单元都存在信号丢失的情况,且两个相同的克隆过来的策略单元信号丢失的部分还不一样。同样的策略放到旗舰版显示正常,放到TBQUANT就出现显示错误了。
另外,通过自查,不是因为分配资金不够或者单元资金亏完而导致的信号丢失,另外开仓信号已经通过PLOTBOLL自查显示无误,但不知道为什么没有交易信号。
源代码如下
Params
Numeric TRS(10); //移动幅度
Numeric M(250);//周期参数
Numeric S(2);//加权系数
Numeric Fund(20000); //投入保证金;
Vars
Numeric Lots(0);
Series<Numeric> MA1;
Series<Numeric> Slow_MA1;
Series<Numeric> MA2;
Series<Numeric> Slow_MA2;
Series<Numeric> DLH;
Series<Numeric> MADLH;
Series<Bool> DK;
Series<Bool> KK;
Series<Numeric> HighAfterEntry;//开仓后出现的最高价
Series<Numeric> LowAfterEntry;//开仓后出现的最低价
Series<Numeric> liQKA;
Series<Numeric> DliqPoint;
Series<Numeric> KliqPoint;
Series<Numeric> barcoutN;
Series<Numeric> HH;
Series<Numeric> LL;
Events
onBar(ArrayRef<Integer> indexs)
{
//记录开仓后高低点
If(BarsSinceentry == 0)
{
HighAfterEntry = High;
LowAfterEntry = Low;
}else
{
HighAfterEntry = Min(HighAfterEntry,High); // 空头止损,更新最低的最高价
LowAfterEntry = Max(LowAfterEntry,Low); // 多头止损,更新最高的最低价
}
Lots=Max(1,IntPart(Fund/(O*ContractUnit*BigPointValue*0.1))); //计算开仓手数
MA1=SMA((H+L+C)/3,M/S,S);//计算SMA指数加权均线
Slow_MA1=XAverage(MA1,M/S); //取MAJJ的均值 快线
MA2=SMA((H+L+C)/3,M,S);//计算长周期SMA指数加权均线
Slow_MA2=XAverage(MA2,M);//取MAMIN的均值 慢线
DLH=Slow_MA1-Slow_MA2;//计算加权指数波动差
MADLH=XAverage(DLH,M/S);//取短期均值
DK=(DLH>MADLH and DLH>0) and (MA1>Slow_MA1 and MA2>Slow_MA2 and Slow_MA1>Slow_MA2);//波动差大于周期内均值,短期指数均线大于周期内均值,长期指数均线大于周期内均值,短期指数均线大于长期均值;
KK=(DLH<MADLH and DLH<0) and (MA1<Slow_MA1 and MA2<Slow_MA2 and Slow_MA1<Slow_MA2);//波动差小于周期内均值,短期指数均线小于周期内均值,长期指数均线小于周期内均值,短期指数均线小于长期均值;
HH=Highest(H,M);
LL=Lowest(L,M);
PlotNumeric("SMA",MA1);
PlotNumeric("MA2",MA2);
If(DK[1] and H>=HH[1] and MarketPosition<>1 ) //开多
{
Buy(Lots,Max(Open,HH[1]));
LowAfterEntry = Max(Open,HH[1]);//保存多头开仓价格;
}
If(KK[1] and L<=LL[1] and MarketPosition<>-1) //开空
{
SellShort(Lots,Min(Open,LL[1]));
HighAfterEntry = Min(Open,LL[1]);//保存空头开仓价格;
}
//移动出场
If(MarketPosition == 0) // 自适应参数默认值;
{
liQKA = 1;
barcoutN=0;
}Else if(BarsSinceEntry>barcoutN) //当有持仓的情况下,liQKA会随着持仓时间的增加而逐渐减小,即止损止盈幅度乘数的减少。
{
liQKA = liQKA - 0.1;
liQKA = Max(liQKA,0.3);
barcoutN=BarsSinceEntry;
}
if(MarketPosition>0)
{
DliqPoint = LowAfterEntry - (Open*TRS/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感;
}
if(MarketPosition<0)
{
KliqPoint = HighAfterEntry + (Open*TRS/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感;
}
If(KliqPoint[1]>0 and MarketPosition<0)PlotNumeric("KliqPoint[1]",KliqPoint[1]);
if(DliqPoint[1]>0 and MarketPosition>0)PlotNumeric("DliqPoint[1]",DliqPoint[1]);
// 持有多单时
If(MarketPosition >0 And BarsSinceEntry >0 And Low <= DliqPoint[1] and DliqPoint[1]>0 and DliqPoint[1]>0 and BarsSinceEntry>0)
{
Sell(0,Min(Open,DliqPoint[1]));
DliqPoint=0;
barcoutN=0;
}
// 持有空单时
If(MarketPosition <0 And BarsSinceEntry >0 And High >= KliqPoint[1] and KliqPoint[1]>0 and KliqPoint[1]>0 and BarsSinceEntry>0)
{
BuyToCover(0,Max(Open,KliqPoint[1]));
KliqPoint=0;
barcoutN=0;
}
}
很奇怪 你的代码我测试出来是有效的
你的意思是j9000 i9000 rb000 sm000 都没出信号 本来应该出信号是吧?
对的 老师 你多去加载一些品种 50000根就知道了。会不会是软件版本的原因。
你有看下面的截图吗?我是从2016年开始的,跟你截图的配置是一样的
您多去加载几个品种,就是我图片里的那些品种去试一下。我也是排查了一遍没发现问题,但是信号显示就是不正常。