大数跨境
0
0

251202通达信官方量化(TDX Quant)(2)—架构

251202通达信官方量化(TDX Quant)(2)—架构 福瑞布
2025-12-02
10
导读:一、Python与tdxw.exe 关系Python端Tqcenter.py中tdxdata类:封装与DLL交

现在通达信开始支持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进行交互,实现了获取市场数据、财务数据、下单等功能,是整个量化交易平台的核心组件。

 


喜欢请赞,推荐,转发,收藏!这是娱乐的动力。不喜欢忽略。


本公众号所有内容旨在分享知识与信息,仅为个人观点,不构成任何专业意见或投资建议。)




#通达信公式   #通达信增强  #通达信使用  #通达信量化

获取本号分享的资源的方式见:

https://获取本号所分享资源的方法


小布AI助手


【声明】内容源于网络
0
0
福瑞布
个人业余娱乐,记录自研成果。熟悉通达信软件使用、精通通达信公式设计及dll函数开发。
内容 72
粉丝 0
福瑞布 个人业余娱乐,记录自研成果。熟悉通达信软件使用、精通通达信公式设计及dll函数开发。
总阅读858
粉丝0
内容72