金融量化AI研究--Claude, Python

这里用来记录一些本人运用Claude编程的心得或笔记

导航

通达信数据读取(官方接口更新)--step by step

[2025-12-22更新]

通达信终于迈出了巨大的一步,从传统的看盘软件,走向了量化投研平台。最新的内测版:
通达信金融终端V7.75内测版:
更新时间:2025-12-20 地址:https://data.tdx.com.cn/test/new_tdx_test20251220.exe
参考文章:
https://sns.tdx.com.cn/site/tdx_sns/page_index.html#/detail?resId=6c4c201e08844129b1c0f3f124623ad7&resType=14&uid=RL160331210204479321WHW

新版说明书:
https://www.tdx.com.cn/products/helpfile/tdxw/index.html
用户红宝书:
https://help.tdx.com.cn/book.html
image

在vscode中扩展中加入python扩展python装好后,有一些经常使用的库可以安装下:
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install backtrader -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install vectorbt -i https://pypi.tuna.tsinghua.edu.cn/simple
当然,python量化分析世界还有很多其他的先进包和库,用到了自行安装即可。

首先下载安装上面的最新测试版。安装完毕之后,在安装目录下面,有一个PYPlugins目录:
image
这个目录就包含了Python客户端需要的全部内容,user目录下面就是全部可使用的python文件。
image

由于安装了VS Code,可以用下面的指令看看TpythClient.dll的依赖:
image
这里可以清晰的看出,TpythClient.dll基本都是依赖于主流的windows开发必备的DLL了,不依赖任何Python的dll了.

安装完毕之后,如何进入通达信的Python界面?
首先,下载所需要的全部数据:
第一步:盘后数据下载:
image
当然也可以用“数据维护工具”从本地其他文件夹转移过来:
image

everything搜一下,我机子上的文件还是蛮多的:
image

D:\ProgramData\tdx_20251220\PYPlugins\user\tdxdata_test.py 点击查看代码
import numpy as np 
import pandas as pd 
from tqcenter import tq
import time
import json

"""
    这里是tq的简单使用示例
    使用时请确保已经启动通达信客户端并登录
    取消对应注释即可运行对应功能
"""

"""
    参数设置
"""
codes = ["600519.SH"] #传入的股票代码格式必须是标准格式:6位数+市场后缀(.SH/.SZ/.JJ等)
startime = "20250620" #传入的时间格式必须是:YYYYMMDD 或 YYYYMMDDHHMMSS 
endtime = "20250801"
period = '1d' #K线周期:1d/1w/1m/5m/15m/30m/60m等
dividend_type='none' #复权类型:none-不复权,front-前复权,back-后复权

#初始化
tq.initialize(__file__) #所有策略连接通达信客户端都必须调用此函数进行初始化

'''
    刷新行情缓存 刷新后5分钟内取最新report和k线数据不会触发刷新
'''
refresh_cache = tq.refresh_cache()
print(refresh_cache)

'''
    缓存历史K线 目前仅支持1m 5m 1d三种类型数据 不建议一次更新太多,会堵塞策略和客户端
'''
refresh_kline = tq.refresh_kline(stock_list=['600519.SH'],period='1d')
print(refresh_kline)

'''
    获取K线数据  获取K线数据需要先在客户端中下载对应盘后数据,调用会触发客户端刷新数据,耗时过长请耐心等待
    field_list可以筛选返回字段,默认返回全部字段 比如 field_list=['Open','Close'] 就是只取开盘价和收盘价
    count可以设置每只股票取的数据量
    暂时不支持获取分笔数据
    开高低收单位为元,成交量单位为手,成交额单位为万元
'''
# df = tq.get_market_data(
#         # field_list=['Close'],
#         stock_list=codes,
#         start_time=startime,
#         end_time=endtime,
#         count=30,
#         # dividend_type=dividend_type,
#         period=period,
#         # fill_data=True
#     )
# print(df)

'''
    获取分红送配数据
'''
# divid_factors = tq.get_divid_factors(
#         stock_code=codes[0],
#         start_time='',
#         end_time=''
#     )
# print(divid_factors)

'''
    获取报表数据,调用会触发客户端刷新数据,耗时过长请耐心等待
    总成交额为万位,其他无特殊说明均为个位
'''
# report_data = tq.get_report_data(stock_code = codes[0])
# print(report_data)

'''
    获取基础财务数据 与专业财务数据有区别 不需要下载专业财务数据
    field_list可以筛选返回字段,默认返回全部字段 比如 field_list=['J_zgb','ActiveCapital'] 就是只取总股本和流通股本
    股本 资产 负债 利润 现金流量等数据均为万位
'''
# fdc = tq.get_instrument_detail(codes[0], field_list=[])
# print(fdc)

