量化开发中,数据源费用往往高于服务器成本。Wind 终端年费高昂,Tushare 积分需充值,Tick 数据源价格不菲。然而,许多用户忽略了券商免费提供的 QMT 平台,其实它可以作为免费、稳定、实时的行情数据中心。
为什么选择 QMT?
在数据获取这条路上,通常有三个选择:
- 爬虫:容易被封 IP,数据不稳定,且有法律风险。
- 第三方 API (Tushare/JoinQuant):好用但要钱,免费版有各种限制(如延迟、限流)。
- 券商 QMT/PTrade:完全免费,速度极快(内网专线),且包含最珍贵的 Tick 级切片数据。
很多券商为了推广量化交易,会向交易所购买 Level-2 行情。只要开通了 QMT 权限(通常门槛在 50 万 -100 万资金量),这些数据对你就是免费开放的。
核心原理:订阅 - 推送模式
QMT 获取数据的逻辑和传统的 request-response 不太一样。它采用的是订阅 (Subscribe) 模式:
- 你告诉 QMT:'我要订阅茅台的 Tick 数据'。
- QMT 客户端会在后台与券商服务器建立长连接。
- 一旦有新成交,QMT 会自动把数据推送到你的本地回调函数里。
这种模式的延迟通常在 毫秒级,非常适合做日内高频策略或盘口分析。
实战演示:搭建本地行情录制器
下面我们将用 Python 编写一个简单的脚本,利用 QMT (MiniQMT) 实时订阅全市场(或指定股票)的 Tick 数据,并保存为 CSV。
1. 环境准备
确保你已经登录了 QMT 客户端(极简模式),并记住了 mini_qmt_path(安装路径)。
from xtquant import xtdata
import pandas as pd
import time
import datetime
# 设定股票列表 (示例:茅台、宁德时代)
stock_list = ['600519.SH', '300750.SZ']
2. 核心代码:数据订阅与回调
def on_data(datas):
""" 这是回调函数,当有新行情推送时会自动触发 """
for stock_code in datas:
data = datas[stock_code]
# 打印实时数据 (你可以改为存入数据库)
print(f"[{datetime.datetime.now()}] {stock_code} "
f"价格:{data[]} 成交量: "
)
stock stock_list:
xtdata.subscribe_quote(stock, period=, count=-)
xtdata.subscribe_quote(stock, period=, count=-)
()
:
tick_data = xtdata.get_full_tick(stock_list)
stock stock_list:
stock tick_data:
info = tick_data[stock]
()
time.sleep()


