
# 扩展行情接口API

首先需要引入

```
from pytdx.exhq import TdxExHq_API

```

然后，创建对象

```
api = TdxExHq_API()

```

之后，通常是如下的格式

```
if api.connect(&amp;apos;61.152.107.141&amp;apos;, 7727):
    # ... same codes...
    api.disconnect()

```

当然，我们也支持with 语法,可以省略`disconnect()`语句

```
with api.connect(&amp;apos;61.152.107.141&amp;apos;, 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: <img alt="get_list_demo" src="assets/pytdx_exhq-bf0d0.png"/>

### 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](pytdx_hq.html) 对应的章节

## 获取流量统计信息

```
In [12]: api.get_traffic_stats()
Out[12]:
{&amp;apos;first_pkg_send_time&amp;apos;: datetime.datetime(2017, 9, 13, 13, 42, 3, 596519),
 &amp;apos;recv_bytes_per_second&amp;apos;: 116.0,
 &amp;apos;recv_pkg_bytes&amp;apos;: 2759,
 &amp;apos;recv_pkg_num&amp;apos;: 18,
 &amp;apos;send_bytes_per_second&amp;apos;: 15.0,
 &amp;apos;send_pkg_bytes&amp;apos;: 368,
 &amp;apos;send_pkg_num&amp;apos;: 9,
 &amp;apos;total_seconds&amp;apos;: 23.716146}

```
