你要是从本系列第一篇跟着写到现在,手里应该攒了几个盘中监控脚本——自选股轮询、涨跌幅告警、涨停池、炸板预警、盘口分析。然后问题来了:
一天 500 次免费额度,到底够不够?
假设 20 只自选,盘中每 5 分钟刷一次(4 小时 = 48 次):
- 逐只轮询:20 × 48 =960 次→ ❌ 超限,下午就断流
- 批量接口:1 × 48 =48 次→ ✅ 仅用 9.6%
同一批数据、同一个结果,额度消耗差了 20 倍。这篇就是告诉你这个批量接口怎么用,以及它跟逐只调到底差在哪。
本文你将得到什么
- 一个对比脚本:逐只轮询(
stock_ssjy)vs 批量拉取(stock_ssjy_more) - 20 只真实自选股实时数据对比:耗时、额度、字段差异
- 免费版日额度模型:从"不够用"到"绰绰有余"的具体算账
- 批量接口使用注意事项(上限 20 只/次、字段差异、返回格式)
两个接口,同一份数据
mairui SDK 提供了两个实时行情接口:
| 接口 | 方法 | 入参 | 额度消耗 |
|---|---|---|---|
| 单股实时 | stock_ssjy(code) | 单个股票代码 | 1 次/只 |
| 批量实时 | stock_ssjy_more(codes) | 逗号分隔 ≤20 只 | 1 次(不管几只!) |
核心规则:批量接口不管你传 1 只还是 20 只,都只算 1 次 API 调用。
这个规则来自/hsrl/ssjy_more接口(后台路由MerryApi_new/Router/hsrl.py),免费版也能用。上篇提到的stock_real_all全市场快照虽然更省事(一次拉 5000+ 只也只 1 次),但那是付费版权益(需要包年或白金证书),免费版用不了。所以对于免费版用户来说,stock_ssjy_more就是省额度的最佳选择。
代码:逐只轮询 vs 批量一次
frommairuiimportClientimportosimporttime lic=os.environ["MAIRUI_LICENCE"]mc=Client(lic)# 20 只自选股WATCHLIST=["000001","000002","000858","002594","300750","600519","601318","600036","000333","002415","600900","601012","000651","002142","600585","601398","000725","002230","600276","300059",]# ── 方案 A: 逐只调 ──print("【逐只轮询】")t0=time.time()forcodeinWATCHLIST:r=mc.stock_ssjy(code)t=time.time()-t0print(f"耗时={t:.2f}s | 额度=20 次")# ── 方案 B: 批量一次 ──print("\n【批量拉取】")t0=time.time()results=mc.stock_ssjy_more(",".join(WATCHLIST))t=time.time()-t0print(f"耗时={t:.2f}s | 额度=1 次 | 返回{len(results)}只")实测对比(2026-08-04 09:59,真实运行)
====================================================================== 批量实时接口 vs 单股轮询:额度消耗对比 自选股: 20 只 ====================================================================== 【方案 A】单股轮询 (逐一调 stock_ssjy) 耗时: 0.53s | 成功=20只 | 失败=0只 API 调用次数: 20 次(每只 1 次) 免费版日额度消耗: 20/500 次 (4.0%) 【方案 B】批量接口 (stock_ssjy_more, 一次 ≤20 只) 耗时: 0.02s | 返回: 20只 API 调用次数: 1 次(一次拉 20 只,只计 1 次额度!) 免费版日额度消耗: 1/500 次 (0.2%) 🎯 额度节省: 20 次 → 1 次 = 省 19/20 = 95%两条关键数据:
- 额度从 20 次 → 1 次,省 95%
- 耗时从 0.53s → 0.02s,快 26 倍(批量接口只做一次网络往返)
日额度模型算账
场景 1:自选股盘中刷新
条件:20 只自选,每 5 分钟刷新一次,盘中 4 小时 = 48 次/天 逐只轮询:20 × 48 = 960 次 → ❌ 超限(500/日),下午断流 批量接口: 1 × 48 = 48 次 → ✅ 仅用 9.6%,绰绰有余场景 2:全市场快扫(高频)
条件:5000 只全市场,每 30 秒扫一次 逐只轮询:❌ 根本不可能(5000 > 500) 批量接口:5000/20 = 250 批 × 1 次 = 250 次 → ✅ 够用场景 3:盘中盯盘 + 涨停池 + 盘口分析合在一起
批量刷新 20 只自选: 1 × 48 = 48 次 涨停池(limit_up_pool):1 × 48 = 48 次 盘口五档(5 只重点): 5 × 48 = 240 次 ──────────────────────────────── 合计:336 次/日 → ✅ 还剩 164 次不是"不够用",是"之前没用对接口"。
⚠️ 重要:批量接口与单股的字段差异
两个接口返回的字段不完全相同,实测对比如下:
| 类别 | 字段 | 单股(stock_ssjy) | 批量(stock_ssjy_more) |
|---|---|---|---|
| 核心 | p(现价)/zf(涨跌幅)/cje(成交额)/o/h/l/yc | ✅ | ✅ |
| 批量专有 | dm(代码)/tr(振幅)/pb_ratio(市净率)/tv(总手) | ❌ | ✅ |
| 单股专有 | sz(总市值)/lb(量比)/lt(流通市值)/hs(换手) | ✅ | ❌ |
| 单股专有 | zdf60(60日涨跌)/sjl(市盈率)/fm(评分) | ✅ | ❌ |
结论:核心字段(现价、涨跌幅、成交额、开高低)两边都有,盯盘够用。如果要总市值、换手率等扩展字段,需要单独用stock_ssjy补。
批量接口独有的dm字段很实用——返回结果是一个数组,靠dm能直接定位到代码,不用再维护下标映射。
使用注意事项
- 上限 20 只/次:传 21 只及以上会报错 422(请求参数无效)。如果需要拉超过 20 只,分批次调:每 20 只一组,for 循环调用
- 参数格式:逗号分隔字符串,不是数组。正确:
"000001,000002,600519";错误:["000001","000002"] - 缺参数报 422:忘了传 codes 参数或传了空字符串都会返回 422
- 免费版可用:这个接口没有 licence 等级限制,免费版证书也能用
- 字段取用先判存在:如果你需要换手率
hs,批量接口没有这个字段,需要单独调单股接口补充
分批次拉取的完整例子
deffetch_watchlist_batch(mc,watchlist,batch_size=20):"""分批拉取自选股实时行情。返回 {code: data}。"""result={}foriinrange(0,len(watchlist),batch_size):batch=watchlist[i:i+batch_size]codes=",".join(batch)items=mc.stock_ssjy_more(codes)foriteminitems:result[item["dm"]]=itemreturnresult# 用法:即使 50 只自选,也只需要 3 次调用(3 次额度)all_data=fetch_watchlist_batch(mc,WATCHLIST,batch_size=20)常见坑
- 别把"批量接口省额度"当成"可以疯狂轮询"——1 秒调 10 次会被限流,建议至少间隔 3-5 秒
- 交易日 09:30 之前调用会返回空数组(盘中才有实时数据)
- 批量接口返回顺序 = 你传参的顺序,不按代码排序
小结
批量接口stock_ssjy_more是盯盘场景省额度的核心武器。20 只自选、每 5 分钟刷新、一天 48 次——逐只轮询 960 次超限,批量接口只用 48 次,还快 26 倍。加上前几篇的涨停池、炸板预警、盘口分析,整个盯盘体系在免费版 500 次/日内完全可以落地。
下一篇我们做涨速排行榜——3 分钟内涨幅最猛的 30 只,用实时数据算出来。这个结合批量接口威力更大:先批量拉一轮价格,隔一段时间再拉一轮,算差就出涨速,全在 10 次额度以内搞定。
⚠️免责声明:本文为技术分享,所有计算仅展示 Python 编程方法与 API 使用技巧,不构成任何投资建议。股市有风险,投资需谨慎。
📌 关注「Python实时盯盘与预警」合集(共 16 篇),从自选股报价到全市场监控、从免费版到企业证书方案——一站式盘中盯盘不求人。