后台模拟时,有时候会出现下述问题:
1.后台精细化回测明细中有开仓,但实际模拟盘未开仓;
2.回测debugfile输出的文档中满足开仓条件,但THOLDING的输出为0;
请问这是什么原因导致的??谢谢!!

此主题相关图片如下:1.png


此主题相关图片如下:2.png
[此贴子已经被作者于2020/12/3 13:00:31编辑过]
用
TBUYHOLDINGEX()
TSELLHOLDINGEX()
输出持仓情况,这里不要用THOLDING。
另外你这个输出文本的代码和开仓的代码 的条件需要确保下控制的是一致的。你直接把输出语句和开仓语句写在一起。
1.TBUYHOLDINGEX()函数用在DEBUGFILE中不起作用;
2.关键问题是回测中有开仓,实际模拟中无开仓的问题。
代码如下:
BUYCOND:=BULL AND B_COND AND BVOL;
IF ISLASTBAR THEN
DEBUGFILE('D:\TEST.TXT',' buycond:%.0f',buycond);
IF BUYCOND THEN BEGIN
TSELLSHORT(1,0,MKT);
TBUY(TBUYHOLDINGEX('','',1)=0,CW%,MKT),PERTRADER;
IF ISLASTBAR THEN BEGIN
DEBUGFILE('D:\TEST.TXT','TBUYHOLDINGEX('','',1):%.0f',TBUYHOLDINGEX('','',1));
DEBUGFILE('D:\TEST.TXT','THOLDING:%.0f',THOLDING);
END
END
1.这里改下,那个括号去掉,否则程序这里会无法识别。
DEBUGFILE('D:\TEST.TXT','TBUYHOLDINGEX:%.0f',TBUYHOLDINGEX('','',1));
2.“关键问题是回测中有开仓,实际模拟中无开仓的问题。”模拟盘文本记录中的条件是否满足了呢?今天上午回测里面是有信号,但是模拟交易时候可能存在信号没捕捉到(固定轮询时间间隔内出的信号,然后又消失了)的问题。建议你可以再运行模拟观察下,是否会一直出现记录的条件满足,但是没有开仓的情况。
你加2句先 看下回测里面的第一次开仓的位置到底在什么地方:
tstr:=NUMTOSTR(date,0)+'_'+NUMTOSTR(time,0);
DEBUGFILE('D:\TEST.TXT',' 开仓位置:'+tstr,0);
这2句直接写在下单语句后面即可。
如果这里记录的开仓位置和回测明细里面的位置是一样的,那说明可能是持仓函数在输出时候的问题。我本地测试是记录的位置和回测里的位置是一致的。但是这个持仓在第一次时候记录的不一样。
1.模拟用的是K线走完,理论上不存在信号闪烁;
2.昨天下午开始模拟,24个品种,截止目前,有三个品种各出现了一次满足条件不开仓的问题;
3.分别回测了多个品种,还是会出现类似问题,输出的开仓位置和回测明细里的位置一致,如果是持仓函数输出的问题,那模拟的时候不应该出现这个问题呀。
此主题相关图片如下:1.png

此主题相关图片如下:2.png

第二个问题,你是如何判断满足条件不开仓呢? 是输出日志中条件满足了,但是账户栏没有委托记录吗? 后台是没法和图表直接做对比的,两者的运行机制有很大区别。 只能用日志输出跟踪是否满足了开仓条件。
另外,回测时的日志第一次满足条件时,持仓数量没显示可能是机制的问题,明天工作人员测试下实盘运行中是否有这个问题。