扩展行情接口API

首先需要引入

from pytdx.exhq import TdxExHq_API

然后,创建对象

api = TdxExHq_API()

之后,通常是如下的格式

if api.connect('61.152.107.141', 7727):
    # ... same codes...
    api.disconnect()

当然,我们也支持with 语法,可以省略disconnect()语句

with api.connect('61.152.107.141', 7727):
    # some codes

api方法列表

参数一般性约定

一般来说,股票代码和文件名称使用字符串类型,其它参数都使用数值类型

1: 获取市场代码

可以获取该api服务器可以使用的市场列表,类别等信息

api.get_markets()

返回结果 api.to_df(api.get_markets()) 一般某个服务器返回的类型比较固定,该结果可以缓存到本地或者内存中。

2017-07-31 21:22:06,067 - PYTDX - INFO - 获取市场代码
    market  category    name short_name
0        1         1     临时股         TP
1        4        12  郑州商品期权         OZ
2        5        12  大连商品期权         OD
3        6        12  上海商品期权         OS
4        8        12  上海个股期权         QQ
5       27         5    香港指数         FH
6       28         3    郑州商品         QZ
7       29         3    大连商品         QD
8       30         3    上海期货         QS
9       31         2    香港主板         KH
10      32         2    香港权证         KR
11      33         8   开放式基金         FU
12      34         9   货币型基金         FB
13      35         8  招商理财产品         LC
14      36         9  招商货币产品         LB
15      37        11    国际指数         FW
16      38        10  国内宏观指标         HG
17      40        11   中国概念股         CH
18      41        11  美股知名公司         MG
19      43         1   B股转H股         HB
20      44         1    股份转让         SB
21      47         3    股指期货         CZ
22      48         2   香港创业板         KG
23      49         2  香港信托基金         KT
24      54         6   国债预发行         GY
25      60         3  主力期货合约         MA
26      62         5    中证指数         ZZ
27      71         2     港股通         GH

2: 查询代码列表

参数, 起始位置, 获取数量

api.get_instrument_info(0, 100)

Demo: get_list_demo

3: 查询市场中商品数量

api.get_instrument_count()

4: 查询五档行情

参数 市场ID,证券代码

  • 市场ID可以通过 get_markets 获得
api.get_instrument_quote(47, "IF1709")

5: 查询分时行情

参数 市场ID,证券代码

  • 市场ID可以通过 get_markets 获得
api.get_minute_time_data(47, "IF1709")

6: 查询历史分时行情

参数 市场ID,证券代码,日期

  • 市场ID可以通过 get_markets 获得
  • 日期格式 YYYYMMDD 如 20170811
api.get_history_minute_time_data(31, "00020", 20170811)

7: 查询k线数据

参数: K线周期, 市场ID, 证券代码,起始位置, 数量

  • K线周期参考 TDXParams
  • 市场ID可以通过 get_markets 获得
api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 8, "10000843", 0, 100)

8: 查询分笔成交

参数:市场ID,证券代码

  • 市场ID可以通过 get_markets 获得
api.get_transaction_data(31, "00020")

注意,这个接口最多返回1800条记录, 如果有超过1800条记录的请求,我们有一个start 参数作为便宜量,可以取出超过1800条记录

如期货的数据:这个接口可以取出1800条之前的记录,数量也是1800条

api.get_history_transaction_data(47, "IFL0", 20170810, start=1800)

9: 查询历史分笔成交

参数:市场ID,证券代码, 日期

  • 市场ID可以通过 get_markets 获得
  • 日期格式 YYYYMMDD 如 20170810
api.get_history_transaction_data(31, "00020", 20170810)

多线程支持

由于Python的特性,一般情况下,不太建议使用多线程代码,如果需要并发访问,建议使用多进程来实现,如果要使用多线程版本,请在初始化时设置multithread参数为True

api = TdxExHq_API(multithread=True)

心跳包

由于长时间不与服务器交互,服务器将关闭连接,所以我们实现了心跳包的机制,可以通过

api = TdxExHq_API(heartbeat=True)

设置心跳包,程序会启动一个心跳包发送线程,在空闲状态下隔一段时间发送一个心跳包,注意,打开heartbeat=True选项的同时会自动打开multithread=True

抛出异常 和 重连机制

参考 标准行情 pytdx.hq 对应的章节

获取流量统计信息

In [12]: api.get_traffic_stats()
Out[12]:
{'first_pkg_send_time': datetime.datetime(2017, 9, 13, 13, 42, 3, 596519),
 'recv_bytes_per_second': 116.0,
 'recv_pkg_bytes': 2759,
 'recv_pkg_num': 18,
 'send_bytes_per_second': 15.0,
 'send_pkg_bytes': 368,
 'send_pkg_num': 9,
 'total_seconds': 23.716146}