告别付费行情软件:利用 QMT 免费“白嫖”全市场 Tick 级数据 (附 Python 代码)

告别付费行情软件:利用 QMT 免费“白嫖”全市场 Tick 级数据 (附 Python 代码)
前言:作为一名量化开发者,我每年最心疼的支出不是服务器费用,而是数据源费用。Wind 终端一年几万,Tushare 积分也要钱,稍微好点的 Tick 数据源动辄上千。但其实,很多散户手里就握着一把“金钥匙”却不自知——那就是券商免费提供的 QMT。今天,我将教你如何把 QMT 变成一个免费、稳定、实时的行情数据中心

为什么 QMT 的数据最“香”?

在数据获取这条路上,我们通常有三个选择:

  1. 爬虫:容易被封 IP,数据不稳定,且有法律风险。
  2. 第三方 API (Tushare/JoinQuant):好用但要钱,免费版有各种限制(如延迟、限流)。
  3. 券商 QMT/PTrade完全免费,速度极快(内网专线),且包含最珍贵的 Tick 级切片数据

很多券商为了推广量化交易,是花了重金向交易所购买 Level-2 行情的。只要你开通了 QMT 权限(通常门槛在 50万-100万资金量),这些数据对你就是免费开放的。不用它,简直是暴殄天物。

核心原理:订阅-推送模式

QMT 获取数据的逻辑和传统的 request-response 不太一样。它采用的是订阅 (Subscribe) 模式:

  1. 你告诉 QMT:“我要订阅茅台的 Tick 数据”。
  2. QMT 客户端会在后台与券商服务器建立长连接。
  3. 一旦有新成交,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. 核心代码:数据订阅与回调

defon_data(datas):""" 这是回调函数,当有新行情推送时会自动触发 """for stock_code in datas: data = datas[stock_code]# 打印实时数据 (你可以改为存入数据库)print(f"[{datetime.datetime.now()}] {stock_code} "f"价格:{data['lastPrice']} 成交量:{data['volume']} "f"买一:{data['bidPrice'][0]} 卖一:{data['askPrice'][0]}")# 简单存个 CSV 做演示# df = pd.DataFrame([data])# df.to_csv(f'./data/{stock_code}.csv', mode='a', header=False)# 1. 订阅全推数据 (全推模式下,不需要指定具体股票,但这需要券商权限)# 如果没有全推权限,只能逐个订阅for stock in stock_list: xtdata.subscribe_quote(stock, period='1m', count=-1)# 订阅 1分钟 K线 xtdata.subscribe_quote(stock, period='tick', count=-1)# 订阅 Tick# 2. 绑定回调函数# 注意:MiniQMT 的数据推送是基于 socket 的,这里直接用 xtdata 的高级接口更简单# 如果需要更高性能,可以使用 xtdata.get_market_data_ex 配合定时轮询print("🚀 数据监听已启动,按 Ctrl+C 停止...")# 3. 阻塞主线程,防止脚本退出whileTrue:# 模拟每 3 秒主动拉取一次最新 Tick (轮询模式,适合存数据) tick_data = xtdata.get_full_tick(stock_list)for stock in stock_list:if stock in tick_data: info = tick_data[stock]print(f"📊 轮询: {stock} 最新价: {info['lastPrice']}") time.sleep(3)

3. 进阶技巧:历史数据下载

除了实时数据,QMT 也是下载历史数据的神器。它的下载速度极快,且不限制流量。

defdownload_history():print("开始下载历史数据...")# 下载最近 100 天的 1分钟 K线 xtdata.download_history_data('600519.SH', period='1m', start_time='20240101', end_time='20241231')# 读取并转为 DataFrame data = xtdata.get_market_data( field_list=[], stock_list=['600519.SH'], period='1m', start_time='20240101', end_time='20241231') df = pd.DataFrame(data['600519.SH']).T print(df.head()) df.to_csv('maotai_1m.csv')if __name__ =="__main__": download_history()

避坑指南:免费的午餐也有刺

虽然 QMT 数据很香,但在实战中我有 2 个血泪教训:

第一,数据缺失问题。
QMT 的历史数据下载是基于 P2P 或券商缓存的,有时候会遇到某一天数据缺失的情况(比如全是 NaN)。

  • 解决方案:下载后务必做一次 dropna() 检查,如果缺失严重,尝试换个时间段重新下载,或者手动去客户端里点一下“补充数据”。

第二,客户端必须常驻。
xtdata 库的所有功能都依赖于 QMT 客户端的运行。如果你把客户端关了,Python 脚本就会立刻报错。

  • 建议:在服务器上跑的时候,不要为了省资源关掉 GUI 界面。

结语

在这个数据即资产的时代,善用手中的工具,就是最大的降本增效。
通过 QMT,我们不仅省下了购买数据的费用,更拥有了一套自主可控的实时行情系统

