下面分别是实盘后台撤单追单公式、程序化交易开平追设置,交易日志,请分析下最后没有追单的问题在哪里?公式和设置有没有错误
/////////////程序化交易开平追设置
下单40秒后未成交,10个变动价位追单,否则挂单不动
///////监控未成交单//对未成交单撤单,并追单
未成交时:=TSUBMITEX(0,'','');
if 未成交时>=50 then BEGIN
WCJD:=TREMAINQTY(0,'','');
kd:=TREMAINQTY(1,'','');
pd:=TREMAINQTY(2,'','');
kk:=TREMAINQTY(3,'','');
pk:=TREMAINQTY(4,'','');
IF WCJD>0 THEN BEGIN
TCANCELEX(1,0,'','');
tbuy(kd>0,WCJD,MKT,0,0,'','');
tsell(pd>0,WCJD,MKT,0,0,'','');
tbuyshort(kk>0,WCJD,MKT,0,0,'','');
tsellshort(pk>0,WCJD,MKT,0,0,'','');
交易记录:=37;
DEBUGFILE('E:\TESTic11.TXT','交易记录%.2f',交易记录);
DEBUGOUT('交易记录%.2f',交易记录);
END
end
//////////////信号记录
2018-06-29 13:00:05.923 交易记录37.00
////////////////交易日志
2018-06-29 11:25:05.694 【后台】IC00 运行结束
2018-06-29 11:26:04.397 【后台】IC00 运行结束
2018-06-29 11:27:05.694 【后台】IC00 运行结束
2018-06-29 11:28:11.522 【后台】IC00 运行结束
2018-06-29 11:29:05.257 【后台】IC00 TSellShort 第 142 行 策略:<ic后台> 出现信号
2018-06-29 11:29:05.257 【后台】IC00 TSellShort 已成功触发下单操作 价格:5132.600098 数量:1 类型:0 账户: 品种:IC00
2018-06-29 11:29:05.257 【后台】实际账户持仓 1
2018-06-29 11:29:05.257 【后台】下单已发送
2018-06-29 11:29:05.257 【后台】IC00 运行结束
2018-06-29 11:29:05.257 【下单】IC07 价5132.600098 量1 买卖0 类型0 开平1 账户7888888 Formula 1
2018-06-29 11:29:05.257 【下单】确认报单已发送 ID=-2107764037 RefID = 3184
2018-06-29 11:29:05.272 【指令】收到回报指令 ID = -2107764037 RefID = 3184
2018-06-29 11:29:05.272 【回报】7888888 : IC1807 - 已报单 1 价格:5132.6 平 买
2018-06-29 11:29:05.272 【指令】收到回报指令 ID = -2107764037 RefID = 3184
2018-06-29 13:00:05.923 【后台】IC00 TCANCELEX 出现信号 类型:0 帐号:
2018-06-29 13:00:05.923 【后台】IC00 TSellShort 第 281 行 策略:<ic后台> 出现信号
2018-06-29 13:00:05.923 【后台】IC00 TSellShort 已成功触发下单操作 价格:0.000000 数量:1 类型:1 账户: 品种:IC00
2018-06-29 13:00:05.923 【后台】实际账户持仓 0
2018-06-29 13:00:05.923 【后台】IC00 运行结束
2018-06-29 13:00:05.938 【指令】收到回报指令 ID = -2107764037 RefID = 3184
2018-06-29 13:00:05.938 【指令】收到回报指令 ID = -2107764037 RefID = 3184
2018-06-29 13:00:05.954 【回报】7888888 : IC1807 - 已撤单 量:1
2018-06-29 13:01:05.689 【后台】IC00 运行结束
2018-06-29 13:02:05.766 【后台】IC00 运行结束
2018-06-29 13:03:05.329 【后台】IC00 运行结束
从交易日志里发现这两句就出现错误,没有得到账户持仓,实际上是有的
2018-06-29 13:00:05.923 【后台】IC00 TSellShort 已成功触发下单操作 价格:0.000000 数量:1 类型:1 账户: 品种:IC00
2018-06-29 13:00:05.923 【后台】实际账户持仓 0
/////另一时段交易日志
2018-06-29 14:24:05.287 【后台】IC00 运行结束
2018-06-29 14:25:06.272 【后台】IC00 运行结束
2018-06-29 14:26:07.569 【后台】IC00 运行结束
2018-06-29 14:27:07.366 【后台】IC00 TSellShort 第 142 行 策略:<ic后台> 出现信号
2018-06-29 14:27:07.366 【后台】IC00 TSellShort 已成功触发下单操作 价格:5194.600098 数量:1 类型:0 账户: 品种:IC00
2018-06-29 14:27:07.366 【后台】实际账户持仓 1
2018-06-29 14:27:07.366 【后台】下单已发送
2018-06-29 14:27:07.366 【后台】IC00 运行结束
2018-06-29 14:27:07.366 【下单】IC07 价5194.600098 量1 买卖0 类型0 开平1 账户781598888 Formula 1
2018-06-29 14:27:07.366 【下单】确认报单已发送 ID=-898006464 RefID = 3194
2018-06-29 14:27:07.382 【指令】收到回报指令 ID = -898006464 RefID = 3194
2018-06-29 14:27:07.382 【回报】7888888 : IC1807 - 已报单 1 价格:5194.6 平 买
2018-06-29 14:27:07.382 【指令】收到回报指令 ID = -898006464 RefID = 3194
2018-06-29 14:27:17.460 【指令】收到回报指令 ID = -898006464 RefID = 3194
2018-06-29 14:27:17.460 【指令】收到回报指令 ID = -898006464 RefID = 3194
2018-06-29 14:27:17.460 【指令】收到成交回报指令 REFID = 3194 vol = 1
2018-06-29 14:27:17.460 【回报】7888888 : IC1807 - 已成交 1 价格:5194.6 平 买
2018-06-29 14:28:07.429 【后台】IC00 运行结束
2018-06-29 14:29:07.336 【后台】IC00 运行结束
2018-06-29 14:30:05.446 【后台】IC00 运行结束
2018-06-29 14:31:08.509 【后台】IC00 运行结束
撤单指令发出到柜台回报是需要时间的,而你策略中在撤单后紧接着就发平仓指令了,此时还有有收到撤单成功的回报,可用仓位还是0.自然平仓失败
你日志中也能反馈出这一现象,撤单成功的回报晚于平空操作的动作。
处理方案:不要直接在撤单指令后面直接写追单指令,虽然逻辑上没问题,但是必须考虑柜台回报的时间。
应该是使用一个全局标志位,在撤单后进行标记,并且检测当前实际账户的可用持仓是否已经恢复(撤单成功后)再进行平仓
撤单指令后插入SLEEP指令能起作用吗?如IF WCJD>0 THEN BEGIN
TCANCELEX(1,0,'','');
SLEEP(3000);
TSELLSHORT(1,A4,MKT,0,0,zh1,pz1);
[此贴子已经被作者于2018/7/2 7:13:41编辑过]
1不要使用sleep,它会造成金字塔整个策略运行的暂停。
2柜台回报时间间隔不确定,最好的方式就是我说之前的说的,撤单指令发出后,标记位记录和使用thbuyholingex等仓位函数检测当前是否存在可用持仓,两者都成立时在去发平仓指令