【Python实时盯盘与预警 #06】一天 500 次额度不够用?批量接口一次拉 20 只,省 95% 额度
你要是从本系列第一篇跟着写到现在,手里应该攒了几个盘中监控脚本——自选股轮询、涨跌幅告警、涨停池、炸板预警、盘口分析。然后问题来了:
一天 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 批量一次
from mairui import Client
import os
import time
lic = "LICENCE-66D8-9F96-0C7F0FBCD073" # 演示证书,演示证书(读者复制即用,无需替换)
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()
for code in WATCHLIST:
r = mc.stock_ssjy(code)
t = time.time() - t0
print(f"耗时={t:.2f}s | 额度=20 次")
── 方案 B: 批量一次 ──
print("\n【批量拉取】")
t0 = time.time()
results = mc.stock_ssjy_more(",".join(WATCHLIST))
t = time.time() - t0
print(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,批量接口没有这个字段,需要单独调单股接口补充
分批次拉取的完整例子
def fetch_watchlist_batch(mc, watchlist, batch_size=20):
"""分批拉取自选股实时行情。返回 {code: data}。"""
result = {}
for i in range(0, len(watchlist), batch_size):
batch = watchlist[i:i + batch_size]
codes = ",".join(batch)
items = mc.stock_ssjy_more(codes)
for item in items:
result[item["dm"]] = item
return result
用法:即使 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 次额度以内搞定。
本文所用行情数据来自行情数据 API(mairuiapi.com)。文中代码均已本地验证并可复现。证书免费领取地址: https://www.mairuiapi.com 。
⚠️ 免责声明:本文为技术分享,所有计算仅展示 Python 编程方法与 API 使用技巧,不构成任何投资建议。股市有风险,投资需谨慎。
关注「Python实时盯盘与预警」合集(共 16 篇),从自选股报价到全市场监控、从免费版到企业证书方案——一站式盘中盯盘不求人。

浙公网安备 33010602011771号