pytdx接口API说明

您所在的位置:网站首页 通达信api接口文档 pytdx接口API说明

pytdx接口API说明

2023-12-14 03:21| 来源: 网络整理| 查看: 265

pytdx接口API说明 标准行情接口API pytdx.hq

下面是如何在程序里面调用本接口 首先需要引入

from pytdx.hq import TdxHq_API

然后,创建对象

api = TdxHq_API()  

之后,通常是如下的格式

if api.connect('119.147.212.81', 7709): # ... same codes... api.disconnect()

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

with api.connect('119.147.212.81', 7709): # some codes

我们的数据获取届接口一般返回list结构,如果需要转化为pandas Dataframe接口,可以使用 api.to_df 进行转化 如:

data = api.get_security_bars(9, 0, '000001', 0, 10) #返回普通list data = api.to_df(api.get_security_bars(9, 0, '000001', 0, 10)) # 返回DataFrame

可以使用的api方法有下列的几个。

api方法列表

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

1 : 获取股票行情 可以获取多只股票的行情信息 需要传入一个列表,每个列表由一个市场代码, 一个股票代码构成的元祖构成 [ (市场代码1, 股票代码1),(市场代码2, 股票代码2) … (市场代码n, 股票代码n) ] 如:

api.get_security_quotes([(0, '000001'), (1, '600300')])

注意点:非股票品种代码,有些获取的价格不是实际价格,比如可转债获取价格为实际价格*10。这是可能是TDX为了防止浮点数错误,报价在传输和存储时实际都保存为整数,然后根据品种进行处理的结果。

2 : 获取k线

category(类别)->

K线种类: 0 5分钟K线 1 15分钟K线 2 30分钟K线 3 1小时K线 4 日K线 5 周K线 6 月K线 7 1分钟 81分钟K线 9 日K线 10 季K线 11 年K线

market -> 市场代码 0:深圳,1:上海

stockcode -> 证券代码;

start -> 指定的范围开始位置;

count -> 用户要请求的 K 线数目,最大值为 800

如:

api.get_security_bars(9,0, '000001', 4, 3)

3 : 获取市场股票数量

0 - 深圳, 1 - 上海 api.get_security_count(0)

4 : 获取股票列表

参数:市场代码, 起始位置 如: 0,0 或 1,100 api.get_security_list(1, 0)

5 : 获取指数k线

category-> K线种类 0 5分钟K线 1 15分钟K线 2 30分钟K线 3 1小时K线 4 日K线 5 周K线 6 月K线 7 1分钟 8 1分钟K线 9 日K线 10 季K线 11 年K线market -> 市场代码 0:深圳,1:上海stockcode -> 证券代码;start -> 指定的范围开始位置;count -> 用户要请求的 K 线数目,最大值为 800

如:

api.get_index_bars(9,1, '000001', 1, 2)

6 : 查询分时行情

参数:市场代码, 股票代码, 如: 0,000001 或 1,600300 api.get_minute_time_data(1, '600300')

7 : 查询历史分时行情

参数:市场代码, 股票代码,时间 如: 0,000001,20161209 或 1,600300,20161209 api.get_history_minute_time_data(TDXParams.MARKET_SH, '600300', 20161209) 注意,在引入 TDXParams 之后, (from pytdx.params import TDXParams) 我们可以使用 TDXParams.MARKET_SH , TDXParams.MARKET_SZ 常量来代替 1 和 0 作为参数

8 : 查询分笔成交

参数:市场代码, 股票代码,起始位置, 数量 如: 0,000001,0,10 api.get_transaction_data(TDXParams.MARKET_SZ, '000001', 0, 30)

9 : 查询历史分笔成交

参数:市场代码, 股票代码,起始位置,日期 数量 如: 0,000001,0,10,20170209 api.get_history_transaction_data(TDXParams.MARKET_SZ, '000001', 0, 10, 20170209)

10 : 查询公司信息目录

