以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  后台追单不成功分析  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=164216)

--  作者:wzsunshao
--  发布时间:2018/6/30 8:55:15
--  后台追单不成功分析
下面分别是实盘后台撤单追单公式、程序化交易开平追设置,交易日志,请分析下最后没有追单的问题在哪里?公式和设置有没有错误


/////////////程序化交易开平追设置
下单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 运行结束



--  作者:wzsunshao
--  发布时间:2018/6/30 9:09:19
--  
从交易日志里发现这两句就出现错误,没有得到账户持仓,实际上是有的
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 运行结束

--  作者:wenarm
--  发布时间:2018/7/1 14:15:38
--  
撤单指令发出到柜台回报是需要时间的,而你策略中在撤单后紧接着就发平仓指令了,此时还有有收到撤单成功的回报,可用仓位还是0.自然平仓失败
你日志中也能反馈出这一现象,撤单成功的回报晚于平空操作的动作。

处理方案:不要直接在撤单指令后面直接写追单指令,虽然逻辑上没问题,但是必须考虑柜台回报的时间。
应该是使用一个全局标志位,在撤单后进行标记,并且检测当前实际账户的可用持仓是否已经恢复(撤单成功后)再进行平仓


--  作者:wzsunshao
--  发布时间:2018/7/2 7:12:23
--  
撤单指令后插入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编辑过]

--  作者:wenarm
--  发布时间:2018/7/2 7:30:17
--  
1不要使用sleep,它会造成金字塔整个策略运行的暂停。
2柜台回报时间间隔不确定,最好的方式就是我说之前的说的,撤单指令发出后,标记位记录和使用thbuyholingex等仓位函数检测当前是否存在可用持仓,两者都成立时在去发平仓指令

--  作者:wzsunshao
--  发布时间:2018/7/2 11:55:10
--  
好,谢谢