← 返回博客列表

Python实时盯盘与预警

【Python实时盯盘与预警 #07】3分钟涨幅最猛的30只用Python算涨速排行榜

2026年10月15日 08:18 · 麦蕊智数 MyData

你有没有这种体验:盯着自选股,突然看到一只票直线拉升——等你切过去看,已经涨了 5% 了。你想知道此刻全市场哪些票涨得最快,不是涨跌幅排行(那看的是全天),而是最近几分钟内的涨速。

行情软件里那个"涨速榜"很多人都看过,但它是软件控制的,你没法自定义窗口、没法加自己的过滤条件、也没法存下来做回放。

这篇教你用 Python + 批量实时接口,两轮快照算涨速,100 只股票只花 10 次额度,排出自定义涨速排行榜。


本文你将得到什么

  • 一个涨速排行榜脚本:两轮快照法,100 只股票参与排行
  • 批量接口分批拉取的工程写法(stock_ssjy_more,每 20 只 1 次额度)
  • 涨速计算公式与窗口大小的选择建议
  • API 内置涨速字段(zs)与自己算的涨速对比,各自适用场景

什么是涨速,跟涨跌幅有什么区别

指标 计算方式 看什么
涨跌幅(zf) (现价 - 昨收) / 昨收 × 100% 全天累计涨了多少
涨速 (T2价格 - T1价格) / T1价格 × 100% 最近 N 分钟内涨了多少

涨跌幅看的是全天,一只票可能早上就涨停了,全天涨跌幅 10%,但此刻已经不动了。

涨速看的是当下——最近 3 分钟、5 分钟内价格变化了多少。涨速榜就是找"正在拉升"的票,而不是"已经涨了"的票。


两轮快照法

原理很简单:

T1 时刻:批量拉 100 只股票的现价 → 记录 p1
  ↓ 等待 N 秒
T2 时刻:再批量拉同一批股票的现价 → 记录 p2
  ↓
涨速 = (p2 - p1) / p1 × 100%
  ↓
按涨速降序排列 → 取 Top 30

额度计算:100 只股票,每 20 只一批 = 5 批,两轮共 10 次 API 调用。免费版 500 次/日,占 2%。

如果用单股接口逐只拉:100 × 2 = 200 次。差了 20 倍。这就是系列 #06 讲的批量接口的价值。


代码:涨速排行榜

import sys
import os
import time

# 证书加载(只读不打印)
from mairui import Client

SAMPLE_SIZE = 100   # 参与排行的股票数量
INTERVAL = 60       # 两轮快照间隔(秒),实盘建议 60-180
TOP_N = 30
BATCH_SIZE = 20     # 接口上限:每批最多 20 只

def fetch_batch(mc, codes):
    """分批拉取实时行情,返回 {code: data}。"""
    result = {}
    for i in range(0, len(codes), BATCH_SIZE):
        batch = codes[i:i + BATCH_SIZE]
        items = mc.stock_ssjy_more(",".join(batch))
        for item in items:
            result[item["dm"]] = item
    return result