参数:市场代码, 股票代码, 如: 0,000001 或 1,600300 api.get_company_info_category(TDXParams.MARKET_SZ, '000001')

11 : 读取公司信息详情

参数:市场代码, 股票代码, 文件名, 起始位置, 数量, 如:0,000001,000001.txt,2054363,9221 api.get_company_info_content(0, '000001', '000001.txt', 0, 100) 注意这里的 起始位置, 数量 参考上面接口的返回结果。

12 : 读取除权除息信息

参数:市场代码, 股票代码, 如: 0,000001 或 1,600300 api.get_xdxr_info(1, '600300')

13 : 读取财务信息

参数:市场代码, 股票代码, 如: 0,000001 或 1,600300 api.get_finance_info(0, '000001')

14 : 读取k线信息

参数:市场代码, 开始时间, 结束时间 get_k_data('000001','2017-07-03','2017-07-10') 参考 https://github.com/rainx/pytdx/issues/5

15 :读取板块信息

参数: 板块文件名称,可以取的值限于 #板块相关参数 BLOCK_SZ = "block_zs.dat" BLOCK_FG = "block_fg.dat" BLOCK_GN = "block_gn.dat" BLOCK_DEFAULT = "block.dat" api.get_and_parse_block_info("block.dat") #或者用我们定义好的params api.get_and_parse_block_info(TDXParams.BLOCK_SZ)

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

api = TdxHq_API(multithread=True)

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

api = TdxHq_API(heartbeat=True)

设置心跳包,程序会启动一个心跳包发送线程,在空闲状态下隔一段时间发送一个心跳包。

注意,打开heartbeat=True选项的同时会自动打开multithread=True

抛出异常 我们的错误处理有两套机制,根据TdxHq_API 构造函数里的 raise_exception 参数来确定,如果

#默认情况 api = TdxHq_API(raise_exception=False)

如果在调用connect 的时候,失败会返回false, 调用普通接口时候,如果出错的情况返回None 如果

api = TdxHq_API(raise_exception=True)

如果在调用connect 的时候,失败会抛出TdxConnectionError异常, 调用普通接口时候,如果出错的情况抛出TdxFunctionCallError异常

重连机制 在调用函数的时候,如果服务器连接断开或者其它的异常情况下,为了保证在偶发的连接断开下自动重连并重新请求数据。关于重试的周期和次数,我们通过一个自定义的类实现,你可以实现自己的重试策略 如果开启的话,需要

api = TdxHq_API(auto_retry=True)

下面是我们默认的重试策略

class DefaultRetryStrategy(RetryStrategy): """ 默认的重试策略,您可以通过写自己的重试策略替代本策略, 改策略主要实现gen方法,该方法是一个生成器, 返回下次重试的间隔时间, 单位为秒,我们会使用 time.sleep在这里同步等待之后进行重新connect,然后再重新发起 源请求,直到gen结束。 """ @classmethod def gen(cls): # 默认重试4次 ... 时间间隔如下 for time_interval in [0.1, 0.5, 1, 2]: yield time_interval

你可以实现自己的重试机制并替换默认的,如永远重复, 间隔1秒一次(慎用)

class MyRetryStrategy(RetryStrategy): @classmethod def gen(cls): while True: yield 1 #然后覆盖默认的 api.retry_strategy = MyRetryStrategy()

调试模式 如果您需要调试本代码,监控传输过程中的数据包传输情况,可以使用调试模式,使用方法是设定环境变量 TDX_DEBUG 为 1 如

> TDX_DEBUG=1 hqget -f 1

行情服务器列表 为了方便连接服务器,我把一些常用的服务器列表整理到到 hosts.py 文件中. 在程序中可以通过

from pytdx.config.hosts import hq_hosts

获取列表, 列表里的数据参考了 https://github.com/rainx/pytdx/issues/3

获取流量统计信息

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}

欢迎补充并发送pr

扩展行情接口API pytdx.exhq

首先需要引入

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) 1

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} 数据文件读取接口 pytdx.reader

