← 返回博客列表

【零依赖量化数据实战 #34】历史K线收尾:北交所K线与沪深VIP历史K线

2026年09月06日 08:18 · 智兔数服 · 零依赖量化数据实战

摘要:【零依赖量化数据实战 #34】历史K线收尾:北交所K线与沪深VIP历史K线 系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK 适用:想把 北交所单只历史K线 和 沪深VIP

系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK
适用:想把北交所单只历史K线沪深VIP历史K线(OHLCV)用纯 requests 拉到本地的量化爱好者;不依赖任何行情终端。

1. 你将得到什么

  • 2 个官方接口的最小可用封装,按市场分成两组:
  • 北交所历史K线(1):/bj/history/{代码.市场}/{级别}/{除权方式} —— 北交所单只 OHLCV 日/周/月线。
  • 沪深VIP历史K线(1):/hs/hsstock/vip/{代码.市场}/{级别}/{除权方式} —— 沪深单只 OHLCV(需 VIP 权限)。
  • 一个对字段名不敏感_hit_key 读取函数:K线字段中英文混排(日期/date、开盘/open、收盘/close、最高/high、最低/low、成交量/volume),一行候选键命中。

2. 端点语义表

端点 语义 关键参数
GET /bj/history/{代码.市场}/{级别}/{除权方式} 北交所单只历史K线(OHLCV) 代码.市场920000.BJ级别d(日)/w(周)/m(月);除权方式n(不复权)/qfq/hfq
GET /hs/hsstock/vip/{代码.市场}/{级别}/{除权方式} 沪深单只 VIP 历史K线(OHLCV) 同上,代码如 000001.SZ;需 VIP 权限

3. 字段名候选键命中

K线行是典型的中英文混排结构,下面这些字段名都可能在返回里出现,统一用候选键命中:

含义 候选键(按顺序命中第一个存在的)
日期 日期 / date / time
开盘价 开盘 / open
收盘价 收盘 / close
最高价 最高 / high
最低价 最低 / low
成交量 成交量 / volume / vol

4. 核心模板函数

import requests

TOKEN = "你的token"                 # 外渠版占位;技术博客版用「你的 token」
BASE = "http://api.zhituapi.com"

def _get(path, params=None, token=TOKEN):
    url = f"{BASE}{path}"
    q = dict(params or {})
    q["token"] = token
    try:
        r = requests.get(url, params=q, timeout=10)
    except Exception as e:
        return None, f"ERR {e}"
    if r.status_code != 200:
        return None, f"{r.status_code} {r.text.strip()[:140]}"
    try:
        return r.json(), None
    except Exception:
        return None, f"{r.status_code} {r.text.strip()[:140]}"

def _hit_key(row, keys):
    """字段名中英文混排:按顺序命中第一个存在的键。"""
    for k in keys:
        if k in row:
            return row[k]
    return None

def bj_kline(code="920000.BJ", period="d", fq="n"):
    """北交所历史K线。"""
    return _get(f"/bj/history/{code}/{period}/{fq}")

def hs_vip_kline(code="000001.SZ", period="d", fq="n"):
    """沪深 VIP 历史K线(需 VIP 权限)。"""
    return _get(f"/hs/hsstock/vip/{code}/{period}/{fq}")

if __name__ == "__main__":
    for name, fn in [("bj_kline", bj_kline), ("hs_vip_kline", hs_vip_kline)]:
        data, err = fn()
        print(f"[{name}] data={data} err={err}")

跑通示例

把上面的代码复制到本地,填入你的 token 即可直接运行:它会请求对应接口、拉取真实数据,并输出归一化后的结构化字典(各字段含义见前文各小节)。

6. 坑与注意事项

  1. 102 不代表路径对404 102 是「证书不存在」(鉴权先于路由),路径合法与否要靠客户端白名单自查。
  2. token 必须走查询参数?token=你的token,不要塞进 header——
  3. 代码后缀别漏:北交所是 .BJ、深市 .SZ、沪市 .SH,路径里的点号原样保留(requests 会自行百分号编码)。
  4. 除权方式三选一n(不复权)/qfq(前复权)/hfq(后复权),写错会路由不到。
  5. VIP 路径要权限/hs/hsstock/vip/ 需要 VIP 证书,普通 token 即便路径正确也可能返回无权限,属于预期内。

7. 小结与下篇预告

本篇把「历史K线」的两种收尾端点——北交所K线与沪深VIP历史K线——拧成了 2 个零依赖封装,重点解决token 查询参数代码后缀除权方式三选一三个坑,配 _hit_key 候选键即可一行读出行情。

本篇(#34)为 #29–#34 阶段收尾:本篇用零依赖接口补齐了北交所历史K线与沪深VIP历史K线两类 OHLCV 端点,至此《零依赖量化数据实战》覆盖官方接口清单的全部 191 个端点。

8. 免责声明

本文仅演示公开数据接口的用法,所有代码示例均为演示数据,未含任何真实数据;文中示例仅为演示用途,不构成投资建议,亦不承诺收益。

想亲自试一下?免费获取证书