
TdxQuant是由深圳市财富趋势科技股份有限公司研发的专业量化投研平台,专注于为国内量化投资者提供从策略研究到投资的全流程解决方案。平台以高效、简洁为核心设计理念,致力于降低量化交易门槛,提升策略开发与执行的效率。
依托通达信近三十余年在金融科技领域的深厚积累,TdxQuant集成了完备的历史行情数据库、金融数据库及稳定的交易系统基础设施,为策略的研发、回测、验证和执行提供了坚实可靠的技术支持。
平台采用分层化、模块化的服务体系,可灵活适配从高校学生、独立研究者到专业机构投研团队等不同用户的需求,实现从策略构思到交易落地的无缝衔接。
TdxQuant 是一套基于通达信金融终端构建的 Python 量化策略运行框架。该框架通过 API 接口形式,为策略交易提供所需的行情数据获取与交易指令执行功能。
TdxQuant 支持 64 位 Python 3.7、3.8、3.9、3.10、3.11、3.12、3.13等版本,系统会自动适配当前 Python 版本,建议使用3.13版本。 请注意:运行 TdxQuant 程序前,需预先启动支持TQ策略功能的 通达信金融终端、专业研究版等版本。
TdxQuant 以 tqcenter 行情模块为核心,专注于为量化交易者提供高效、直接的数据服务,主要包含以下内容:
•行情数据:历史与实时的 K 线、快照、分笔(Tick)数据•基本面数据:除权除息、基本财务、专业财务、股票交易数据、市场数据等•新股和合约等信息:标的物基础信息、可转债、新股申购等•分类数据:分类板块、行业分类、自定义板块等
TdxQuant提供覆盖量化投研全流程的核心功能模块,主要应用场景包括:
平台提供“即用型”标准化数据。所有历史与实时数据均在服务端完成清洗、对齐,并预加载至客户端。支持用户快速获取指定时间维度的历史数据,并进行策略信号计算与回测分析。既提供复权因子,也提供各种类型的复权后的数据。
支持实时行情数据订阅,用户可基于自定义的指标与因子模型进行在线计算。当预设条件触发时,系统通过信号接口实时推送预警信息至客户端,助力研究者及时捕捉市场动态与交易机会。
平台构建了完整的策略交易闭环,提供模拟交易、券商实盘等两种执行环境:
•模拟交易:在仿真市场环境中,使用实时行情数据对策略进行持续跟踪与验证,评估其实际表现,全程无资金风险。•实盘交易:通过稳定的交易总线,安全对接券商报盘系统,实现策略信号的自动化、高可靠性下单与交易管理。
在验证交易策略时,历史回测是评估其有效性的关键环节,但传统人工方式难以处理海量数据与复杂计算。量化交易可在几分钟内完成一次全面回测,快速获得统计验证结果,极大提升了策略研发的迭代效率。
量化交易借助计算机强大的数据处理能力,能够从海量市场信息中发掘人工难以察觉的规律与机会。面对全市场数千只股票的实时波动,量化系统可同时监控多重条件,避免机会错失。它能够综合考量选股、择时、资产配置与风险管理,构建并执行具有较大概率的投资组合,追求收益最大化。
与传统主观投资不同,量化交易将投资理念、经验甚至市场直觉转化为严谨的数学模型。通过系统化的信号生成与执行机制,有效克服人性中的情绪偏差,使投资决策过程更具纪律性、可重复性与可优化性。
工欲善其事,必先利其器。 对于个人投资者而言,独立搭建一套完整的量化交易体系,其复杂程度不亚于从零开始制造一台大型联合收割机,涉及数据、系统、策略等多层面的巨大投入。
量化交易依赖于高质量的历史与实时数据,包括行情、财务、宏观及基本面数据等。构建和维护这样一个数据仓库,不仅需要持续的数据采购、清洗、更新与运维成本,还需在数据存储、访问速度与系统稳定性方面进行深入的技术投入。
一个成熟的量化平台需要支持多样的策略开发语言、具备高速的回测与模拟引擎、提供科学的策略评估体系,并为实盘交易提供全方位的保障。过往,研究者往往需要兼具金融知识与工程能力。如今,TdxQuant致力于让量化交易变得更专业——您只需专注于策略逻辑本身,其余复杂工作交给我们。
TdxQuant是一款集金融数据与策略投研工具于一体的量化平台。我们的目标是为投资者提供"开箱即用"的完整解决方案——就像为您准备好了一台功能完备的"大型收割机",您只需专注于驾驶与收获。
•支持策略在本地IDE环境中开发与运行,保障代码安全与私密性
•通过"投资学院"系统学习量化交易相关知识体系•通过"宽客社区"与同行交流心得、解答疑惑•全程助力用户从入门到精通,向职业量化投资稳步成长
•
提供高质量、高精度、快速接入的金融元数据
支持多种策略类型的便捷编写、回测、模拟与实盘
•股票数据:我们拥有所有A股上市公司2005年以来的股票行情数据、财务数据、上市公司基本信息、融资融券信息等。为了避免幸存者偏差,我们包括了已经退市的股票数据。其中volume(成交量)字段单位是股。
基金数据:我们目前提供了多种在交易所上市的基金的行情、净值等数据,包含ETF、LOF、分级A/B基金以及货币基金的完整的行情、净值数据等,请点击基金数据查看。
股票指数:我们支持指数数据,包括指数的行情数据以及成分股数据。为了避免未来函数,我们支持获取历史任意时刻的指数成分股信息,具体见get_index_stocks。
行业板块/概念板块:我们支持按行业、按概念板块获取成分股,具体见获取A股板块代码列表get_sector_list及获取板块成份股get_stock_list_in_sector。
宏观数据:我们提供全方位的宏观数据,为投资者决策提供有力数据支持。
金融期货数据:我们提供中金所推出的所有金融期货产品的行情数据,并包含历史产品的数据。
商品期货:我们支持从2005年以来上海国际能源交易中心、上期所、郑商所、大商所的行情数据,并包含历史产品的数据。
initialize(file) #所有策略连接通达信客户端都必须调用此函数进行初始化
"initialize"不可修改。
from tqcenter import tqtq.initialize(__file__)
1.该函数用于初始化,任何一个策略都必须有该函数。
subscribe_hq(stock_list: List[str] = [],callback = None):•订阅股票更新 传入回调函数,订阅的股票有更新时,系统会调用回调函数,最多订阅100条
•回调函数格式定义为on_data(datas) datas格式为 {"Code":"XXXXXX.XX","ErrorId":"0"}
from tqcenter import tqtq.initialize(__file__)# 回调函数 功能为收到更新后请求最新的report数据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 Nonesub_hq = tq.subscribe_hq(stock_list=['688318.SH'], callback=my_callback_func)print(sub_hq)# 收到更新时策略需要正在运行#while True:# time.sleep(1)
{"Error" : "订阅688318.SH更新成功.","ErrorId" : "0","run_id" : "1"}
unsubscribe_hq(stock_list: List[str] = []):•订阅股票更新 传入回调函数,订阅的股票有更新时,系统会调用回调函数,最多订阅100条
•回调函数格式定义为on_data(datas) datas格式为 {"Code":"XXXXXX.XX","ErrorId":"0"}
from tqcenter import tqtq.initialize(__file__)un_sub_ptr = tq.unsubscribe_hq(stock_list=['688318.SH'])print(un_sub_ptr)
{"Error" : "取消全部订阅更新失败.","ErrorId" : "0","run_id" : "1"}
get_subscribe_hq_stock_list():from tqcenter import tqtq.initialize(__file__)sub_list = tq.get_subscribe_hq_stock_list()print(sub_list)
['600519.SH']refresh_cache()from tqcenter import tqtq.initialize(__file__)refresh_cache = tq.refresh_cache()print(refresh_cache)
使用后会在客户端弹出刷新数据的加载界面,加载完成后才会有返回
{"Error" : "Refresh Cache Success.","ErrorId" : "0","run_id" : "1"}
refresh_kline(stock_list: List[str] = [], period: str = '')from tqcenter import tqtq.initialize(__file__)refresh_kline = tq.refresh_kline(stock_list=['688318.SH'],period='1d')print(refresh_kline)
使用后会在客户端弹出刷新数据的加载界面,加载完成后才会有返回
{"Error" : "refresh kline cache success.","ErrorId" : "0","run_id" : "1"}
send_message(msg_str: str) -> Dict:•传入的字符串使用 | 可以让客户端将其分为两条(插入 \n 也可以分行显示)
from tqcenter import tqtq.initialize(__file__)msg_str = "这是第一行. | 这是第二行. "tq.send_message(msg_str)
send_warn(stock_list: List[str] = [],time_list: List[str] = [],price_list: List[str] = [],close_list: List[str] = [],volum_list: List[str] = [],bs_flag_list: List[str] = [],warn_type_list: List[str] = [],reason_list: List[str] = [],count: int = 1) -> Dict:
•price_list、close_list、volum_list、bs_flag_list、warn_type_list 均要求为纯数字字符串List
•bs_flag_list 0买1卖2未知,长度小于count的会自动补为2。•reason_list每个元素有效长度为25个汉字(50个英文)|•count限定入参中每个list中的有效数据个数,即每个list前count个数据会传给客户端•stock_list与其他list的元素数据是一一对应的,即stock_list的第一个元素对应的预警信息是其他list的第一个元素,同一只股票的多个预警信息,则在stock_list中加入多次该股票
from tqcenter import tqtq.initialize(__file__)warn_res = tq.send_warn(stock_list = ['688318.SH','688318.SH','600519.SH'],time_list = ['20251215141115','20251215142100','20251215143101'],price_list= ['123.45','133.45','1823.45'],close_list= ['122.50','132.50','1822.50'],volum_list= ['1000','2000','15000'],bs_flag_list= ['0'],warn_type_list= ['0'],reason_list= ['价格突破预警线','收盘价突破预警线','成交量突破预警线'],count=3)print(warn_res)
{'Error': '发送预警信号成功.', 'ErrorId': '0', 'run_id': '1'}send_file(file: str) -> Dict:1
•文件放于 .\PYPlugins\file\ 文件夹中时,file可仅传入文件名
•文件放于其他位置时,file需要传入绝对路径
from tqcenter import tqtq.initialize(__file__)file = "test.txt"tq.send_file(file)
send_bt_data(stock_code: str = '',time_list: List[str] = [],data_list: List[List[str]] = [],count: int = 1) -> Dict:
•data_list为二维List,每个子元素对应time_list的一个元素时间点,且每个孙元素最多有16个有效纯数字字符串,即data_list每个子List的前16个数据为一个时间点的有效数据
•count限定入参中每个list中的有效数据个数,即每个list前count个数据会传给客户端
from tqcenter import tqtq.initialize(__file__)bt_data = tq.send_bt_data(stock_code = '688318.SH',time_list = ['20251215141115'],data_list = [['11']],count = 1)print(bt_data)
{'Error': '发送回测结果成功.', 'ErrorId': '0', 'run_id': '1'}download_file(stock_code: str = '',down_time:str = '',down_type:int = 1):
•down_type=1时,下载10大股东数据,down_time只生效年份
•down_type=2时,下载ETF申赎清单,down_time生效到日期•下载的文件保存在 .\PYPlugins\data 文件夹
from tqcenter import tqtq.initialize(__file__)# 下载10大股东数据down_ptr_10 = tq.download_file(stock_code='688318.SH', down_time='20250101',down_type=1)print(down_ptr_10)# 下载ETF申赎数据dowm_ptr_etf = tq.download_file(stock_code='159109.SH', down_time='20250101',down_type=2)print(dowm_ptr_etf)
{"ErrorId" : "0","Msg" : "下载十大股东数据[2025]成功。","run_id" : "1"}{"ErrorId" : "0","Msg" : "下载ETF申述清单[20250101]成功。","run_id" : "1"}
get_trading_dates(market: str,start_time: str,end_time: str,count:int = -1) -> List:
•需要现在客户端下载上证指数(999999)的盘后数据 目前仅支持A股
•count > 0时,限制返回从结束日期往前最近的count个在限定时间段中的交易日
from tqcenter import tqtq.initialize(__file__)trade_dates = tq.get_trading_dates(market = 'SH', start_time = '20220101', end_time = '', count = 10);print(trade_dates)
['20251211', '20251212', '20251215', '20251216', '20251217', '20251218', '20251219', '20251222', '20251223', '20251224']