'''
    专业财务数据 需要先在客户端下载专业财务数据 
    table_list可以筛选返回字段,默认返回固定字段 格式与field_list不同,是 表名.列名 例如 Capital.total_capital 就是 股本表中的总股本字段
    table_list=['Capital'] 就是返回股本表全部字段
    table_list = ['ALL'] #获取目前全部可取字段 读取时间较长 请耐心等待
    report_type 可选 'report_time' 按截止日期 'announce_time' 按公告日期 进行筛选
    如无特殊说明均为万位
'''
# fd = tq.get_financial_data(
#         stock_list=codes,
#         table_list=['Capital'],
#         start_time='20250101',
#         end_time='',
#         report_type='announce_time')
# print(fd)

'''
    下载10大股东数据或ETF申赎数据
    下载的文件保存在 .\\PYPlugins\\data 文件夹
    down_type=1时,下载10大股东数据,down_time只生效年份
    down_type=2时,下载ETF申赎清单,down_time生效到日期
'''
down_ptr_10 = tq.download_file(stock_code='688318.SH', down_time='20250101',down_type=1)
print(down_ptr_10)
# dowm_ptr_etf = tq.download_file(stock_code='159109.SH', down_time='20250101',down_type=2)
# print(dowm_ptr_etf)

'''
    获取交易日列表 需要现在客户端下载上证指数(999999)的盘后数据 目前仅支持A股
    count参数表示获取的交易日数量
'''
# trade_dates = tq.get_trading_dates(market = 'SH', start_time = '20220101', end_time = '', count = 10);
# print(trade_dates)

'''
    获取股票代码
    默认为全部A股
    0:自选股 1:持仓股
    5:所有A股 6:上证指数成份股 7:上证主板 8:深证主板 9:重点指数 
    10:所有板块指数 11:缺省行业板块 12:概念板块 13:风格板块 14:地区板块 15:缺省行业分类+概念板块 16:研究行业一级 17:研究行业二级 18:研究行业三级
    21:含H股 22:含可转债 23:沪深300 24:中证500 25:中证1000 26:国证2000 27:中证2000 28:中证A500
    30:REITs 31:ETF基金 32:可转债 33:LOF基金 34:所有可交易基金 35:所有沪深基金 36:T+0基金
    49:金融类企业 50:沪深A股 51:创业板 52:科创板 53:北交所
    101:国内期货 102:港股 103:美股
'''
stock_list = tq.get_stock_list('0')
print(stock_list)
# print(len(stock_list))

'''
    获取A股全部板块指数
'''
# block_list = tq.get_sector_list()
# print(block_list)
# print(len(block_list))

'''
    获取板块成分股 
    支持板块名称或板块代码两种方式传入
    block_type=0 表示传入板块代码或名称(默认)
    block_type=1 表示传入自定义板块简称 需要是客户端中预先定义好板块简称 不能是 自选股 或 临时条件股
'''
# block_stocks = tq.get_stock_list_in_sector('880081.SH')
# print(block_stocks)
# print(len(block_stocks))

# block_stocks = tq.get_stock_list_in_sector('钛金属')
# print(block_stocks)
# print(len(block_stocks))

# block_stocks = tq.get_stock_list_in_sector('CSBK', block_type = 1)
# print(block_stocks)
# print(len(block_stocks))

'''
    发送消息给通达信客户端的TQ策略界面 
    消息使用 | 分行
'''
# msg_str = "这是第一行. | 这是第二行. "
# tq.send_message(msg_str)

'''
    创建自定义板块
    block_code为板块简称 block_name为板块名称
'''
block_name='JOHN测试板块'
create_ptr = tq.create_sector(block_code='CSBK', block_name=block_name)
print(create_ptr)

'''
    删除自定义板块
'''
# delete_ptr = tq.delete_sector(block_code='CSBK', block_name='测试板块')
# print(delete_ptr)

'''
    重命名自定义板块
    重命名自定义板块仅能重命名板块名而不能改板块简称
'''
# rename_ptr = tq.rename_sector(block_code='CSBK', block_name='测试板块重命名')
# print(rename_ptr)

'''
    清空板块成份股
'''
# clear_ptr = tq.clear_sector(block_code='CSBK', block_name='测试板块重命名')
# print(clear_ptr)

'''
    添加自选股 到 通达信客户端的临时条件股列表 注意 会顶掉原有的临时条件股
    bk_name 客户端已有的自定义板块名,如果不存在则无效果,空则为添加到临时条件股
    bk_name存在,传入空列表则表示清空该板块所有股票,否则为新股票替换原有股票
'''
zxg_result = tq.send_user_block(bk_name=block_name, stocks=["600011.SH","600000.SH","600004.SH","000001.SZ","000002.SZ"])
# zxg_result = tq.send_user_block(bk_name='CSBK', stocks=[])
# zxg_result = tq.send_user_block(bk_name='', stocks=[])

