📌导读:随着监管趋严,不少券商 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:绘图,输出回测图表
pip install tdxrs pandas backtrader matplotlib TA‑Lib
提示:Windows 安装 TA‑Lib 如果 pip 报错,需要下载对应 whl 包本地安装。
四、场景演示与完整代码
1、tdxrs 获取日 K,直接转为 DataFrame
连接通达信服务器,获取贵州茅台600519沪市 500 根日线,返回 pandas DataFrame。
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 日均线,生成做多 / 空仓信号。
逻辑:短期均线上穿长期均线 = 金叉买入;短期下穿长期均线 = 死叉卖出。
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 万。
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、绩效指标与可视化说明
❗回测不能只看期末总收益,需要综合风险指标评判策略优劣:
下篇预告:添加 Analyzer 分析器输出夏普、最大回撤;绘制回测曲线图;参数寻优,以及实时行情订阅、实盘对接。
标签:#量化交易 #tdxrs #miniqmt替代 #python量化 #backtrader
原创不易,如果对你有帮助欢迎点赞👍收藏⭐,关注看后续下篇完整实盘内容。
网硕互联帮助中心





评论前必须登录!
注册