实盘日志:(为了防止开过多手数,用资金限制住了)
2013-06-21 09:45:35.593 【回报】***** : 已登录
2013-06-21 09:48:57.843 【后台】 启动后台程式化交易
2013-06-21 09:48:57.921 【后台】RB10 TBuy 已成功触发下单操作 价格:3463.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:48:57.921 【后台】下单已发送
2013-06-21 09:48:57.921 【后台】RB10 TSell 已成功触发下单操作 价格:1.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:48:57.921 【后台】实际账户持仓 0
2013-06-21 09:48:57.921 【后台】RB10 运行结束
2013-06-21 09:48:57.937 【下单】RB10 价3463.000000 量1 买卖0 类型0 开平0 账户****** Formula 1
2013-06-21 09:48:57.937 【下单】确认报单已发送 ID=-1338170679 RefID = 75
2013-06-21 09:48:57.968 【指令】收到回报指令 ID = -1338170679 RefID = 75
2013-06-21 09:48:57.984 【指令】收到回报指令 ID = -1338170679 RefID = 75
2013-06-21 09:48:57.984 【回报】******: rb1310 - 已报单 1 价格:3463 开 买
2013-06-21 09:48:58.015 【指令】收到回报指令 ID = -1338170679 RefID = 75
2013-06-21 09:48:58.015 【指令】收到成交回报指令 REFID = 75
2013-06-21 09:48:58.015 【回报】******: rb1310 - 已成交 1 价格:3463 开 买
2013-06-21 09:48:58.734 【后台】RB10 TSell 已成功触发下单操作 价格:3464.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:48:58.734 【后台】实际账户持仓 1
2013-06-21 09:48:58.734 【后台】下单已发送
2013-06-21 09:48:58.734 【后台】RB10 运行结束
2013-06-21 09:48:58.734 【下单】RB10 价3464.000000 量1 买卖1 类型0 开平2 账户****** Formula 1
2013-06-21 09:48:58.734 【下单】确认报单已发送 ID=-1338170678 RefID = 76
2013-06-21 09:48:59.296 【指令】收到回报指令 ID = -1338170678 RefID = 76
2013-06-21 09:48:59.296 【回报】11801026 : rb1310 - 已报单 1 价格:3464 平 卖
2013-06-21 09:48:59.296 【指令】收到回报指令 ID = -1338170678 RefID = 76 (到这里平仓的单子已经下了,并且有回报了,但是还没有成交哦,怎么下面还有开仓的动作呢?)
2013-06-21 09:48:59.718 【后台】RB10 TBuy 已成功触发下单操作 价格:3463.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:48:59.718 【后台】下单已发送
2013-06-21 09:48:59.718 【后台】RB10 TSell 已成功触发下单操作 价格:3464.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:48:59.718 【后台】实际账户持仓 0
2013-06-21 09:48:59.718 【后台】RB10 运行结束
2013-06-21 09:48:59.718 【下单】RB10 价3463.000000 量1 买卖0 类型0 开平0 账户****** Formula 1
2013-06-21 09:48:59.718 【下单】确认报单已发送 ID=-1338170677 RefID = 77
2013-06-21 09:49:00.421 【回报】****** : rb1310 - 综合交易平台:资金不足(用资金限制了实盘的开仓,但这不是个办法啊!)
2013-06-21 09:49:00.750 【后台】RB10 TBuy 已成功触发下单操作 价格:3463.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:49:00.750 【后台】下单已发送
2013-06-21 09:49:00.750 【后台】RB10 TSell 已成功触发下单操作 价格:3464.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:49:00.750 【后台】实际账户持仓 0
2013-06-21 09:49:00.750 【后台】RB10 运行结束
2013-06-21 09:49:00.750 【下单】RB10 价3463.000000 量1 买卖0 类型0 开平0 账户****** Formula 1
2013-06-21 09:49:00.750 【下单】确认报单已发送 ID=-1338170676 RefID = 78
2013-06-21 09:49:01.781 【后台】RB10 TSell 已成功触发下单操作 价格:3464.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:49:01.781 【后台】实际账户持仓 0
2013-06-21 09:49:01.781 【后台】RB10 运行结束
2013-06-21 09:49:02.062 【回报】******: rb1310 - 综合交易平台:资金不足(用资金限制了实盘的开仓,但这不是个办法啊!)
2013-06-21 09:49:02.812 【后台】RB10 TCANCELEX 出现信号 类型:2 帐号:
2013-06-21 09:49:02.812 【后台】RB10 TSell 已成功触发下单操作 价格:0.000000 数量:1 类型:1 账户: 品种:RB10
2013-06-21 09:49:02.812 【后台】实际账户持仓 0
2013-06-21 09:49:02.812 【后台】RB10 运行结束
2013-06-21 09:49:02.968 【指令】收到回报指令 ID = -1338170678 RefID = 76
2013-06-21 09:49:02.984 【指令】收到回报指令 ID = -1338170678 RefID = 76
2013-06-21 09:49:03.000 【回报】****** : rb1310 - 已撤单 量:1
2013-06-21 09:49:03.750 【后台】RB10 TSell 已成功触发下单操作 价格:3464.000000 数量:1 类型:0 账户: 品种:RB10
2013-06-21 09:49:03.750 【后台】实际账户持仓 1
2013-06-21 09:49:03.750 【后台】下单已发送
2013-06-21 09:49:03.750 【后台】RB10 运行结束
后面还有一堆日志,最终在我帐户的交易记录中这个仓位是2013-06-21 09:49:31.187才成交的;
交易系统:
//条件判断
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);
//监控未成交单
WCJ:=TREMAINQTY( 1,'','');
//开仓和平仓
IF 条件 THEN BEGIN
TBUY(CONDBUY AND TBUYHOLDINGEX( '','',0 )=0 AND WCJ<1,1,LMT,CLOSE,0,'','');
TSELL(1,1,LMT,TAVGENTERPRICEEX2('','',0)+1,0,'','');
END
//撤未成交平多单并市价平
WCJSJTBUY:=TSUBMIT(2);
IF WCJSJTBUY>3 THEN BEGIN(如果3秒内没有成交就要撤单,市价平的,可是直到09:49:31.187才市价平)
TCANCELEX(1,2,'','');
TSELL(1,1,MKT,0,0,'','');
END
是呀,因为平仓还没有成交,那么再次开仓的报单不应该有啊;
系统写得不对?
怎么解决这个问题呢?
谢谢!
从你提交的后台的策略上来看,你只提供了系统记录的日志,但是有个重要的日志你没有记录,就是你应该在策略前期实验阶段将自己内部的日志加上去。比如
WCJ:=TREMAINQTY( 1,'','');
//开仓和平仓
IF 条件 THEN BEGIN
TBUY(CONDBUY AND TBUYHOLDINGEX( '','',0 )=0 AND WCJ<1,1,LMT,CLOSE,0,'','');
TSELL(1,1,LMT,TAVGENTERPRICEEX2('','',0)+1,0,'','');
END
条件 这个变量是至关重要的一个变量,你应该使用DEBUGFILE函数,将产生 条件 这几个相关变量通过日志文件自行记录下来,这样遇到情况,进一步结合系统日志和你自己记录的日志来分析问题。
由于你给出的代码公式不全,不知道你的 条件 这个怎么产生的,假设是由 条件1和条件2生成,那么你应该在你的公式中加入如下调试代码
WCJ:=TREMAINQTY( 1,'','');
//开仓和平仓
条件1:=***;
条件2:=****;
条件:=条件1 and 条件2;
DEBUGFILE('D:\TESTFILE.TXT','条件1=%0.f',条件1);
DEBUGFILE('D:\TESTFILE.TXT','条件2=%0.f',条件2);
DEBUGFILE('D:\TESTFILE.TXT','条件=%0.f',条件);
IF 条件 THEN BEGIN
TBUY(CONDBUY AND TBUYHOLDINGEX( '','',0 )=0 AND WCJ<1,1,LMT,CLOSE,0,'','');
TSELL(1,1,LMT,TAVGENTERPRICEEX2('','',0)+1,0,'','');
END
加上上面3行调试语句的目的在于,你可以通过记录盘中的变量变化,找出异常的不符合你条件的变量,顺藤摸瓜找出具体原因。
如果你对上述调试没有看懂,建议你参考
DEBUGFILE----使用日志方式完善您的策略
谢谢王老师!我再看看;