'''
    发送文件路径给通达信客户端的TQ策略界面 可供客户端打开
    file_path 文件绝对路径字符串
'''
# file_path = "F:\\tdx\\new_tdx_600\\PYPlugins\\user\\test.py"
# tq.send_file(file_path)

'''
    发送预警信号给通达信客户端的TQ策略界面
    price_list close_list volum_list bs_flag_list warn_type_list 均要求为纯数字字符串List
    bs_flag_list 0买1卖2未知
    reason_list每个元素有效长度为25个汉字(50个英文)
'''
# warn_res = tq.send_warn(stock_list = codes,
#              time_list = ['20251215141115'],
#              price_list= ['123.45'],
#              close_list= ['122.50'],
#              volum_list= ['1000'],
#              bs_flag_list= ['0'],
#              warn_type_list= ['0'],
#              reason_list= ['价格突破预警线'],
#              count=1)
# print(warn_res)

'''
    发送回测结果给通达信客户端的TQ策略界面
    data_list为二维List,每个子元素对应time_list的一个元素时间点,且每个孙元素最多有16个有效纯数字字符串
'''
bt_data = tq.send_bt_data(stock_code = codes[0],
                          time_list = ['20251215141115','20251216141115'],
                          data_list = [['1','2','3'],['11','12','13']],
                          count = 2)
print(bt_data)

'''
    订阅股票更新 传入回调函数,订阅的股票有更新时,系统会调用回调函数,本例中回调函数功能为订阅股票有更新后获取最新的report数据
    一共最多定订阅100条
    回调定义形式为on_data(datas) 格式为 {"Code":"XXXXXX.XX","ErrorId":"0"}
'''
# def my_callback_func(data_str):
#     print("Callback received data:", data_str)
#     code_json = json.loads(data_str)
#     print(f"codes = {code_json.get('Code')}")
#     report_ptr = tq.get_report_data(code_json.get('Code'))
#     print(report_ptr)
#     return None

# sub_hq = tq.subscribe_hq(stock_list=['600519.SH'], callback=my_callback_func)
# print(sub_hq)

'''
    取消股票订阅更新
'''
# un_sub_ptr = tq.unsubscribe_hq(stock_list=['600519.SH'])
# print(un_sub_ptr)

'''
    获取当前订阅更新的股票列表
'''
# sub_list = tq.get_subscribe_hq_stock_list()
# print(sub_list)

'''
    断开连接 必须调用 在策略退出前或错误处理中调用 比如取到数据为空 中途退出策略 调用close 这样才能配合TQ策略管理器关闭策略
    未能正常close会导致策略管理器中该策略运行状态始终处于运行状态,无法二次启动
    如果遇到这种情况,在策略管理器中删除该策略即可
    
    断开连接示例:
    while True:
    df = tq.get_market_data(
        stock_list=['600519.SH'],
        start_time='',
        end_time='',
        count=1,
        period='1d',
    )
    if not df:
        tq.close()
        raise ValueError("未获得数据")
    else:
        print(df)
    策略管理器断开连接后,客户端将不会再返回数据,调用接口后判断数据是否为空,空则退出策略
    部分接口有自动错误抛出处理,即遇到未返回数据时会自己调用close,再提醒出现错误
    注意,close并不会直接停止程序,只会断开与客户端直接的通讯连接,程序依然会执行后续代码
'''
tq.close()

几个可用的tdx读取程序

通达信官网软件下载:https://www.tdx.com.cn/soft.html

pytdx
https://pytdx-docs.readthedocs.io/zh-cn/latest/installation/
https://tdxpy.readthedocs.io/zh-cn/latest/api/hq/

mootdx
https://github.com/mootdx/mootdx

历史分钟数据下载地址
历史股票K线数据按一分钟、五分钟、十五分钟、三十分钟、六十分钟为粒度,上传到了百度网盘。打开可以自由下载。
百度网盘链接:https://pan.baidu.com/s/1JrIFmzPmiVYehRSqctfNdA 提取码:vdes

通达信数据解析
GitHub主站:https://github.com/wkingnet/stock-analysis
Gitee镜像:https://gitee.com/wkingnet/stock-analysis

python读取通达信每日数据和五分钟数据,并且上传到clickhouse
https://gitcode.csdn.net/662b4a9cc46af926427792e8.html

posted on 2025-09-25 00:24  chengjon  阅读(1072)  评论(0)    收藏  举报