欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 如何解决后台成交指令延迟的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2741人关注过本帖树形打印复制链接

主题:如何解决后台成交指令延迟的问题

帅哥哟,离线,有人找我吗?
c100011612
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:97 积分:0 威望:0 精华:0 注册:2016/5/20 15:15:48
如何解决后台成交指令延迟的问题  发帖心情 Post By:2021/5/18 15:22:58    Post IP:101.229.123.224[只看该作者]

先附上整理的PleaceOrder  和 DEBUGFILE:

2021-05-18 14:29:02.086    【后台】JD09 TBuyShort 第 68 行 策略:<JD0709> 出现信号
2021-05-18 14:29:02.086    【后台】JD07 TBuyShort 已成功触发下单操作 价格:0.000000 数量:1 类型:1 账户: 品种:JD07
2021-05-18 14:29:02.086    【后台】下单已发送
2021-05-18 14:29:02.086    【后台】JD09 TBuy 第 69 行 策略:<JD0709> 出现信号
2021-05-18 14:29:02.086    【后台】JD09 TBuy 已成功触发下单操作 价格:0.000000 数量:1 类型:1 账户: 品种:JD09
2021-05-18 14:29:02.086    【后台】下单已发送

2021-05-18 14:29:02.096    【后台】JD09 运行结束
2021-05-18 14:29:02.096    【下单】JD07 价0.000000 量1 买卖1 类型1 开平0 账户13818882796 Formula 1
2021-05-18 14:29:02.096    【下单】已提交,订单ID :302319918
2021-05-18 14:29:02.096    【下单】JD09 价0.000000 量1 买卖0 类型1 开平0 账户13818882796 Formula 1
2021-05-18 14:29:02.096    【下单】已提交,订单ID :302319919

2021-05-18 14:29:02.176    【指令】收到回报指令 ID = 302319918
2021-05-18 14:29:02.176    【回报】13818882796 : JD07 - 已报单 1 价格:4337 开 卖

2021-05-18 14:29:02.236    【指令】收到Order回报指令 ID = 302319918 Status = 3

2021-05-18 14:29:02.296    【指令】收到回报指令 ID = 302319919
2021-05-18 14:29:02.296    【回报】13818882796 : JD09 - 已报单 1 价格:4784 开 买

2021-05-18 14:29:02.375    【后台】JD09 运行结束

2021-05-18 14:29:02.403    【指令】收到成交回报指令 ORDERID = 302319918
2021-05-18 14:29:02.403    【回报】13818882796 : jd2107 - 已成交 1 价格:4338 开 卖
2021-05-18 14:29:02.403    【回报】13818882796 : jd2107 - 全部成交 1
2021-05-18 14:29:02.403    【指令】收到Order回报指令 ID = 302319919 Status = 3

2021-05-18 14:29:02.522    【指令】收到成交回报指令 ORDERID = 302319919
2021-05-18 14:29:02.522    【回报】13818882796 : jd2109 - 已成交 1 价格:4783 开 买
2021-05-18 14:29:02.522    【后台】JD09 TSellShort 第 51 行 策略:<JD0709> 出现信号
2021-05-18 14:29:02.522    【回报】13818882796 : jd2109 - 全部成交 1
2021-05-18 14:29:02.522    【后台】JD07 TSellShort 已成功触发下单操作 价格:0.000000 数量:1 类型:1 账户: 品种:JD07
2021-05-18 14:29:02.522    【后台】实际账户持仓 1
2021-05-18 14:29:02.522    【后台】下单已发送
2021-05-18 14:29:02.522    【后台】JD09 运行结束

2021-05-18 14:29:02.532    【下单】JD07 价0.000000 量1 买卖0 类型1 开平1 账户13818882796 Formula 1
2021-05-18 14:29:02.532    【下单】已提交,订单ID :302319920

DEBUGFILE:

2021-05-18 14:29:02.363    近多持 0
2021-05-18 14:29:02.363    近空持 0
2021-05-18 14:29:02.363    远多持 0
2021-05-18 14:29:02.363    远空持 0
2021-05-18 14:29:02.363    做多价差 -442.00
2021-05-18 14:29:02.363    做空价差 -445.00
2021-05-18 14:29:02.365    上轨 -447.12
2021-05-18 14:29:02.365    下轨 -476.33
2021-05-18 14:29:02.365    U1 -454.42
2021-05-18 14:29:02.365    D1 -469.03

2021-05-18 14:29:02.482    近多持 0
2021-05-18 14:29:02.482    近空持 1
2021-05-18 14:29:02.482    远多持 0
2021-05-18 14:29:02.482    远空持 0
2021-05-18 14:29:02.482    做多价差 -442.00
2021-05-18 14:29:02.482    做空价差 -445.00
2021-05-18 14:29:02.482    上轨 -447.12
2021-05-18 14:29:02.482    下轨 -476.33
2021-05-18 14:29:02.482    U1 -454.42
2021-05-18 14:29:02.482    D1 -469.03

