CTP程序化交易入门系列之四:行情订阅常见问题解答

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

前言

这一章总结了大家订阅行情最常问的一些问题的相关解答,希望能有帮助。如有不对的地方,欢迎指正。后期会在这里更新迭代,欢迎到这底下提问!

1 获取行情的地址在哪里可以查到?

simnow发的即是实时行情,官网上可以看到行情实时地址。期货公司行情地址可咨询期货公司,或者到对应公司官网下载个快期,点击测速就可以看到。

2 怎么知道有哪些合约正在交易(有行情)?

行情API里面很坑的一点是没有查询合约的功能。虽然二代行情里面加了ReqQryMulticastInstrument接口,但也仅是查询组播合约,需要咨询期货公司是否连接到相关交易所组播行情。所以有三种做法获取合约号:

1)通过交易API登录调用函数ReqQryInstrument查询;

2)爬交易所网站获得可交易合约;

3)交易所可交易合约有规则,例如上期白银为当前月开始的下个月的连续12个合约,当前为8月,那即是从ag1909到ag2008,找出这些规则生成合约编码即可。

3 API调用init后为啥没有任何反应?

和demo运行没有任何反应或者没有OnFrontConnected回调问题类似。先检查网络链路是否畅通,可以telnet一下行情前置地址,是否通畅。再检查API版本是否正确,连生产或者simnow现必须是6.3.15版本api,版本不正确将没有回调。

4 为什么登陆上了订阅显示成功但没有行情?

首先确保是否订阅成功。CTP坑的是无论你订阅什么合约id,都会返回你"CTP:No Error",但只有你填对了合约编码才有相应行情。所以:

1)检查编码是否正确。这里坑的是各交易所对命名格式并不统一,命名规则如下:

前面字母代表品种名,后面数字代表合约到期日。

上期/能源所:小写+4个数字(rb1909代表rb品种,19年9月份到期)

中金所:大写+4个数字

郑商所:大写+3个数字(TA001代表TA品种,20年01月份到期)

大商所:小写+4个数字

2)检查你订阅的行情是否过期。如果现在是19年8月份,那你订阅的是rb1905这种5月份到期的合约那肯定是没有行情的。

5 CTP提供的是实时tick数据吗?

CTP提供的是实时tick数据,但不是真正的tick数据。tick数据一般是指市场上的逐笔数据,例如一笔委托会产生一笔行情,一笔成交也会产生一笔行情。目前国内期货交易所还不支持推送这种逐笔的数据,只推送切片(快照)数据。切片数据是指将一定时间内的逐笔数据统一成一个快照发出,一般是1秒2笔。但郑商所有点特殊,可能是1s多笔,就不展开来讲了。

6 TradingDay和ActionDay有什么区别?

在CTP的设计里,TradingDay用来表示交易日,ActionDay表示当前实际日期。期货交易分为日夜盘,这两个日期在日盘的时候是一致的,但在夜盘就有了区别,是因为当天夜盘是属于第二天这个交易日。例如20190830(周五)晚上21点开始交易,交易日TradingDay是20190902(周一),但实际日期ActionDay是20190830。

这是设计的初衷,但事实上夜盘各交易所这两个日期很混乱。我们以20190830晚上夜盘交易举例:

  tradingday  actionday
上期/能源 20190902 20190830
大商所 20190902 20190902
郑商所 20190830 20190830

总结就是,大商所夜盘两个日期都是tradingday,郑商所日夜盘都是当天日期。

7 可以通过CTP API获得K线,现手等数据吗?

没法直接获得k线数据,需要根据ctp推送的行情数据自己合成。如何合成,参考上篇文章。同样无法获得现手增仓等数据,需要自己计算,后面会讲。

8 CTP支持股票行情么?

一般提及CTP是指CTP期货柜台,只提供国内五大期货交易所期货行情。但CTP也有股票柜台,用户较少,可以咨询上期技术哪些券商上了CTP股票柜台,用股票API获取股票行情。

9 可以通过CTP API获得历史行情吗?

不可以,CTP只提供实时行情。获取历史行情,目前免费的可以从天勤获取,仅提供所有期货合约。收费的可以从上海闪策信息科技获取,提供国内股票,期货及美国股票及期货相关所有历史数据。

10 CTP提供level2行情吗?

level2行情是指深度行情,不同于level1只有1档,level2有多档。但除上期和能源外,一般交易所多档行情是收费行情,所以深度行情需要咨询相应期货公司。具体哪些交易所提供哪些行情,收费情况,会单独放一章出来讲。

11 非交易时段收到行情是怎么回事?

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

12 组合合约行情如何获得?

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

13 如何获取当前切片内的成交量?

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

14 UpdateMillisec毫秒时间戳字段有效吗?

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

15 为什么有的字段值特别大?

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

16 行情均价AveragePrice字段有什么坑?

AveragePrice这个字段除郑商所可以直接拿过来用之外,其它四大交易所要除以合约乘数,才是真正的均价。至于合约乘数是什么百度吧,可以通过用交易API查询合约获得,或者去交易所网站上查询获得。

17 CTP上可以查到什么是主力合约吗?

查不到,自己根据持仓量和成交量筛选,注意换月时逻辑。

18 行情里面的Exchange ID字段为空?

是的,发过来就是空值,需要自己维护,可以从交易接口查询合约ReqQryInstrument得到。

往期推荐

● CTP程序化交易入门系列之一:准备

● CTP程序化交易入门系列之二:API基本架构及初始化

● CTP程序化交易入门系列之三:获取实时行情及K线合成

下节预告:

交易所行情知多少?

长按关注公众号,一起学习程序化!

猜你喜欢

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