把省下来的钱,去买两本书,或者请自己喝杯咖啡,它不香吗?

Read more

开发兜不住?让数据库来兜底:金仓 SQL 防火墙的工程化实践

开发兜不住?让数据库来兜底:金仓 SQL 防火墙的工程化实践

开发兜不住?让数据库来兜底:金仓 SQL 防火墙的工程化实践 在真实的生产环境中,数据库安全从来不是“写完代码就结束”的问题,而是一个贯穿系统生命周期的持续对抗过程。哪怕你已经严格执行参数化查询、ORM 框架封装、输入校验等规范,仍然无法保证系统绝对无注入风险——遗留系统、动态 SQL、第三方组件、甚至临时脚本,都会成为潜在突破口。 这也是为什么越来越多企业开始将防线下沉到数据库层:既然应用层不可控,那就让数据库成为最后一道“强制执行的安全边界”。 本文结合 KingbaseES 的 SQL 防火墙机制,从原理、模式设计到性能表现,讲清楚它是如何在工程上解决 SQL 注入问题的。 一、SQL 注入的本质:语义劫持,而不是“字符串拼接问题” 很多人对 SQL 注入的理解还停留在“拼接字符串不安全”,但从数据库视角来看,本质其实是: 攻击者篡改了 SQL 的语义结构(

By Ne0inhk

Go语言的主流框架和解决超高并发的三高微服务框架对比分析

在Go语言生态中,主流的Web框架和应对“三高”(高并发、高可用、高可扩展)场景的微服务框架,经过多年的发展已经非常清晰。简单来说,Gin 是目前应用最广泛的通用Web框架,而像 go-zero、Kratos、KiteX 等则是专为“三高”微服务架构设计的“全家桶”式解决方案。 下面为你详细拆解这两大类框架。 一、主流通用Web框架:轻量、灵活、高性能 这类框架主要解决API构建、路由和中间件管理等Web层问题,是构建单体应用或微服务API层的良好基础。 Gin:目前的“默认选项”,性能高、社区庞大、中间件丰富,极易上手。如果你刚开始接触Go或项目需求明确,选择Gin会非常稳妥。 Fiber:受Express.js启发,语法对Node.js开发者很友好。它基于fasthttp构建,在性能基准测试中表现极为出色。适合追求极致性能、且不介意与标准库net/http不完全兼容的场景。 Echo:一个成熟且平衡的框架,

By Ne0inhk
必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

文章详解AI Agent四大核心概念:Agent作为智能决策主体,Skills提供原子化能力封装,MCP实现标准化工具调用,A2A支持Agent间协作。这些技术共同构建了从单Agent自主执行到多Agent协同工作的完整技术栈,解决了智能体的自主性、模块化能力、工具调用和互操作等核心问题,助力开发者快速构建专业级AI应用。 一、Agent、Skills、MCP和A2A的核心概念总览 1、Agent (代理/智能体):自主决策与执行的“大脑”。 AI Agent是2026年AI生态的核心概念,是基于人工智能技术构建的、具备感知环境、理解信息、自主推理决策、自主规划与执行动作并持续与环境/其他主体交互,以自主达成预设或动态生成目标的数字智能实体。2026年的智能体不是在回答问题,而是在完成任务。其突破了传统问答式、生成式AI的能力边界,可像人类员工一样独立处理复杂综合性任务。它以大模型为核心引擎,整合规划、记忆、工具调用与行动执行四大能力,形成「感知 - 认知 - 决策 - 执行 - 反馈」的完整智能闭环,

By Ne0inhk
超越Tomcat的Spike (一):使用netty搭建Http服务器

超越Tomcat的Spike (一):使用netty搭建Http服务器

超越Tomcat的Spike (一):使用netty搭建Http服务器 * 🏆 引言 * 🚀 Netty的魅力所在 * 什么是Netty? * Netty vs 传统服务器 * 🏗️ Spike项目架构设计 * 项目结构 * 核心组件架构 * 💻 核心代码实现 * 服务器初始化与启动 * 请求处理逻辑 * ⚡ 性能测试与对比 * 并发处理能力测试 * 内存占用对比 * 📱 应用案例 * 案例一:高并发API网关 * 案例二:实时数据推送服务 * 🎯 核心优势分析 * 1. 非阻塞异步模型 * 2. 零拷贝技术 * 3. 可扩展性强 * 🔮 未来展望 * Spike 2.0 规划 * 应用场景扩展 * 📝 代码优化建议 * 1. 事件循环组优化 * 2. 内存管理优化 * 🏁 总结 🏆 引言 在现代Web应用开发中,HTTP服务器是构建任何网络服务的基础。传统的Tomcat、Jetty等服务器虽然功能强大,但在高性能场景下往往显得力不从

By Ne0inhk