读取通达信的日K线

通过下面的接口,我们可以解析通达信的日K线文件,该文件可以通过读取通达信的软件本地目录导出的数据获取,也可以从通达信的官网上下载, 如果您安装了通达信的终端,可以在安装目录下找到 vipdoc 子目录。 比如我的通达信客户端安装在 c:\new_tdx 下,即

c:\new_tdx\vipdoc\sz\lday\ 下是深圳的日k线数据c:\new_tdx\vipdoc\sh\lday\ 下是上海的日k线数据

该目录下每个股票为一个文件,如 sz000001.day 为深圳的日k行情, 读取行情的接口非常简单

from pytdx.reader import TdxDailyBarReader, TdxFileNotFoundException reader = TdxDailyBarReader() df = reader.get_df("/Users/rainx/tmp/vipdoc/sz/lday/sz000001.day") df 是pandas 的DateFrame格式, 输出为: open high low close amount volume date 1991-12-23 27.70 27.90 27.60 27.80 3.530600e+06 127000 1991-12-24 27.90 29.30 27.00 29.05 3.050250e+06 105000 1991-12-25 29.15 30.00 29.10 29.30 6.648170e+06 226900 1991-12-26 29.30 29.30 28.00 28.00 5.370400e+06 191800 1991-12-27 28.00 28.50 28.00 28.45 5.988725e+06 210500 ... ... ... ... ... ... ... 2017-06-22 9.15 9.40 9.14 9.25 1.325211e+09 142695815 2017-06-23 9.23 9.27 9.16 9.25 5.383036e+08 58400441 2017-06-26 9.26 9.40 9.26 9.30 6.637629e+08 71076995 [6031 rows x 6 columns] #可以通过pandas将它保存为csv 等文件, 如: df.to_csv("/tmp/000001.csv")

读取扩展行情的日线(如期货,期权,现货等)

In [1]: from pytdx.reader import TdxExHqDailyBarReader In [2]: reader = TdxExHqDailyBarReader() In [3]: df = reader.get_df("/Users/rainx/Downloads/lday/29#A1801.day") In [4]: df Out[4]: open high low close amount volume jiesuan date 2017-08-07 3830.0 3936.0 3826.0 3925.0 167038 224516 3881.0 2017-08-08 3926.0 3990.0 3921.0 3951.0 188460 256984 3958.0 2017-08-09 3951.0 3997.0 3951.0 3982.0 194150 157330 3976.0 2017-08-10 3978.0 4015.0 3970.0 3995.0 206944 174878 3993.0 2017-08-11 3997.0 4017.0 3927.0 3954.0 202010 258036 3971.0

读取通达信的分钟K线(目前支持1,5分钟k线)

分钟线有两种格式,第一种是.1 .5 为后缀的 from pytdx.reader import TdxMinBarReader, TdxFileNotFoundException reader = TdxMinBarReader() df = reader.get_df("/Users/rainx/Downloads/sh000001.5") In [2]: df Out[2]: open high low close amount \ date 2015-07-09 09:35:00 3432.45 3454.14 3374.32 3423.61 6.189348e+10 2015-07-09 09:40:00 3420.56 3424.16 3395.07 3396.33 2.341652e+10 volume date 2015-07-09 09:35:00 618934736 2015-07-09 09:40:00 234165181 还有一种为 .lc1 .lc5 后缀的 from pytdx.reader import TdxLCMinBarReader, TdxFileNotFoundException reader = TdxLCMinBarReader() df = reader.get_df("/Users/rainx/Downloads/sz000001.lc5") print(df) open high low close amount \ date 2017-07-26 09:35:00 10.920000 10.990000 10.860000 10.940000 118572536.0 2017-07-26 09:40:00 10.929999 10.990000 10.910000 10.969999 43107384.0 2017-07-26 09:45:00 10.969999 11.050000 10.969999 11.050000 40586544.0 2017-07-26 09:50:00 11.050000 11.130000 11.010000 11.120000 100486624.0 2017-07-26 09:55:00 11.110000 11.179999 11.099999 11.179999 78094816.0 .... .... ...

