CTP 4097错误根源

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yishuihan1212/article/details/101260440

其实这本是个很简单的错误,但经常看到有人问到,而且网上居然还出了玄学解答,所以干脆单独写一篇解释一下这个错误。

这一篇文章同样适用于解决为什么没有OnFrontConnected回调,Decrypt handshake data failed,8193等错误。

1. 出处

目前在dll底层代码中,如果检测到与CTP前置网络断开时会有一段代码

printf("CThostFtdcUserApiImplBase::OnSessionDisconnected ...

输出这个错误,并且回调到API的spi函数OnFrontDisconnected。所以在写策略时,如果在spi中的OnFrontDisconnected函数里面打印nReason这个函数参数,遇到网络断开,就会输出这个4097。如下:

其实在API头文件中也早就写明了,在OnFrontDisconnected前面有:

///@param nReason 错误原因
///        0x1001 网络读失败
///        0x1002 网络写失败
///        0x2001 接收心跳超时
///        0x2002 发送心跳失败
///        0x2003 收到错误报文

0x表示是16进制,0x1001转成十进制即是4097,0x2001转成十进制即是8193。

2. 原因排查

1)核对版本

目前CTP要求API版本和后台版本一致才能有正确的onfrontconnected回调。

版本不对会不停地回调OnFrontDisconnected,或者输出Decrypt handshake data failed,或者没有任何反应。

所以先检查API版本是否正确,可以调用函数GetApiVersion输出当前API版本。

目前期货公司正式生产和simnow上均是v6.3.15_20190220版本,期货公司评测使用v6.3.13或者v6.3.16版本(小版本号不影响评测)。

2)核对网络

确保版本无误的话那基本就是网络问题了。

正常生产上是不会出现这样的问题的,但simnow因为用户很多,有时会导致前置拥堵,就会出现这样的问题。另外simnow 7*24小时地址也不是很稳定,常出现这样的问题。

如果连接的simnow前置地址出现这样的问题,可以切换到其他两组模拟地址试一下,如果还不行,那只能去群里问下客服是否连接不上了,等待修复了,没有其他方案。

欢迎关注公众号,一起学习程序化交易!

猜你喜欢

转载自blog.csdn.net/yishuihan1212/article/details/101260440