CTP 4097错误根源 / CTP程序运行没有反应/CTP版本说明

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

这一篇文章同样适用于解决为什么没有OnFrontConnected回调,Decrypt handshake data failed,8193等错误。如果是运行没有反应,请直接看2.原因排查。

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版本,示例如下。

python:

print(f"CTP API version = {api.CThostFtdcTraderApi_GetApiVersion()}")

c++

cout<<"CTP API Version: "<<CThostFtdcTraderApi::GetApiVersion()<<endl;

V6.3.X的API可以访问6.3.X~6.6.X及其以上的CTP后台系统,但无法支持大商所长合约期权组合,无法支持IPv6;

V6.5.X、V6.6.X的API只能访问6.5.X及其以上的CTP后台系统,支持大商所长合约期权组合,支持IPv6;

注意:6.6.1API引入的新函数只有在接入6.6.1及以上后台的时候才会有响应,接入6.5.0时无响应。

目前期货公司正式生产基本是v6.5.1_20200908版本,以上三个系列版本都可以连上,注意要用名字带P的版本才能连上。

simnow同样是V6.5.X系列版本,所以以上三个系列版本都可以连上,注意要用名字带P的版本才能连上。

期货公司评测使用v6.3.13,v6.3.16或 v6.3.19_T1_20200423版本(这三个都可以)。

2)核对网络

确保版本无误的话那基本就是网络问题了。先检查交易前置网是否畅通,建议使用telnet,不要使用ping(因为服务端有可能会禁ping)。如下:

telnet 180.168.146.187 10100

如果telnet没有反应,要么是你自己后台的前置地址搞错(请去看QQ群里公告地址)了,要么说明CTP后台服务器没有启动(此时正常环境多数是因为没在交易时段,可以切到7*24小时环境测试

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

另外如果是非交易时段(交易时段参见文章《一个获取最新期货品种交易时间的小脚本》),那后台服务确实有可能没开。这时可以切到simnow模拟的7*24小时环境测试。

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

 

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

 

 

 

 

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序 CTP期货数据收集与中转程序
CTPapi_交易开发实例 class CTraderSpi : public CThostFtdcTraderSpi { public: ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 virtual void OnFrontConnected(); ///登录请求响应 virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///投资者结算结果确认响应 virtual void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///请求查询合约响应 virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///请求查询资金账户响应 virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///请求查询投资者持仓响应 virtual void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///报单录入请求响应 virtual void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///报单操作请求响应 virtual void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///错误应答 virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 virtual void OnFrontDisconnected(int nReason); ///心跳超时警告。当长时间未收到报文时,该方法被调用。 virtual void OnHeartBeatWarning(int nTimeLapse); ///报单通知 virtual void OnRtnOrder(CThostFtdcOrderField *pOrder); ///成交通知 virtual void OnRtnTrade(CThostFtdcTradeField *pTrade); private: ///用户登录请求 void ReqUserLogin(); ///投资者结算结果确认 void ReqSettlementInfoConfirm(); ///请求查询合约 void ReqQryInstrument(); ///请求查询资金账户 void ReqQryTradingAccount(); ///请求查询投资者持仓 void ReqQryInvestorPosition(); ///报单录入请求 void ReqOrderInsert(); ///报单操作请求 void ReqOrderAction(CThostFtdcOrderField *pOrder); // 是否收到成功的响应 bool IsErrorRspInfo(CThostFtdcRspInfoField *pRspInfo); // 是否我的报单回报 bool IsMyOrder(CThostFtdcOrderField *pOrder); // 是否正在交易的报单 bool IsTradingOrder(CThostFtdcOrderField *pOrder); };

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值