
【Python 量化取数指南 #12】Python 取北交所与指数小众市场接口实测系列《Python 量化取数指南》连载项目 · 纯 GET 取数 · 仅依赖 requests适用想用 Python 拉北交所、指数这类「小众但常被忽略」的市场数据的人。1. 你将得到什么北交所 2 类端点列表、历史 MA 指数 2 类端点列表、历史 K 线的完整代码一个把「北交所股票 对应指数」拼起来看的小示例一个离线run_check()不填 token 也能验证逻辑2. 本篇取数约定北交所列表/bj/list/all北交所历史 MA/bj/history/ma/{code}/d/n{code}北交所代码如920000.BJ指数列表/hz/list/hszs指数历史 K 线/hz/history/fsjy/{code}.{market}/{lvl}如000001.SH/d请求GET https://api.zhituapi.compath?token你的token北交所代码后缀.BJ指数.SH/.SZ别混3. 核心模板全系列复用importtime,json,requests BASEhttps://api.zhituapi.comTOKEN你的tokendef_get(path,paramsNone,timeout15,retry3,backoff1.5):paramsdict(paramsor{})params[token]TOKEN urlBASEpath lastNoneforiinrange(retry):try:rrequests.get(url,paramsparams,timeouttimeout)ifr.status_code!200:lastfHTTP{r.status_code}{r.text[:120]}time.sleep(backoff*(i1));continuetry:returnr.json(),NoneexceptValueError:lastf非JSON响应:{r.text[:120]}returnNone,lastexceptrequests.RequestExceptionase:laststr(e);time.sleep(backoff*(i1))returnNone,lastdef_hit_key(d,*keys,defaultNone):ifnotisinstance(d,dict):returndefaultforkinkeys:ifkindandd[k]notin(None,,[]):returnd[k]returndefaultdef_to_float(x,defaultfloat(nan)):try:returnfloat(x)except(TypeError,ValueError):returndefault4. 跑通示例北交所 指数defdemo_bse_index():# 4.1 北交所列表 /bj/list/alldata,err_get(/bj/list/all)iferr:print(北交所列表失败:,err)else:itemsdataifisinstance(data,list)else(data.get(data)or[])print(f 北交所股票{len(items)}只)# 4.2 北交所历史 MA /bj/history/ma/920000.BJ/d/ndata,err_get(/bj/history/ma/920000.BJ/d/n)iferr:print(北交所MA失败:,err)else:print( 北交所MA结构:,type(data).__name__)# 4.3 指数列表 /hz/list/hszsdata,err_get(/hz/list/hszs)iferr:print(指数列表失败:,err)else:itemsdataifisinstance(data,list)else(data.get(data)or[])print(f 指数{len(items)}个)# 4.4 指数历史 K 线 /hz/history/fsjy/000001.SH/ddata,err_get(/hz/history/fsjy/000001.SH/d)iferr:print(指数K线失败:,err)else:barsdataifisinstance(data,list)else(data.get(data)or[])print(f 上证日线{len(bars)}根)defrun_check():synth[{code:920000.BJ,name:合成北交所股}]print(f [run_check] 合成北交所{len(synth)}只:{synth[0][name]})if__name____main__:demo_bse_index()run_check()返回字段说明北交所列表含code/dm如920000.BJ、name/mc指数列表含code/dm如000001.SH、name/mc。历史 K 线/MA 每项含date/rq、close/sp/收盘、ma5/ma20等。5. 坑与注意事项后缀别混北交所.BJ、上证.SH、深证.SZ错后缀直接 404。北交所流动性差异大小票成交稀薄回测滑点要额外考虑。指数代码 vs 个股代码000001.SH是指数上证综指600519.SH是个股别混。MA 端点参数/bj/history/ma/{code}/d/n末段是级别窗口错格式返回空。字段名三套close/sp/收盘用_hit_key。限流北交所列表量大批量加sleep。6. 常见报错速查报错 / 现象原因处理404后缀错.BJ/.SH核对市场后缀返回空级别/窗口格式错检查d/n指数当个股代码混区分 000001.SH vs 600519.SHKeyError字段名不符print(data)看真实 key7. 小结与下一篇预告小结北交所走/bj/list/all/bj/history/ma/指数走/hz/list/hszs/hz/history/fsjy/核心是「后缀别混 指数/个股区分」。下一篇计划写 #13《Python 把行情落库sqlite 一键存回测随用随取》把前面拉的行情落进本地库回测时直接读不再每次联网。8. 免责声明本文仅演示公开数据接口的用法所有代码示例均为演示数据不构成任何投资建议实际返回字段以接口文档与你的证书权限为准。