读取板块信息文件

文件位置参考: http://blog.sina.com.cn/s/blog_623d2d280102vt8y.html

样例代码:

# 默认扁平格式 df = BlockReader().get_df("/Users/rainx/tmp/block_zs.dat") print(df) blockname block_type code_index code 0 沪深300 2 0 000001 1 沪深300 2 1 000002 2 沪深300 2 2 000008 3 沪深300 2 3 000009 # 分组格式 df2 = BlockReader().get_df("/Users/rainx/tmp/block_zs.dat", BlockReader_TYPE_GROUP) print(df2) blockname block_type stock_count \ 0 重点沪指 2 0 1 沪深300 2 300 2 深证成指 2 40 3 中小板指 2 100 code_list 0 1 000001,000002,000008,000009,000060,000063,0000... 2 000001,000002,000063,000069,000100,000157,0001... 3 002001,002004,002007,002008,002010,002013,0020...

读取通达信的自定义板块信息文件夹 在通达信客户端备份自定义板块数据,设置–>数据维护工具–>数据备份,备份后会生出类似TdxBak_20171011/blocknew的文件夹,然后使用如下代码读取:

# 默认扁平格式 df = CustomerBlockReader().get_df('C:/Users/fit/Desktop/TdxBak_20171011/blocknew') print(df) blockname block_type code_index code 0 领袖 LX 1 1600516 1 领袖 LX 2 0300678 2 领袖 LX 3 0300675 3 领袖 LX 4 1600230 4 领袖 LX 5 0002497 5 领袖 LX 6 0002460 6 领袖 LX 7 0000807 7 领袖 LX 8 1600874 #分组格式 df = CustomerBlockReader().get_df('C:/Users/fit/Desktop/TdxBak_20171011/blocknew', BlockReader_TYPE_GROUP) print(df) blockname block_type stock_count \ 0 领袖 LX 20 1 核心 HX 20 2 潜力 QL 11 code_list 0 1600516,0300678,0300675,1600230,0002497,000246... 1 1603501,0300597,0002467,0300081,0002194,000086... 2 1600686,0300648,1600476,0300036,1603066,030062... 历史专业财务数据 pytdx.crawler

参考

issue from @datochan https://github.com/rainx/pytdx/issues/133通达信专业财务函数文档财务指标的名称含义,参考issue#163[https://github.com/QUANTAXIS/QUANTAXIS/blob/master/QUANTAXIS/QAData/financial_mean.py]