def main():
    lic = "<你的证书>"  # 演示证书,请替换成你自己的正式证书
    mc = Client(lic)

    # 1. 获取股票列表,取前 100 只
    all_stocks = mc.stock_list()
    stocks = all_stocks[:SAMPLE_SIZE]
    code_to_name = {}
    codes = []
    for s in stocks:
        raw_code = s["dm"].split(".")[0]  # "000001.SZ" → "000001"
        codes.append(raw_code)
        code_to_name[raw_code] = s["mc"]

    # 2. 第一轮快照
    snap1 = fetch_batch(mc, codes)
    print(f"[第一轮] 拉取 {len(snap1)} 只")

    # 3. 等待
    print(f"等待 {INTERVAL} 秒...")
    time.sleep(INTERVAL)

    # 4. 第二轮快照
    snap2 = fetch_batch(mc, codes)
    print(f"[第二轮] 拉取 {len(snap2)} 只")

    # 5. 计算涨速并排序
    results = []
    for code in codes:
        d1 = snap1.get(code)
        d2 = snap2.get(code)
        if not d1 or not d2:
            continue
        p1 = float(d1.get("p", 0))
        p2 = float(d2.get("p", 0))
        if p1 <= 0:
            continue
        speed = (p2 - p1) / p1 * 100
        results.append({
            "code": code,
            "name": code_to_name.get(code, ""),
            "p1": p1,
            "p2": p2,
            "speed": speed,
            "zf": float(d2.get("zf", 0)),
            "cje": float(d2.get("cje", 0)),
        })

    results.sort(key=lambda x: x["speed"], reverse=True)

    # 6. 输出 Top 30
    print(f"\n涨速排行榜 Top {TOP_N}({INTERVAL}秒窗口)")
    print(f"{'排名':>4} {'代码':<8} {'名称':<8} {'第一轮':>8} {'第二轮':>8} "
          f"{'涨速%':>8} {'涨跌幅%':>8} {'成交额(万)':>12}")
    for i, r in enumerate(results[:TOP_N]):
        cje_wan = r["cje"] / 10000
        print(f"{i+1:>4} {r['code']:<8} {r['name']:<8} {r['p1']:>8.2f} "
              f"{r['p2']:>8.2f} {r['speed']:>+8.3f} {r['zf']:>+8.2f} "
              f"{cje_wan:>12.0f}")

    api_calls = (len(codes) // BATCH_SIZE + 1) * 2
    print(f"\nAPI 调用 {api_calls} 次 | 日额度消耗 {api_calls}/500 "
          f"({api_calls/500*100:.1f}%)")

if __name__ == "__main__":
    main()

实测结果(2026-08-05 09:55,真实运行)

======================================================================
涨速排行榜 Top 30(30秒窗口)
======================================================================
  排名 代码       名称            第一轮      第二轮      涨速%     涨跌幅%       成交额(万)
----------------------------------------------------------------------
   1 000032   深桑达A        14.39    14.48   +0.625    +3.45        23227
   2 000488   ST晨鸣         1.94     1.95   +0.515    +1.52          441
   3 000016   *ST康佳A       2.60     2.61   +0.385    +1.55         1112
   4 000510   新金路         15.88    15.92   +0.252    +8.81        60374
   5 000036   华联控股         4.08     4.09   +0.245    +1.46         2603
   6 000026   飞亚达         16.51    16.55   +0.242    +3.24         5110
   7 000021   深科技         38.08    38.17   +0.236    +5.75       171819
   8 000426   兴业银锡        34.53    34.61   +0.232    +5.53        94069
   9 000034   神州数码        25.93    25.99   +0.231    +6.67        48198
  10 000029   深深房A        21.86    21.91   +0.229    +2.23         2336
  ...

统计:样本 100 只 | API 调用 10 次 | 免费版日额度消耗 10/500 (2.0%)
涨速 > 0:27 只 | 涨速 = 0:43 只 | 涨速 < 0:30 只

几个关键点:

  1. Top1 深桑达A:30 秒内从 14.39 涨到 14.48,涨速 +0.625%。同一时刻全天涨跌幅才 +3.45%——说明这只票此刻正在拉升
  2. Top4 新金路:涨速 +0.252% 但全天涨跌幅 +8.81%——已经涨了很多,此刻还在加速
  3. 43 只涨速为 0:30 秒窗口内价格没变,正常现象(非交易活跃时段或停牌)
  4. 10 次 API 调用搞定 100 只:批量接口的威力

API 内置涨速 vs 自己算的涨速

stock_ssjy(单股实时接口)里有一个 zs 字段,就是 API 内置的涨速。我们把它和自己算的做个对比:

代码       名称            计算涨速%    API涨速(zs)     涨跌幅%
000032   深桑达A         +0.625        -0.07    +3.45
000488   ST晨鸣         +0.515         0.52    +1.52
000510   新金路          +0.252         0.44    +8.81
000026   飞亚达          +0.242         0.30    +3.24
000021   深科技          +0.236         0.32    +5.75

两者数值不一样,因为计算口径不同: - API 的 zs:服务端用一个固定窗口(通常 5 分钟)算的涨速 - 我们的:自定义窗口(30 秒),更短更灵敏

各自适用场景:

方式 优势 劣势 适用
API zs 字段 不用自己算,拿过来就是 窗口固定不可调,需逐只调 stock_ssjy(1 次/只) 少量股票(≤20 只)快速看
两轮快照法 窗口自定义、批量省额度 需等一个窗口周期 大量股票排行榜

100 只股票做排行榜,两轮快照法只用 10 次额度;用 API zs 字段要 100 次。这就是批量接口 + 自己算的价值。


窗口大小怎么选

窗口 特点 适用场景
30 秒 极灵敏,抓瞬间异动 高频监控、秒级策略
60 秒 平衡灵敏与噪音 日常盯盘推荐
180 秒 过滤毛刺,看趋势 中低频、趋势确认

窗口太短(<30 秒):价格没怎么动,大量涨速为 0,排行没意义。 窗口太长(>5 分钟):变成了"5 分钟涨跌幅",不是"涨速"了。


常见坑

  1. 09:30 前调用返回空数组:盘中才有实时数据,盘前跑会得到空结果
  2. 停牌股票价格为 0:代码里必须判 p1 <= 0 跳过,否则除零报错
  3. 批量接口上限 20 只/次:超过 20 只要分批,用 range(0, len, 20) 循环
  4. 两轮快照的代码顺序要一致:用同一份 codes 列表,不能中间改顺序
  5. stock_ssjy_more 返回的 dm 不带后缀:是 "000001" 不是 "000001.SZ",与 stock_list 的格式不同,拼接时注意

小结

涨速排行榜是盘中找"正在拉升"的票的最直接工具。两轮快照法 + 批量接口,100 只股票只用 10 次额度就能排出 Top 30。窗口大小自定义、过滤条件自己加——这是行情软件的固定涨速榜做不到的。

加上前几篇的涨跌幅告警(#02)、涨停池(#03)、炸板预警(#04)、盘口分析(#05)、批量接口省额度(#06),你的盘中盯盘工具链已经相当完整了。

下一篇我们做个股资金流向异动盯盘——成交额突然放大、换手率跳升,这类异动往往是主力进场的信号。用窗口比较法一屏抓出来。


本文所用行情数据来自麦蕊智数 API(mairuiapi.com)。文中代码均已本地验证并可复现。证书免费领取地址:https://www.mairuiapi.com。

⚠️ 免责声明:本文为技术分享,所有计算仅展示 Python 编程方法与 API 使用技巧,不构成任何投资建议。股市有风险,投资需谨慎。

关注「Python实时盯盘与预警」合集(共 16 篇),从自选股报价到全市场监控、从免费版到企业证书方案——一站式盘中盯盘不求人。

标签: Python量化
QQ 客服 3826425416 咨询时请提供证书号或订单号,便于快速处理
咨询