type
status
date
slug
summary
tags
category
icon
password
这篇文章将深入分析一段 Python 代码,该代码用于从通达信交易平台获取股票行情数据。我们将探讨代码的目的、功能、结构、使用的库、潜在的限制以及改进建议,并提供流程图以帮助理解代码执行过程。
yuhanbolh 库直接调用
该代码已经直接封装到个人开源库,可直接调用,不用那么烦琐,如何下面的代码,具体查看 yuhanbolh 文档的:
代码目的和功能
这段代码的主要目的是从通达信服务器获取各种类型的股票市场数据,包括盘口数据(买卖五档)、K 线数据、市场股票数量、指数 K 线数据、历史分钟数据、历史分笔成交以及财务数据。
它通过连接通达信服务器,发送请求并接收数据,然后将数据转换为 Pandas DataFrame 格式,方便用户进行后续分析和处理。
代码结构和组织方式
代码采用了模块化的设计,主要分为三个函数:
get_tdx_market_address()
:负责从通达信配置文件connect.cfg
中读取服务器 IP 地址和端口号。
get_financial_data()
:负责连接通达信服务器,使用指定的函数获取数据,并将数据转换为 Pandas DataFrame。
main
部分(if __name__ == "__main__":
):负责调用上述两个函数,演示如何获取不同类型的市场数据。
这种模块化的设计提高了代码的可读性和可维护性,方便用户根据需要修改和扩展功能。
代码中任何复杂或不寻常的方面
代码中一个值得注意的方面是
get_financial_data()
函数使用了 lambda
表达式。这使得可以将不同的数据获取函数作为参数传递给 get_financial_data()
,从而实现代码的复用。例如,要获取盘口数据,可以传递
lambda api: api.get_security_quotes(...)
;要获取 K 线数据,可以传递 lambda api: api.get_security_bars(...)
。代码的潜在限制和改进建议
- 错误处理: 代码的错误处理机制可以改进。例如,在
get_tdx_market_address()
函数中,如果配置文件不存在或格式错误,应该提供更详细的错误信息,并可以选择使用默认的服务器地址。
- 异常处理:
get_financial_data()
函数使用了try...except
块来捕获异常,但这不够精细。应该捕获更具体的异常类型,例如网络连接错误、数据解析错误等,并提供相应的处理逻辑。
- 重连机制: 如果网络连接中断,代码应该尝试重新连接服务器。
- 数据校验: 代码没有对接收到的数据进行校验,例如检查数据是否完整、格式是否正确等。
- 异步处理: 可以使用异步编程来提高数据获取效率,尤其是在需要获取大量数据的情况下。
代码中使用的编程语言和库的简要概述
代码使用 Python 编程语言,并依赖于以下库:
pytdx
:用于连接通达信服务器并获取数据。
configparser
:用于读取配置文件。
os
:用于操作文件系统。
pandas
:用于数据处理和分析。
代码流程图 (Mermaid)
https://tse3.mm.bing.net/th/id/OIG3.Jco2r0253_spfSFp07mS
深入讨论:pytdx库和通达信API
pytdx
库是 Python 中用于访问通达信行情数据的关键工具。它封装了通达信的 API 接口,使得开发者可以使用 Python 代码方便地获取股票、期货、期权等市场数据。该库支持多种数据类型,例如实时行情、K 线数据、财务数据等。这段代码中,
pytdx.hq.TdxHq_API()
创建了一个 API 对象,用于与通达信服务器进行通信。api.connect()
方法用于建立与服务器的连接,api.disconnect()
方法用于断开连接。其他方法,例如 get_security_quotes()
、get_security_bars()
等,用于获取不同类型的市场数据。实际应用和扩展
这段代码可以作为基础框架,用于构建更复杂的股票分析应用程序。例如,可以结合其他 Python 库,例如
matplotlib
和 seaborn
,对获取的数据进行可视化分析。还可以使用机器学习算法对数据进行建模和预测。代码
获取的数据
获取盘口数据(买卖五档)
函数 api.get_security_quotes;参数为分别为市场代码(0 为深,1 为沪),股票代码。
get_financial_data(ip, port, lambda api: api.get_security_quotes([(0, '000001'),(0,'000002')]))
数据如下:
market | code | active1 | price | last_close | open | high | low | servertime | reversed_bytes0 | reversed_bytes1 | vol | cur_vol | amount | s_vol | b_vol | reversed_bytes2 | reversed_bytes3 | bid1 | ask1 | bid_vol1 | ask_vol1 | bid2 | ask2 | bid_vol2 | ask_vol2 | bid3 | ask3 | bid_vol3 | ask_vol3 | bid4 | ask4 | bid_vol4 | ask_vol4 | bid5 | ask5 | bid_vol5 | ask_vol5 | reversed_bytes4 | reversed_bytes5 | reversed_bytes6 | reversed_bytes7 | reversed_bytes8 | reversed_bytes9 | active2 |
0 | 000001 | 4565 | 11.44 | 11.54 | 11.5 | 11.61 | 11.42 | 14:59 :55.885 | 14998857 | -1144 | 1215783 | 13355 | 1.399309e+09 | 559943 | 655841 | 0 | 139449 | 11.44 | 11.45 | 6281 | 3170 | 11.43 | 11.46 | 5718 | 5392 | 11.42 | 11.47 | 23460 | 738 | 11.41 | 11.48 | 6109 | 769 | 11.40 | 11.49 | 26457 | 1344 | (3286,) | 0 | 0 | 0 | 0 | 0 | 0.09 |
0 | 000002 | 4702 | 8.71 | 8.95 | 8.9 | 8.95 | 8.70 | 14:59 :56.868 | 14999130 | -871 | 1628734 | 27001 | 1.436246e+09 | 849810 | 778924 | 0 | 148301 | 8.70 | 8.71 | 23138 | 3580 | 8.69 | 8.72 | 4219 | 7305 | 8.68 | 8.73 | 7850 | 3958 | 8.67 | 8.74 | 1154 | 6850 | 8.66 | 8.75 | 2506 | 3296 | (2774,) | 0 | 0 | 0 | 0 | 0 | -0.22 |
获取 K 线数据
函数 api.get_security_bars;参数为分别为 K 线类型(0 为分时,1 为 1 分钟,2 为 5 分钟,3 为 15 分钟,4 为 30 分钟,5 为 60 分钟),市场代码(0 为深,1 为沪),股票代码,索引(0 为最新,1 为前一,2 为前二),数量。
get_financial_data(ip, port, lambda api: api.get_security_bars(9, 0, '000001', 0, 3))
数据如下:
open | close | high | low | vol | amount | year | month | day | hour | minute | datetime |
11.50 | 11.61 | 11.70 | 11.48 | 1086263.0 | 1.260162e+09 | 2024 | 11 | 13 | 15 | 0 | 2024-11-13 15:00 |
11.59 | 11.54 | 11.70 | 11.53 | 1159783.0 | 1.348378e+09 | 2024 | 11 | 14 | 15 | 0 | 2024-11-14 15:00 |
11.50 | 11.44 | 11.61 | 11.42 | 1215783.0 | 1.399309e+09 | 2024 | 11 | 15 | 15 | 0 | 2024-11-15 15:00 |
获取指数 K 线数据
类同获取 K 线数据,函数 api.get_index_bars;参数为分别为 K 线类型(0 为分时,1 为 1 分钟,2 为 5 分钟,3 为 15 分钟,4 为 30 分钟,5 为 60 分钟),市场代码(0 为深,1 为沪),指数代码,索引(0 为最新,1 为前一,2 为前二),数量
get_financial_data(ip, port, lambda api: api.get_index_bars(9, 1, '000001', 1, 2))
数据如下:
open | close | high | low | vol | amount | year | month | day | hour | minute | datetime | up_count | down_count |
3406.92 | 3439.28 | 3442.30 | 3404.53 | 6736623.0 | 8.294353e+11 | 2024 | 11 | 13 | 15 | 0 | 2024-11-13 15:00 | 1166 | 1074 |
3429.51 | 3379.84 | 3441.77 | 3376.15 | 6315566.0 | 7.628842e+11 | 2024 | 11 | 14 | 15 | 0 | 2024-11-14 15:00 | 183 | 2113 |
获取历史分钟数据
函数 api.get_history_minute_time_data;参数为分别为市场代码(0 为深,1 为沪),股票代码,日期。
get_financial_data(ip, port, lambda api: api.get_history_minute_time_data(0, '000001', 20241115))
数据如下:
price | vol |
11.48 | 71782 |
11.46 | 40120 |
11.46 | 42348 |
11.49 | 11178 |
11.48 | 16175 |
11.48 | 13429 |
11.51 | 10393 |
获取历史分笔成交
函数 api.get_transaction_data;参数为分别为市场代码(0 为深,1 为沪),股票代码,索引(0 为最新,1 为前一,2 为前二),数量
get_financial_data(ip, port, lambda api: api.get_transaction_data(0, '000001', 0, 30))
数据如下:
time | price | vol | num | buyorsell |
14:55 | 11.44 | 77 | 11 | 0 |
14:55 | 11.44 | 395 | 25 | 0 |
14:55 | 11.44 | 342 | 23 | 0 |
14:55 | 11.44 | 307 | 24 | 0 |
14:55 | 11.44 | 1209 | 78 | 0 |
14:55 | 11.44 | 182 | 11 | 0 |
14:55 | 11.43 | 151 | 16 | 1 |
14:55 | 11.43 | 223 | 38 | 1 |
获取财务数据
函数 api.get_finance_info;参数为分别为市场代码(0 为深,1 为沪),股票代码
get_financial_data(ip, port, lambda api: api.get_finance_info(0, '000001'))
数据如下:
market | code | liutongguben | province | industry | updated_date | ipo_date | zongguben | guojiagu | faqirenfarengu | farengu | bgu | hgu | zhigonggu | zongzichan | liudongzichan | gudingzichan | wuxingzichan | gudongrenshu | liudongfuzhai | changqifuzhai | zibengongjijin | jingzichan | zhuyingshouru | zhuyinglirun | yingshouzhangkuan | yingyelirun | touzishouyu | jingyingxianjinliu | zongxianjinliu | cunhuo | lirunzonghe | shuihoulirun | jinglirun | weifenpeilirun | meigujingzichan | baoliu2 |
0 | 000001 | 1.940562e+10 | 18 | 1 | 20241019 | 19910403 | 1.940592e+10 | 19660000.0 | 3.963500e+11 | 1.276340e+12 | 0.0 | 0.0 | 19400.000572 | 5.745988e+13 | 0.0 | 8.753000e+10 | 6.153000e+10 | 517695.0 | 0.0 | 0.0 | 8.071500e+11 | 4.904690e+12 | 1.115820e+12 | 6.371300e+11 | 0.0 | 4.786900e+11 | 1.837200e+11 | 1.371580e+12 | -1.891300e+11 | 0.0 | 4.774400e+11 | 3.972900e+11 | 3.972900e+11 | 2.398990e+12 | 21.67 | 9.0 |
获取市场股票数量
函数 api.get_security_count;参数为市场代码(0 为深,1 为沪)
get_financial_data(ip, port, lambda api: api.get_security_count(0))
数据如下:
value |
19367 |
- 作者:余汉波
- 链接:https://wd.sanrenjz.com/%E4%BB%A3%E7%A0%81%E4%B8%8E%E6%95%88%E7%8E%87/%E6%89%93%E9%80%A0%E4%BD%A0%E7%9A%84%E8%82%A1%E7%A5%A8%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7%EF%BC%9A%E4%BB%8E%E9%80%9A%E8%BE%BE%E4%BF%A1%E6%95%B0%E6%8D%AE%E8%8E%B7%E5%8F%96%E5%BC%80%E5%A7%8B
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。