miniqmt 行情的备选方案 ---tdxrs(上)

📌导读:随着监管趋严,不少券商 miniqmt 已经停止服务,原先免费好用的行情数据源失效,历史回测、实盘策略都陷入无数据可用的困境。本文介绍高性能通达信行情解析库tdxrs,并基于该库从零搭建双均线量化回测完整案例,全部代码可直接复制运行。

一、什么是 tdxrs

tdxrs是一款使用 Rust 语言高性能重写的通达信 (TDX) 行情数据解析库。通过 PyO3 实现 Python 无缝调用,API 和经典tdxpy保持兼容。 本地解析性能对比纯 Python 版本提升9‑11 倍,60 线程高并发场景性能零退化。

tdxrs (Rust) 与纯 Python 解析库性能对比:

拿到高速行情数据只是第一步,下面我们以 tdxrs 作为行情底座,结合 Pandas、TA‑Lib、Backtrader,搭建经典双均线 SMA Crossover策略,完成数据获取、信号生成、回测、绩效评估,代码直接复制可用,建议收藏。

二、核心亮点:为什么选择 tdxrs + Python 量化栈

  • ✅ 极致行情性能:本地文件解析性能提升 9‑11 倍,适合大批量历史回测、实时策略采集。
  • ✅ 全品类数据覆盖:A 股个股、指数 12 种周期 K 线、分时、五档盘口;支持 ETF、LOF、REITs 基金接口。
  • ✅ 自带复权计算:本地完成前复权、后复权,自动处理分红送配股,规避服务端复权缺失造成价格跳空。
  • ✅ 完美兼容 Python 量化生态:对接 Pandas 数据处理、NumPy 数值计算、TA‑Lib 技术指标、Backtrader 回测框架。
  • ✅ 策略扩展性强:示例为趋势跟踪双均线,可扩展均值回归、突破、配对交易、统计套利、多因子等策略。

三、环境准备

⚠️版本要求:Python 3.11 及以上,输出 DataFrame 依赖 pandas 需要安装依赖库:

  • tdxrs:通达信 rust 解析库
  • pandas:表格数据处理
  • TA‑Lib:技术指标库(MACD、RSI、均线等)
  • backtrader:回测框架
  • matplotlib:绘图,输出回测图表
bash 复制代码
pip install tdxrs pandas backtrader matplotlib TA‑Lib

提示:Windows 安装 TA‑Lib 如果 pip 报错,需要下载对应 whl 包本地安装。

四、场景演示与完整代码

1、tdxrs 获取日 K,直接转为 DataFrame

连接通达信服务器,获取贵州茅台600519沪市 500 根日线,返回 pandas DataFrame。

bash 复制代码
from tdxrs import TdxHqClient
from tdxrs.constants import MARKET_SH, KLINE_DAILY

client = TdxHqClient()
client.connect_to_any()

# 获取贵州茅台日线,500根K线
df = client.get_security_bars_dataframe(KLINE_DAILY, MARKET_SH, "600519", 0, 500)
client.disconnect()

执行完,df即为标准 K 线 DataFrame,字段包含:时间、开盘、最高、最低、收盘、成交量等,可以直接做指标计算。

2、计算双均线,生成金叉死叉交易信号

计算短期 20 日均线、长期 50 日均线,生成做多 / 空仓信号。

逻辑:短期均线上穿长期均线 = 金叉买入;短期下穿长期均线 = 死叉卖出。

bash 复制代码
import pandas as pd

# 计算20日短期均线与50日长期均线
df['SMA_20'] = df['close'].rolling(20).mean()
df['SMA_50'] = df['close'].rolling(50).mean()

# 生成持仓信号:1表示做多,0表示空仓
df['Signal'] = 0
df.loc[20:, 'Signal'] = (df['SMA_20'][20:] > df['SMA_50'][20:]).astype(int)
df['Position'] = df['Signal'].diff()

补充说明:也可以用TA‑Lib.talib.SMA替代 pandas rolling 实现均线计算。

3、Backtrader 框架执行策略回测

实现 SMA 交叉策略类,在next()回调检测均线交叉,执行买卖指令,设置初始资金 10 万。

bash 复制代码
import backtrader as bt

class SmaCrossStrategy(bt.Strategy):
    params = (('fast', 20), ('slow', 50))

    def __init__(self):
        self.sma_fast = bt.indicators.SMA(period=self.p.fast)
        self.sma_slow = bt.indicators.SMA(period=self.p.slow)

    def next(self):
        # 金叉:短期上穿长期,买入
        if self.sma_fast[0] > self.sma_slow[0] and self.sma_fast[-1] <= self.sma_slow[-1]:
            self.buy()
        # 死叉:短期下穿长期,卖出
        elif self.sma_fast[0] < self.sma_slow[0] and self.sma_fast[-1] >= self.sma_slow[-1]:
            self.sell()

# 初始化回测引擎
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
cerebro.addstrategy(SmaCrossStrategy)
cerebro.broker.set_cash(100000)

print('期初资金: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('期末资金: %.2f' % cerebro.broker.getvalue())

4、绩效指标与可视化说明

❗回测不能只看期末总收益,需要综合风险指标评判策略优劣:

  1. 夏普比率:风险调整后收益,越高代表单位风险获得收益越高;
  2. 最大回撤:账户历史最大浮亏,衡量策略风险;
  3. 胜率:盈利交易占全部交易的比例;
  4. 盈利因子:总盈利 / 总亏损,大于 1 策略才有正向期望。

下篇预告:添加 Analyzer 分析器输出夏普、最大回撤;绘制回测曲线图;参数寻优,以及实时行情订阅、实盘对接。


标签 :#量化交易 #tdxrs #miniqmt替代 #python量化 #backtrader

原创不易,如果对你有帮助欢迎点赞👍收藏⭐,关注看后续下篇完整实盘内容。

相关推荐
卷无止境14 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋15 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc15 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂17 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋19 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢20 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚21 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机1 天前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_1 天前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰1 天前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain