云计算百科
云计算领域专业知识百科平台

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:绘图,输出回测图表

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、绩效指标与可视化说明

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

  • 夏普比率:风险调整后收益,越高代表单位风险获得收益越高;
  • 最大回撤:账户历史最大浮亏,衡量策略风险;
  • 胜率:盈利交易占全部交易的比例;
  • 盈利因子:总盈利 / 总亏损,大于 1 策略才有正向期望。
  • 下篇预告:添加 Analyzer 分析器输出夏普、最大回撤;绘制回测曲线图;参数寻优,以及实时行情订阅、实盘对接。


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

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » miniqmt 行情的备选方案 ---tdxrs(上)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!