将量化投资进行到底
提供专业的量化投资解决方案

量化开发踩坑集录(1)CTP量化投资API出现4097、8193报错

追根溯源

在客户端程序与期货公司行情、交易前置建立连接之后,服务器会定时发送心跳包确认连接是否正常。当网络连接出现异常,客户端可以在回调函数OnFrontDisconnected中收到通知:

交易者最常遇到的就是4097(十六进制:0x1001)和8193(十六进制:0x2001)报错。

如果网络异常,很容易发现问题所在。

但是初次使用CTP的交易者会发现,在网络正常情况下,也会报这个错误。究竟是哪里出了问题呢?

其实,这是不熟悉CTP异步执行特性导致的。

CTP所有的方法都是异步执行的,也就是说,调用一个方法返回时,该方法并没有执行完成,而是刚开始执行。

如果主线程没有等待子线程执行完成就结束了,会触发OnFrontDisconnected错误。

 

网络正常情况下使用AlgoPlus重现该问题

 

网络正常情况下的解决方案

解决办法很简单,就是在主线程结束之前调用Join方法,等待子线程执行完成。

将以上5-8行代码的注释取消,或者在30行之后调用tick_engine的Join方法,就正常了。

 

网络异常情况下的解决方案

如果网络确实是异常导致的问题,应该怎么处理呢?

无需做其他处理,等待CTP自动重连,重连成功后自动登录账户,然后就可以正常使用了。

MdApi同样会自动重连,且重连成功后自动登录账户,但是需要重新订阅行情,否则不会收到断开前订阅的行情数据

AlgoPlus已封装了MdApi重连成功时订阅合约的功能,所以使用AlgoPlus的交易者唯一需要做的就是等待,或者拍两下电脑机箱,或者拿起电话。

测试方式也很简单,只需要拔出网线,当然,需要再重新插入。

 

关于AlgoPlus

AlgoPlus是使用Cython、ctypes技术封装的Python版量化投资开源框架,不仅释放了GIL,而且充分利用CTP线程特性,既能满足低延时的交易需求,又提高了易用性。

项目码云地址:https://gitee.com/AlgoPlus/AlgoPlus

项目GitHub地址:https://gitee.com/AlgoPlus/AlgoPlus

技术博客地址:http://7jia.com

微信公众号:AlgoPlus

欢迎进行技术、交易方面交流!让我们将交易进行到底!

赞(0) 打赏
未经允许不得转载:CTP量化投资技术研究 - AlgoPlus量化投资开源框架 - 将交易进行到底 » 量化开发踩坑集录(1)CTP量化投资API出现4097、8193报错
分享到: (0)

评论 抢沙发

评论前必须登录!

 

知者不惑,仁者不忧,勇者不惧

你的认可是我们最大的动力!

微信扫一扫打赏