← 返回博客列表

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

2026年09月01日 16:00 · 智兔数服 · 零依赖量化数据实战

摘要:【零依赖量化数据实战 #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(不复权)/f/b
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}")

5. 代码自验结果

离线自测(合成数据,验证 _hit_key 命中逻辑):

--- selftest(合成 K 线)---
bj[0] 收盘=10.5 开盘=10.0 日期=2024-01-02  -> OK
hs[0] 收盘=15.3 成交量=1800000          -> OK
SELFTEST PASS

联网实测(占位 token,真实返回):

--- 联网实测(占位 token,预期 404 102:Licence证书不存在)---
bj_kline -> (None, '404 102:Licence证书(你的智兔token)不存在')
hs_vip_kline -> (None, '404 102:Licence证书(你的智兔token)不存在')

TOKEN = "你的智兔token" 换成你申请的真实 token,上述函数即可打印北交所 / 沪深VIP 历史K线数据。本文未编造任何真实数值。

6. 坑与注意事项

  1. 102 不代表路径对404 102 是「证书不存在」(鉴权先于路由),路径合法与否要靠客户端白名单自查。
  2. token 必须走查询参数?token=你的智兔token,不要塞进 header——占位 token 含中文,放进 header 会被 latin-1 编码拒绝,直接抛异常。
  3. 代码后缀别漏:北交所是 .BJ、深市 .SZ、沪市 .SH,路径里的点号原样保留(requests 会自行百分号编码)。
  4. 除权方式三选一n(不复权)/f(前复权)/b(后复权),写错会路由不到。
  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. 免责声明

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


免费领取证书
数据来自 智兔数服(www.zhituapi.com):零 SDK、纯 GET、免费版即可起步。

领取路径:进入 www.zhituapi.com → 点击「请求证书」→「证书获取」→「免费版」(邮箱验证 3 步即可拿到 token)。

把代码里的 你的智兔token 换成你拿到的真实 token,上面的脚本就能直接打印北交所 / 沪深VIP 历史K线数据。

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