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

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

相关推荐
Cenxi1 小时前
f-string 完全手册:60 题从入门到实战
python
2601_962299881 小时前
Python编写Linux命令指南
linux·python·开发·命令·指南
此冬歌咏1 小时前
自动化服务器运维监控系统(python+shell)
linux·运维·服务器·开发语言·python·自动化
zhanghaha13141 小时前
Python进阶教程:23_Scrapy 爬虫框架 零基础超详细教程
python·信息可视化
爱读源码的大都督2 小时前
DeepSeek面试官问:生产RAG系统回答不准确,该如何定位和优化?这样回答,能让面试官当场给你Offer!
java·后端·python
“AI国潮设计-小江”2 小时前
【Python实战】SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
k4m7v2pz2 小时前
从 Python 搬到 Rust:pyglet MIDI DAW 变成 egui 鬼畜采样器的迁移复盘
开发语言·python·rust
tryCbest2 小时前
FastAPI中passlib包的作用
python·fastapi·passlib
心中有你02142 小时前
Python Tkinter 情侣恋爱日记桌面小程序(本地文件存储,无数据库)
开发语言·python