如何用tdx获取A股盘口五档报价:GetQuote实战指南与批量股票查询技巧

原创2026-10-28 20:24:441,459 阅读

如何用tdx获取A股盘口五档报价:GetQuote实战指南与批量股票查询技巧

想不写爬虫、不付费,就用几行 Go 代码拿到 A 股盘口五档报价吗?tdx 是一个通达信协议解析库,其 GetQuote 方法可以一次拉取任意多只股票的实时行情:买一~买五、卖一~卖五的挂单价与挂单量、最新价、成交量、内盘外盘一应俱全。本文带你从连接服务器到批量查询,完整走通这套 A股实时行情获取 流程。

为什么选择 tdx 获取 A 股实时行情

tdx 直接解析通达信客户端使用的私有行情协议(标准行情端口 7709),无需任何第三方接口,数据与通达信桌面端一致。功能列表见 README.md,核心能力包括:

  • 📊 盘口五档报价:GetQuote(本文主角)
  • 📈 K线 / 分时图 / 分时成交:GetKlineDay、GetMinute、GetTrade 等
  • 💹 股本变迁与复权:GetGbbq、前/后复权
  • 🏢 财务信息、F10 公司资料、板块成分等

对新手最友好的地方在于:示例即文档,example/ 目录下每个功能都有一个可独立运行的例子,比如盘口报价的 example/GetQuote/main.go。

快速上手:三步拿到五档报价

第 1 步:拿到源码

git clone https://gitcode.com/gh_mirrors/tdx5/tdx

第 2 步:连接通达信行情服务器

调用 tdx.Dial 传入服务器地址(端口固定 7709),可用 WithDebug() 打开调试日志、WithRedial() 开启断线自动重连:

c, err := tdx.Dial("124.71.187.122:7709", tdx.WithDebug(), tdx.WithRedial())

更多可用服务器 IP 清单整理在 README.md 的「服务器列表」小节。

第 3 步:调用 GetQuote 获取报价

resp, err := c.GetQuote("sz000001", "sh600008")
for _, v := range resp {
    fmt.Println(v) // 自动格式化为易读文本
}

Quote 内置了 String() 方法,直接打印就是终端里最直观的效果——每只股票先输出一行 K 线摘要(昨收/开盘/最高/最低/今收/成交量/成交额),再输出卖五~卖一、买一~买五的挂单价与数量:

tdx GetQuote 获取A股盘口五档报价的输出效果,展示买一买二卖一卖二价格与挂单量

读懂返回数据:Quote 结构速查

返回类型为 <a href="https://link.gitcode.com/i/ea639fad1e931cfad5c02382c71b13a4" target="_blank">]*protocol.Quote,定义在 [protocol/model_quote.go,关键字段如下:

字段 含义 使用提示
Exchange / Code 市场与股票代码 如 sh000001 上证指数
Kline.Close 最新价(当日盘中即实时价) 单位见下方说明
Kline.Last 昨收盘价 算涨跌幅的分母
Kline.Volume / Amount 成交量 / 成交额 成交量单位:手
BuyLevel / SellLevel 买五~买一 / 卖五~卖一 类型 [5]PriceLevel
Intuition 现量(最新一笔成交量) 盘口跳动观察用
InsideDish / OuterDisc 内盘 / 外盘 判断多空力道

两个新手最容易踩的单位坑:

  1. 价格是「厘」:内部 Price 类型为 int64,1 厘 = 0.001 元,调用 .Float64() 才得到元,见 protocol/types_price.go。
  2. 成交量单位是「手」(1 手 = 100 股)。

另外 Kline 自带 RisePrice()(涨跌额)和 RiseRate()(涨跌幅)两个便捷方法,定义在 protocol/model_kline.go,不用自己重复造轮子。

批量股票查询:4 个实用技巧

技巧 1:一次请求查多只股票

GetQuote 是可变参数方法(codes ...string),把多只股票代码一次性传入即可,一次网络往返拿回全部报价,这是它做批量查询的天然优势:

resp, err := c.GetQuote("000001", "600008", "000002", "600519")

查询自选股池、板块成分等几十只股票时,建议按每批 20~30 只循环分批调用,兼顾速度与单次数据量。

技巧 2:股票代码怎么写?

代码解析规则在 protocol/unit.go 的 DecodeCode 中,三种写法都支持:

写法 示例 说明
带前缀 sz000001、sh600008 最明确,推荐
6 位裸代码 000001 库会自动补上市场前缀
中文/缩写前缀 上海600000 也能识别

技巧 3:查基金、可转债等非标代码时初始化 DefaultCodes

如果代码不是普通 A 股/指数(比如 ETF 159558),需要初始化全局代码表帮助库判断市场,参考 example/GetQuote/main.go:

tdx.DefaultCodes, err = tdx.NewCodesSqlite(tdx.WithCodesClient(c))

初始化后裸代码如 159558、010504 也能正确查询。

技巧 4:长驻服务加断线重连

做行情监控(循环轮询 GetQuote 刷新盘口)时,务必加 WithRedial(),网络抖动会自动重连,避免程序半夜悄悄掉线。

常见问题速解

  • 报错 DefaultCodes未初始化:查了股票/指数以外的代码(基金、可转债等),按技巧 3 初始化后再试。
  • 返回的价格比预期小 1000 倍:忘了 .Float64(),直接打印的是「厘」。
  • 行情不动/数据不刷新:非交易时段服务器返回的是收盘快照,属正常现象;先 go run example/GetQuote 确认网络能连通服务器。
  • 想开调试日志看收发报文:加 tdx.WithDebug(),可看到原始协议帧的收发 hex,方便对照 protocol/frame.go 理解协议。

进阶:与其他行情功能组合

拿到五档报价后,通常还会用到这些「兄弟方法」:

  • GetMinute / GetHistoryMinute:当日与历史分时图
  • GetTrade / GetHistoryTrade:分时逐笔成交(下方截图即 GetHistoryTrade 对照通达信校验的输出,左列为客户端原始数据、右列为逐笔价量方向)
  • GetKlineDay / GetKlineMinute:日 K / 分钟 K 线
  • GetGbbq + 复权:前/后复权 K 线,与通达信桌面端逐日对齐

tdx 获取A股分时逐笔成交数据与通达信对照校验效果

复权算法细节可阅读 docs/gbbq_除权除息与复权算法.md,更多功能演示都在 example/ 下,每个目录 go run 一下就能看到真实数据。

小结

需求 方法
单只/多只股票五档报价 GetQuote("sz000001", ...)
自动补市场前缀 直接传 6 位裸代码
基金/可转债代码 先初始化 tdx.DefaultCodes
长驻监控 WithRedial() + 轮询 GetQuote

tdx 用几十行 Go 代码就能撑起一个 A 股实时盘口监控:连接 7709 行情端口 → GetQuote 批量拉取 → 按「厘/手」换算单位 → 落库或推送。配合 README.md 中的服务器列表和免责声明,祝你玩得开心、写得顺手 🚀

登录后查看全文
tdx