现在通达信开始支持Python增强选股回测预警功能和量化交易(TDX Quant),做了一点功课,理解TQ的python量化架构,为下一步工作建立基础。
251201通达信官方Python量化(TDX Quant)(1)
我是布洗脸,关注我,第一时间获取我的研习成果。
一、Python与tdxw.exe 关系
Python端
Tqcenter.py中tdxdata类:封装与DLL交互的核心逻辑,通过ctypes库加载TPythClient.dll。
映射DLL函数:显式声明DLL函数的参数类型。
数据结构处理:匹配C/C++结构。
数据流控制:发起请求(如获取行情数据)并解析DLL返回的结果。
DLL桥接层(TPythClient.dll)
函数导出:提供C接口函数供Python调用
进程间通信:通过tdxw.exe共享内存/消息队列:实现DLL与tdxw.exe的高效数据交换。
回调机制:支持DLL主动向Python传递数据(如实时行情推送),需在Python中定义回调函数并注册到DLL。
通达信客户端(tdxw.exe)
数据源:提供股票行情、交易接口等核心功能。
与DLL交互:接收DLL的数据请求指令(如查询某股票价格)。
推送数据到DLL的缓冲区(如分时成交数据)。
Tqcenter.py相当于官方提供的包,TPythClient.dll桥接的pyhon3.13。
二、python调用dll的处理
Dll是C++编写,python中调用dll,使用 ctypes 模块,ctypes 是 Python 标准库中的一个模块,允许调用 DLL 中的函数并使用它们的数据类型。
基本步骤:
导入 ctypes 模块
加载 DLL 文件
定义函数签名
调用 DLL 函数
1. 加载DLL:
dll_path = os.path.join(os.path.dirname(__file__), 'TPythClient.dll')
dll = ctypes.CDLL(dll_path)
2. 设置函数签名:
dll.GetHISDATsInStr.restype = ctypes.c_char_p
3. 调用函数传递参数:
ptr = dll.GetHISDATsInStr(
run_id,
codestr, # 股票代码
startimestr, # 开始时间
endtimestr, # 结束时间
periodstr, # 周期
dividend_type_int,# 除权类型
count, # 数量
timeout_ms # 超时时间
)
4. 接收返回值:
DLL通常返回字符串格式的JSON数据,Python再将其解析为字典:
data_dict = json.loads(ptr)
数据交换方式
• 输入参数:Python将数据转换为C兼容的类型(如将字符串编码为bytes)
• 输出结果:DLL返回字符串(通常是JSON格式),Python再解析为Python对象
这种方法的优势在于:
1. 不需要额外的包装器或绑定代码
2. 可以直接调用现有的C/C++ DLL
3. 数据交换通过标准的C数据类型完成
三、tqcenter.py中的所有数据类型和函数及其说明
主要类:tdxdata
TDX数据访问类,提供了与通达信DLL交互的接口,封装了TPythClient.dll中的方法。
类变量
·run_id: 运行ID
·run_mode: 运行模式
·file_name: 文件名
·m_is_init_data_transfer: 是否已注册回调函数标志
·data_transfer: 回调函数类型
·data_callback_func: 订阅回调函数字典
·_forward_factor_cache: 前复权因子缓存
核心方法
数据获取类方法
1.get_market_data - 获取市场数据
o参数:
§field_list: 字段列表
§stock_list: 股票列表
§period: 数据周期(如'1d','1m','5m'等)
§start_time: 开始时间
§end_time: 结束时间
§count: 数据条数
§dividend_type: 除权类型('none','front','back')
§fill_data: 是否填充数据
o返回:字典格式的市场数据
2.get_divid_factors - 获取除权除息数据
o参数:
§stock_code: 股票代码
§start_time: 开始时间
§end_time: 结束时间
o返回:包含除权除息信息的DataFrame
3.get_financial_data - 获取财务数据
o参数:
§stock_list: 股票列表
§table_list: 表格列表
§start_time: 开始时间
§end_time: 结束时间
§report_type: 报告类型
o返回:字典格式的财务数据
4.get_instrument_detail - 获取合约详情
o参数:
§stock_code: 股票代码
§iscomplete: 是否完整信息
o返回:字典格式的合约详情
5.get_report_data - 获取报表数据
o参数:
§stock_codes: 股票代码
§isLevel2: 是否Level2数据
o返回:字典格式的报表数据
6.get_sector_list - 获取板块列表
o返回:板块代码列表
7.get_stock_list_in_sector - 获取板块成分股
o参数:
§block_code: 板块代码
o返回:股票代码列表
交易相关类方法
8.order_stock - 下单接口
o参数:
§account: 账户信息
§stock_code: 股票代码
§order_type: 订单类型
§order_volume: 订单数量
§price_type: 价格类型
§price: 价格
§strategy_name: 策略名称
§order_remark: 订单备注
o返回:订单执行结果
9.send_result - 发送结果到主程序
o参数:
§result_str: 结果字符串
o返回:发送结果状态
数据订阅类方法
10.subscribe_quote - 订阅单股行情数据回调
o参数:
§stock_code: 股票代码
§period: 数据周期
§start_time: 开始时间
§end_time: 结束时间
§count: 数据条数
§dividend_type: 除权类型
§callback: 回调函数
o返回:订阅结果
辅助类方法
11.initialize - 初始化连接
o参数:
§path: 连接路径
12.close - 关闭连接
13._auto_initialize - 自动初始化连接
14._release - 释放连接
15.price_df - 提取价格数据DataFrame
o参数:
§df: 输入数据
§price_col: 价格列名
§column_names: 列名
o返回:价格数据DataFrame
全局辅助函数
1._convert_time_format - 将起始时间转换为标准格式
o参数:
§start_time: 起始时间,格式为 YYYYMMDD 或 YYYYMMDDHHMMSS
o返回:格式化后的时间,格式为 YYYY-MM-DD HH:MM:SS
2.dynamic_qmt_converter - 动态转换财务数据为QMT格式
o参数:
§financial_data: 财务数据
o返回:转换后的财务数据字典
3.merge_all_statements - 合并所有报表到一个DataFrame
o参数:
§converted_data: 转换后的数据
o返回:合并后的DataFrame
数据格式化私有方法
4._format_kline_data - 格式化K线数据
o参数:
§all_data: 所有数据
§stock_list: 股票列表
§fill_data: 是否填充数据
o返回:格式化的K线数据
5._format_tick_data - 格式化tick数据
o参数:
§all_data: 所有数据
§field_list: 字段列表
o返回:格式化的tick数据
6._add_forward_factor_to_data - 为行情数据添加前复权因子
o参数:
§data_dict: 数据字典
§stock_list: 股票列表
o返回:添加前复权因子后的数据字典
7._calculate_stock_forward_factors - 计算单只股票的前复权因子
o参数:
§stock_code: 股票代码
§time_index: 时间索引
o返回:前复权因子序列
8._calculate_forward_factors_from_dividends - 从除权除息数据计算前复权因子的调整系数
o参数:
§df_factors: 除权除息数据
§price_series: 价格序列
o返回:调整系数序列
9._data_callback_transfer - 数据回调传输函数
o参数:
§data_str: 数据字符串
o返回:回调函数执行结果
10._financial_transfer - 将C++接口的财务数据转换为迅投格式的字典
o参数:
§data_str: 数据字符串
o返回:转换后的字典
11._get_run_id - 获取当前的run_id
o返回:运行ID
数据类型
1.dll - 通过ctypes加载的TPythClient.dll实例
2.各种数据类型映射:
odividend_type_map: 除权类型映射('none': 0, 'front': 1, 'back': 2)
ovalid_periods: 有效周期列表
3.返回数据格式:
o市场数据:字典格式,包含各字段的DataFrame
o财务数据:嵌套字典格式
o行情数据:DataFrame格式
总结如下
主要类:tdxdata
这是整个模块的核心类,负责与通达信DLL进行交互,提供了丰富的数据获取和交易功能。
核心功能分类:
1.数据获取方法
oget_market_data - 获取市场数据(K线、分时等)
oget_divid_factors - 获取除权除息数据
oget_financial_data - 获取财务数据
oget_instrument_detail - 获取合约详情
oget_report_data - 获取报表数据
2.板块相关方法
oget_sector_list - 获取板块列表
oget_stock_list_in_sector - 获取板块成分股
3.交易相关方法
oorder_stock - 下单接口
osend_result - 发送结果到主程序
4.数据订阅方法
osubscribe_quote - 订阅实时行情数据
5.辅助方法
oinitialize - 初始化连接
oclose - 关闭连接
oprice_df - 提取价格数据
全局辅助函数
1._convert_time_format - 时间格式转换
2.dynamic_qmt_converter - 财务数据格式转换
3.merge_all_statements - 合并财务报表
数据格式化私有方法
这些方法主要用于处理从DLL获取的原始数据,将其转换为更易用的Python数据结构(主要是pandas DataFrame)。
主要数据类型
1.dll - 通过ctypes加载的TPythClient.dll实例
2.字典、列表、DataFrame - 主要的数据返回格式
3.各种映射关系 - 如除权类型映射等
这个模块通过Python的ctypes库与通达信的TPythClient.dll进行交互,实现了获取市场数据、财务数据、下单等功能,是整个量化交易平台的核心组件。
喜欢请赞,推荐,转发,收藏!这是娱乐的动力。不喜欢忽略。
获取本号分享的资源的方式见:

