CTP API问题汇总

1、CTP API兼容

CTP柜台升级为穿透式版本后,只能使用6.3.15版本及后续版本API才能登陆上。为了强制客户使用最新穿透式API,如果客户使用API版本与CTP柜台不一致,将不会回调OnFrontConnected。目前一共有三类CTP API:旧生产版(6.3.11_20180109及以前);穿透式评测版(6.3.13_20181119);穿透式生产版(6.3.15_20190220)。

API实例调用Init后没有任何反应或者没有OnFrontConnected回调,先检查网络链路是否畅通,再检查API版本是否正确,连生产或者SimNow必须是6.3.15版本API,版本不正确将没有回调。

2、行情订阅问题

行情订阅成功但无行情数据推送。首先确保是否订阅成功。CTP无论订阅什么合约id,都会返回"CTP:No Error",但只有填对合约编码才有相应行情。因此,需要对合约代码进行检查,检查编码是否正确,国内五大期货交易所对合约命名格式并不统一,中金所采用大写+4个数字;检查订阅合约是否过期,过期合约将不会推送行情。

3、CTP行情tick数据

CTP提供的实时tick数据不是真正的tick数据。tick数据是指市场上的逐笔数据,例如一笔委托会产生一笔行情,一笔成交也会产生一笔行情。目前国内期货交易所不支持推送逐笔行情数据,只推送切片(快照)数据。切片数据是指将一定时间内的逐笔数据统一成一个快照发出,一般是1秒2笔。

4、TradingDay和ActionDay

在CTP中,TradingDay表示交易日,ActionDay表示当前实际日期。期货交易分为日夜盘,TradingDay和ActionDay在日盘是一致的,但在夜盘有区别,因为当天夜盘属于下一个交易日。

5、非交易时段收到行情

日盘盘前可能会收到行情,因为CTP日盘起动时会重演夜盘流水,所以有可能会将夜盘行情再推送一遍。日盘结束后也会收到行情,是交易所结算完成发出的行情,结算价字段是当日结算价,一般推送时间在3点~3点半。建议按照交易时间过滤掉非盘中行情,以免影响交易逻辑。

6、组合合约行情

CTP不会计算组合合约行情,只转发交易所行情,所以要看交易所推不推。如果直接以组合合约号订阅行情,郑商所和大商所都会推,但比实际情况下少不少,所以建议订阅各个单腿合约行情,计算价差自己得到组合行情。

7、当前切片成交量

Volume字段是累计成交量,是交易日内的累计成交量。如需要当前切片内的成交量,需要用当前切片的字段值减去上个切片相应值,差额即是当前切片内成交量。

9、UpdateMillisec

上期/能源/中金三个交易所会出现0和500两种值,大商所值是切片时真实毫秒时间,郑州该值都是0。

10、无效行情数据

行情数据中常看到有数值是1.7976931348623157e+308,是double类型的上限值,在CTP内部表示无效值。例如盘中本次结算价字段SettlementPrice即为无效值。

11、CTP网络连接问题

CTP API底层如果检测到客户端与CTP前置网络断开时会回调到API的SPI函数OnFrontDisconnected。SPI中OnFrontDisconnected函数nReason参数含义如下:

0x1001 网络读失败

0x1002 网络写失败

0x2001 接收心跳超时

0x2002 发送心跳失败

0x2003 收到错误报文

0x1001转成十进制即是4097,0x2001转成十进制即是8193。

CTP要求API版本和后台版本一致才有正确onfrontconnected回调。CTP API版本不兼容会不停地回调OnFrontDisconnected或输出Decrypt handshake data failed或没有任何反应。

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

12、撤单

CTP不支持批量撤单。CTP API中ReqBatchOrderAction表示批量撤单请求,目前支持大商所支持,而且只有做市商客户才能用。

为了防止盘口愰骗,各期货交易所都将频繁撤单列入异常交易管理规范。目前上期所明确规定单个合约撤单数不能超过500笔,但CTP内并没有该项风控,建议策略自行加入风控。FAK和FOK撤单不计入合约撤单限制,所以如果策略可能会有大量撤单,建议使用FOK和FAK报单。

13、订单索引

CTP API实例每次连接服务器时,最大报单引用(MaxOrderRef)都是从1开始的, CTP中FrontID + SessionID + OrderRef可以唯一索引一笔订单,当FrontID + SessionID变更后MaxOrderRef将重置。  

推荐参考学习资料:

量化IT技术专栏

QuantFabric开源量化交易系统

#CTP##API问题#
全部评论

相关推荐

#我的求职思考# 昨天我们聊了面试原则,今天开始我们聊聊面试具体准备过程。我们把面试分为个面和群面。个面就是应聘者同一个或者多个招聘者聊;群面就是多个应聘者同一个或者多个招聘者聊。个面一般分为三种类型:1)hr面,2)业务面,有些岗位还有3)交叉面试,也就是工作上协同部门面试。取决于岗位重要程度和竞争激烈程度,每种类型可以安排一轮或者多轮。hr面试主要由hr部门的同事和负责人来评估,和hr聊除了表达自己的能力经验外,重点阐述自己的意愿(以及原因)和对公司文化价值观的认同(举例说明)一般面试开场都是自我介绍,2-3分钟简明扼要回答三个问题 1)我是谁; 2)为什么要选我:和岗位相关的能力,经验,活动,实习等以及我的独特优势 ;3)为什么要应聘这个岗位:对公司,部门和岗位的理解,表达自己的意愿以及原因。开场自我介绍理论上要提前准备,会紧张的同学可以事先对着镜子演练并控制时间,这样可以让自己在面试中快速进入稳定发挥状态,而不是一直紧张或者不在状态。下面提问环节,问到项目,活动等,一定要使用STAR逻辑(参阅之前笔记),强调项目和活动积累的经验和能力有助于把未来岗位工作完成的更好。有时候面试者会问你专业,奖项等,一定要挖掘专业学习,奖项竞争中积累的能力和经验,这些都有助于未来岗位工作的完成和成长。其实hr们更喜欢问非专业性问题,比如为什么要申请这个职位,最成功的项目或者事情,最失败的项目或者事情。这些问题我们明天接着聊。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务