(https://github.com/QUANTAXIS/QUANTAXIS/blob/master/QUANTAXIS/QAData/financial_mean.py)

pytdx.crawler crawler 其实本来想叫做downloader或者fetcher, 专门来处理 http 协议的数据的下载和解析,分为两个阶段,下载阶段我们会使用 urllib 来下载数据,数据可以下载到临时文件(不传入path_to_download参数)或者下载到指定的位置(提供path_to_download参数),也支持指定 chunk 的分段下载进度的提示(使用reporthook传入处理函数), 下面是一个 reporthook 函数的例子

def demo_reporthook(downloaded, total_size): print("Downloaded {}, Total is {}".format(downloaded, total_size))

获取历史专业财务数据列表 pytdx.crawler.HistoryFinancialListCrawler 实现了历史财务数据列表的读取,使用方式

from pytdx.crawler.history_financial_crawler import HistoryFinancialListCrawler crawler = HistoryFinancialListCrawler() list_data = crawler.fetch_and_parse() print(pd.DataFrame(data=list_data))

结果

In [8]: print(pd.DataFrame(data=list_data)) filename filesize hash 0 gpcw20171231.zip 49250 0370b2703a0e23b4f9d87587f4a844cf 1 gpcw20170930.zip 2535402 780bc7c649cdce35567a44dc3700f4ce 2 gpcw20170630.zip 2739127 5fef91471e01ebf9b5d3628a87d1e73d 3 gpcw20170331.zip 2325626 a9bcebff37dd1d647f3159596bc2f312 4 gpcw20161231.zip 2749415 3fb3018c235f6c9d7a1448bdbe72281a 5 gpcw20160930.zip 2262567 8b629231ee9fad7e7c86f1e683cfb489 .. ... ... ... 75 gpcw19971231.zip 434680 316ce733f2a4f6b21c7865f94eee01c8 76 gpcw19970630.zip 196525 6eb5d8e5f43f7b19d756f0a2d91371f5 77 gpcw19961231.zip 363568 bfd59d42f9b6651861e84c483edb499b 78 gpcw19960630.zip 122145 18023e9f84565323874e8e1dbdfb2adb [79 rows x 3 columns]

其中,filename 字段为具体的财务数据文件地址, 后面的分别是哈希值和文件大小,在同步到本地时,可以作为是否需要更新本地数据的参考

获取历史专业财务数据内容 pytdx.crawler.HistoryFinancialCrawler 获取历史专业财务数据内容 使用上面返回的filename字段作为参数即可

from pytdx.crawler.base_crawler import demo_reporthook from pytdx.crawler.history_financial_crawler import HistoryFinancialCrawler datacrawler = HistoryFinancialCrawler() pd.set_option('display.max_columns', None) result = datacrawler.fetch_and_parse(reporthook=demo_reporthook, filename='gpcw19971231.zip', path_to_download="/tmp/tmpfile.zip") print(datacrawler.to_df(data=result))

通过 reader 读取数据 如果您自己管理文件的下载或者本地已经有对应的数据文件,可以使用我们的 HistoryFinancialReader来读取本地数据,使用方法和其它的 Reader 是类似的, 我们的 reader 同时支持.zip和解压后的.dat文件

from pytdx.reader import HistoryFinancialReader # print(HistoryFinancialReader().get_df('/tmp/tmpfile.zip')) print(HistoryFinancialReader().get_df('/tmp/gpcw20170930.dat'))

通过命令行工具hq_reader读取并保存到 csv 文件

-->rainx@JingdeMacBook-Pro:/tmp$ hqreader -d hf -o /tmp/gpcw20170930.csv /tmp/gpcw20170930.dat 写入到文件 : /tmp/gpcw20170930.csv 交易相关 pytdx.trade

说明

Pytdx无法直接提供交易功能,目前采用调用网上常见的trade.dll的方式实现,trade.dll并不是我开发的,Please using it at your own risk

TdxTradeServer (https://github.com/rainx/TdxTradeServer) 为了启动trade.dll,我们提供了TdxTradeServer, 将请求封装为 http rest api, 在使用本接口之前,需要用下面的命令

> get_tts

配置好trade服务(如果要配置多账号版本,建议配置多账号版本的TdxTradeServer)

引入交易接口

from pytdx.trade import TdxTradeApi

接口列表 初始化客户端

api = TdxTradeApi(endpoint="http://10.11.5.175:10092/api", enc_key=b"4f1cf3fec4c84c84", enc_iv=b"0c78abc083b011e7")

api返回数据基本格式 成功

{ "success": true, "data": { ... } }

失败

{ "success": false, "error": "...." }

ping 可用来检测连通性

api.ping()

登入

result = api.logon(ip, port, version, yyb_id, account_id, trade_account, jy_passwrod, tx_password) if result["success"]: client_id = result["data"]["client_id"]

登出

api.logoff(client_id):

查询信息

api.query_data(client_id, category)

查询历史信息

api.query_history_data(client_id, category, begin_date, end_date)

创建订单

api.send_order(client_id, category, price_type, gddm, zqdm, price, quantity)

撤销订单

api.cancel_order(client_id, exchange_id, hth)

获取行情

api.get_quote(client_id, code)

融资融券账户直接还款

api.repay(client_id, amount)

获取所有正在登录的client账号列表

api.get_active_clients()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3