请教:我想要解决的问题第一步是过滤连续信号的问题:
LASTBUY:= TENTERBARS(0)>0 AND (( TEXITBARS(0)<0 ) OR (TENTERBARS(0)<TEXITBARS(0))) ;
LASTSELL:=TEXITBARS(0)>0 AND (TEXITBARS(0)<TENTERBARS(0)) ;
TBUY(CONDBUY AND not(LASTBUY) ,10000,MKT,0,0,ZH1,PZ1 );
//如果上次不是卖出
TSELL(CONDSELL AND not(LASTSELL) ,10000,MKT,0,0,ZH1,PZ1);
这个在15分钟间隔 实盘模拟中看起来没问题,一买后一卖,
但是在后台程序化 回测中,无法过滤连续买卖,
用DEBUGFILE也是显示的一塌糊涂
截图看下你的回测结果,说明下你说的连续买卖是什么情况。
正在注册账号。。
请帮加如下debugfile内容:
2018-12-25 09:30:39.253 持仓=30000
2018-12-25 09:30:39.255 TODAYHOLDING=0
2018-12-25 09:30:39.256 HOLDING=0
2018-12-25 09:30:39.257 TENERBARS=-1
2018-12-25 09:30:39.258 TEXITBARS=-1
2018-12-25 09:30:39.259 LASTBUY=0
2018-12-25 09:30:39.261 LASTSELL=0
2018-12-25 09:30:39.262 DAYHOLDING=0
2018-12-25 09:30:39.271 持仓=30000
2018-12-25 09:30:39.272 TODAYHOLDING=0
2018-12-25 09:30:39.273 HOLDING=0
2018-12-25 09:30:39.275 TENERBARS=-1
2018-12-25 09:30:39.276 TEXITBARS=-1
2018-12-25 09:30:39.277 LASTBUY=0
2018-12-25 09:30:39.278 LASTSELL=0
2018-12-25 09:30:39.280 DAYHOLDING=0
2018-12-25 09:30:39.289 持仓=40000
2018-12-25 09:30:39.291 TODAYHOLDING=0
2018-12-25 09:30:39.292 HOLDING=0
2018-12-25 09:30:39.293 TENERBARS=-1
2018-12-25 09:30:39.294 TEXITBARS=-1
2018-12-25 09:30:39.296 LASTBUY=0
2018-12-25 09:30:39.297 LASTSELL=0

此主题相关图片如下:1.png
[此贴子已经被作者于2018/12/25 10:54:26编辑过]
1.HOLDING这个是图表上的持仓啊。和后台概念不一样的。还是说你这里面只是一个名称而已。贴下你debugfile的语句。
2.你这里用的TENTERBARS TEXITBARS 都是和后台交易监控

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

这里关联的。所以你看到你输出里面都是-1.
3.TENTERBARS TEXITBARS 相关的判断应该没能限制到你开平仓了。所以还得看你的CONDBUY CONDSELL 如何定义的了。
最好还是给下你的完整代码吧。
ZH1:='';
PZ1:='SH510500';
//条件判断
DIFF := EMA(CLOSE,S) - EMA(CLOSE,P);
DEA := EMA(DIFF,M);
MACD1 := 2*(DIFF-DEA);
CONDBUY:= MACD1>0;
CONDSELL:= MACD1<0;
//控制日内交易次数
//IF TTOTALDAYTRADE>=2 THEN EXIT;
LASTBUY:= TENTERBARS(0)>0 AND ( TEXITBARS(0)<0 OR (TENTERBARS(0)<TEXITBARS(0)) ) ;
LASTSELL:=TEXITBARS(0)>0 AND (TEXITBARS(0)<TENTERBARS(0) ) ;
a:=TBUYHOLDINGEX(ZH1 ,PZ1 ,2 );
DEBUGOUT('持仓=%.0f',a);
//DEBUGOUT('TODAYHOLDING=%.0f',TODAYHOLDING);
DEBUGOUT('THOLDING=%.0f',THOLDING);
DEBUGOUT('TENERBARS=%.0f',TENTERBARS(1));
DEBUGOUT('TEXITBARS=%.0f',TEXITBARS(1));
DEBUGOUT('LASTBUY=%.0f',LASTBUY );
DEBUGOUT('LASTSELL=%.0f', LASTSELL);
DEBUGFILE('C:\金字塔测试\test2.txt','持仓=%.0f',a);
DEBUGFILE('C:\金字塔测试\test2.txt','TODAYHOLDING=%.0f',TODAYHOLDING);
DEBUGFILE('C:\金字塔测试\test2.txt','THOLDING=%.0f',THOLDING);
DEBUGFILE('C:\金字塔测试\test2.txt','TENERBARS=%.0f',TENTERBARS(1));
DEBUGFILE('C:\金字塔测试\test2.txt','TEXITBARS=%.0f',TEXITBARS(1));
DEBUGFILE('C:\金字塔测试\test2.txt','LASTBUY=%.0f',LASTBUY );
DEBUGFILE('C:\金字塔测试\test2.txt','LASTSELL=%.0f', LASTSELL);
//如果上次不是买入
TBUY(CONDBUY AND not(LASTBUY) ,10000,MKT,0,0,ZH1,PZ1 );
//如果上次不是卖出
TSELL(CONDSELL AND not(LASTSELL) ,10000,MKT,0,0,ZH1,PZ1);
ENTERBARS(0)>0 AND ( TEXITBARS(0)<0 or="OR" (TENTERBARS(0)0 AND (TEXITBARS(0)
[此贴子已经被作者于2018/12/25 13:14:17编辑过]
不好意思,上面公式的最后一行是不存在的,可能编辑帖子的时候多加的
ENTERBARS(0)>0 AND ( TEXITBARS(0)<0 or="OR" (TENTERBARS(0)0 AND (TEXITBARS(0)
这个是监测399905,买卖510500的
以下是部分模拟实盘预警信息,
运行结束
18.12.25 13:23:03 399905
持仓=10000
18.12.25 13:23:03 399905
THOLDING=0
18.12.25 13:23:03 399905
TENERBARS=19
18.12.25 13:23:03 399905
TEXITBARS=226
18.12.25 13:23:03 399905
LASTBUY=1
18.12.25 13:23:03 399905
LASTSELL=0
18.12.25 13:23:03 399905
运行结束
18.12.25 13:24:03 399905
持仓=10000
18.12.25 13:24:03 399905
THOLDING=0
18.12.25 13:24:03 399905
TENERBARS=20
18.12.25 13:24:03 399905
TEXITBARS=227
18.12.25 13:24:03 399905
LASTBUY=1
18.12.25 13:24:03 399905
LASTSELL=0
18.12.25 13:24:03 510500
TSell 无有效可平仓数量
18.12.25 13:24:03 399905
TSell 已成功触发下单操作 价格:0 数量:10000
18.12.25 13:24:03 399905
运行结束
LASTBUY:= TENTERBARS(0)>0 AND (( TEXITBARS(0)<0 ) OR (TENTERBARS(0)<TEXITBARS(0))) ;
LASTSELL:=TEXITBARS(0)>0 AND (TEXITBARS(0)<TENTERBARS(0)) ;
这里面的 TENTERBARS TEXITBARS 没能限制到你的开平仓。因为回测时候这2函数返回值都是-1.
这2个函数依赖于监控的记录,所以回测时候这2个函数不能正确取值的。 你需要用其他方式去实现你的需求。
上面2行代码思路是什么?为什么不直接用持仓情况去判断上次是买还是卖?