CTP API开发中有很多需要注意的小细节,稍有不慎就会出问题,不然,轻则表现与预期不符,重则程序崩溃影响策略盈利。本系列将容易遇到的坑列出来,以供开发时参考,如有疑义之处,欢迎指正。
在国内期货市场中, 可以使用上期技术(上海期货信息技术有限公司(Shanghai Futures Information Technology Co., Ltd.)(以下简称“上期技术”))提供的官方CTP API接口进行期货和期货期权合约的交易。这里讲述以下CTP行情中常见的一些问题, 希望能帮助到CTP API开发者们.
01
CTP行情中的Turnover成交额为啥会减少?
郑商所(CZCE)的Level1行情(即CTP使用的郑商所行情来源)中, 不推送当日成交金额, 因此CTP中郑商所的成交额Turnover, 是通过当日均价(AveragePrice)计算合成的近似值, 且会按价格最小变动价位(PriceTick)四舍五入。因此, 可能会发生新的快照中当日均价下降从而导致成交额反而比此前快照中成交额更低的情况。
郑商所的成交额 = 当日均价 × 成交量 × 合约乘数
例如下图中,菜粕RM409合约的当日均价从2751元下降到2750元(PriceTick为1.0),由于成交量Volume增加量不太多, 出现了后一个快照中的成交额比此前下降(从18203367下降到18199500)的情况。
当然, 郑商所的Level2行情中, 是包含成交额字段且是由交易所推送的, 它则是准确的. 而CTP使用的是郑商所Level1行情, 因此有成交额可能减少的情况。
郑商所 | 非郑商所的 其他交易所 | |
当日成交金额 Turnover | Level1 中不推送 (CTP中 Turnover 是根据AveragePrice自行计算(注1)), Level2中 推送. | 推送 |
当日成交均价 AveragePrice | 推送 (会四舍五入到最小变动价位) | 不推送 (CTP中 AveragePrice是根据Turnover自行计算, 它要除以合约乘数, 才是真正的均价) |
注1: CTP中, 由于郑商所Level1行情中,不推送成交金额,CTP会自行计算成交金额。对于普通行情前置front,CTP后台版本6.7.1之前: 成交金额=成交均价*成交数量; 后台版本6.7.1及之后: 成交金额=成交均价*成交数量*合约乘数。 对于组播行情前置mdfront,仍保持: 成交金额=成交均价*成交数量。(交易所官网公布的成交金额=成交均价*成交数量+合约乘数)
由上表可以看出, 其实CTP中的Turnover 和AveragePrice 的赋值逻辑有一些复杂, 不同交易所的赋值规则稍有区别, 甚至Turnover 是否已包含合约乘数在内还取决于CTP柜台后台版本. 建议用户在使用时多加留意.
02
期货Level2行情比Level1多出了哪些内容?
Level2行情又称多档行情或收费行情,一般买卖档位会更多, 推送频率更高, 有一些交易所的Level2行情还包含总委托买/卖量等额外数据. 相较于免费的Level1行情而言, Level2行情一般是需要收费的.
虽然CTP中一般无法获取到Level2行情, 但投资者可以通过其他行情柜台获取到Level2行情. 下表中列出了Level2行情和Level1行情的比较:
郑商所 | 大商所/广期所 | 中金所 | 上期所 | 能源中心 | ||||||
Level1 | Level2 | Level1 | Level2 | Level1 | Level2 | Level1 | Level2 | Level1 | Level2 | |
行情发布间隔 | 250毫秒 (注1) | 250毫秒 | 500毫秒 | 250毫秒 | 500毫秒 | 500毫秒 | 500毫秒 | 500毫秒 | 500毫秒 | 250毫秒 |
交易所实时推送频率 | 1秒4次 | 1秒4次 | 1秒2次 | 1秒4次 | 1秒2次 | 1秒2次 | 1秒2次 | 1秒2次 | 1秒2次 | 1秒4次 |
基础行情数据 | 合约编码、前收盘、前结算、持仓量、昨持仓量、当日开盘价、当日收盘价、当日最高价、当日最低价、最新价、结算价、当日均价、涨停板、跌停板、当日成交量、一档或五档深度委托行情(申买价、申卖价、申买量、申卖量) | |||||||||
买卖委托档位数 | 一档 | 五档 | 一档 | 五档 | 一档 | 五档 | 一档 | 五档 | 一档 | 五档 |
Level2的额外行情数据 | - | 委买总量、委卖总量、当日成交金额等数据 | - | 最佳买卖价位上前10笔分笔委托量、加权平均委买/卖价格、实时结算价、分价位成交量统计等数据 | - | 无额外数据 | - | 无额外数据 | - | 无额外数据 |
传输形式 | - | TCP或UDP组播 | - | TCP、UDP点播及组播 | - | TCP或UDP组播 | - | TCP或UDP组播 | - | TCP或UDP组播 |
注1: CTP中郑商所的行情可以配置为4Tick/秒(即间隔为250毫秒)或2Tick/秒(即间隔为500毫秒),该配置在CTP的郑商所报盘ini配置文件里。