2021-05-18 14:29:02.603    近多持 0
2021-05-18 14:29:02.603    近空持 0
2021-05-18 14:29:02.603    远多持 1
2021-05-18 14:29:02.603    远空持 0
2021-05-18 14:29:02.603    做多价差 -442.00
2021-05-18 14:29:02.603    做空价差 -445.00
2021-05-18 14:29:02.603    上轨 -447.12
2021-05-18 14:29:02.603    下轨 -476.33
2021-05-18 14:29:02.603    U1 -454.42
2021-05-18 14:29:02.603    D1 -469.03

我套利的时候是碰到上轨,就触发下单:开空jd07,开多jd09,但是收到回报指令和收到成交回报2个合约是时间有先后的,比如上面红色部分是14:29:02.403  收到JD07开空成交的结果,而 14:29:02.522 才收到JD09开多成交的结果,但是我公式里面有个检查是否有单腿持仓的代码,这个代码是 14:29:02.482 也就是2笔成交结果之间执行的,所以可以的DEBUGfile上看到轮询的时候发现是单腿,然后就自动执行了平仓操作。
我这是用金字塔模拟碰到的,基本上下10单有9单是这种情况成交了马上被检查出来单腿瞬间又被平掉,
但是同样的代码在simnow上面就没有碰到,请问怎么解决这个问题,我检查单腿是用     近多持:=tbuyholdingex('',近月合约,1);  这个函数去检查的,有没有什么办法是不用看持仓,而是看下单指令来判断是否单腿

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/5/18 15:55:32    Post IP:58.246.57.26[只看该作者]

 pel下是不行的。因为这个涉及到回报的处理,必须是事件驱动的形式,这个只能vba之类的取处理了。目前simnow已经恢复使用了,应该是中金还不能交易,其他都可以。你可以用simnow测试下。


另外啊 你这个虽然是模拟遇到的,但是理论上啊 就算是实盘 这个通信是走网络的,那么还是可能会遇到的。回报稍微有些延迟啥的,就可能直接影响一笔交易。所以就是理论上你这个还是一个有潜在风险的处理方式。 要么你看下能否用vba处理,要么你就降低检测的频率,慢不到一秒才检测到单腿与否总比一次错误的交易好吧。




命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
c100011612
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:97 积分:0 威望:0 精华:0 注册:2016/5/20 15:15:48
  发帖心情 Post By:2021/5/18 16:13:23    Post IP:101.229.123.224[只看该作者]

VBA只知道点皮毛,弄的话又是系统工程了。
如果我在平单腿合约时候加上 这个条件呢?应该有用把:

 TISREMAINEX(0,'',近月合约)=0 AND TISREMAINEX(0,'',远月合约)=0;

近月和远月合约在所有方向上无未成交委托时候才触发平单腿指令

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/5/18 16:22:51    Post IP:58.246.57.26[只看该作者]

这几个函数不行,都是依赖回报的。
simnow现在恢复了,你可以用那个测试下。 

[此贴子已经被作者于2021/5/18 17:14:52编辑过]


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
c100011612
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:97 积分:0 威望:0 精华:0 注册:2016/5/20 15:15:48
  发帖心情 Post By:2021/5/18 17:06:03    Post IP:101.229.123.224[只看该作者]

看不太明白:

检验未成交委托是给予回报指令,还是Order回报指令,还是成交回报指令?这几个有先后的

我看了下基本上都要在300ms-400ms左右,所以如果刷新间隔低于这个时间,大概率是会出错的,是么
[此贴子已经被作者于2021/5/18 17:07:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2021/5/18 17:20:12    Post IP:58.246.57.26[只看该作者]

*4楼回复有误,我日志看错了,不用管那个。


如果检测间隔太短,很难避免你现在这个问题的。下单实际上肯定是有先后的,回报自然也存在时间差。而成交的判断都是依赖,成交回报的。不是那几个指令。而这些都是PEL无法处理的。所以你追求那么短时间内的精准的话,这个问题可能就比较无解了。





命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
c100011612
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:97 积分:0 威望:0 精华:0 注册:2016/5/20 15:15:48
  发帖心情 Post By:2021/5/18 18:03:16    Post IP:101.229.123.224[只看该作者]

琢磨了下,既然错误是发生在检查单腿的指令里面,那么就设个条件,检查 TSUBMITEX(0,'',近月合约) 如果大于3秒未成交,就撤单,并且平远月合约,不用实时监测仓位和未成交委托了。反正单腿只会出现在未成交委托这种情况下的。

 回到顶部