【零依赖量化数据实战 #34】历史K线收尾:北交所K线与沪深VIP历史K线
摘要:【零依赖量化数据实战 #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. 坑与注意事项
- 102 不代表路径对:
404 102是「证书不存在」(鉴权先于路由),路径合法与否要靠客户端白名单自查。 - token 必须走查询参数:
?token=你的智兔token,不要塞进 header——占位 token 含中文,放进 header 会被latin-1编码拒绝,直接抛异常。 - 代码后缀别漏:北交所是
.BJ、深市.SZ、沪市.SH,路径里的点号原样保留(requests 会自行百分号编码)。 - 除权方式三选一:
n(不复权)/f(前复权)/b(后复权),写错会路由不到。 - 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线数据。