A股量化数据工程:从 REST 接口到策略信号(第 12 篇):北交所列表与实时行情接入
前言
主板、创业板、科创板之外,北交所(京市)是竞品覆盖较少的差异化战场。接口bj/list/all给京市股票列表,bj/stock/real/time给实时行情,字段结构与主板一致但代码后缀不同。本篇把北交所行情接进来,开辟一个独立数据维度。
一、接口原始字段梳理
1)京市股票列表
接口地址:https://api.biyingapi.com/bj/list/all/{LICENCE}
| 字段 | 说明 |
|---|---|
| dm | 股票代码(北交所后缀,如8xxxxx.BJ) |
| mc | 股票名称 |
| jys | 交易所(北交所) |
2)北交所股票实时行情
接口地址:https://api.biyingapi.com/bj/stock/real/time/{LICENCE}
| 字段 | 说明 |
|---|---|
| p | 最新价 |
| o | 今开 |
| h | 最高 |
| l | 最低 |
| yc | 昨收 |
| cje | 成交额 |
| v | 成交量 |
| pv | 原始成交总量 |
| ud | 涨跌额 |
| pc | 涨跌幅 |
| zf | 振幅 |
| t | 行情时间 |
| pe | 市盈率 |
| tr | 换手率 |
| pb_ratio | 市净率 |
| tv | 成交量(原始) |
二、自研衍生统计指标
- 京市强弱分档:按
pc把北交所股票分强/平/弱,与主板上证指数(第 1 篇)做跨市场对照。 - 低流动性预警:北交所个股换手
tr普遍偏低,低于某阈值的标记「流动性薄」。 - 市值快照:由
p与股本可估算,本篇先用p排序摸清价格分布。
分档与预警基于原始
pc/tr字段自研。
三、数据表设计
CREATETABLEIFNOTEXISTSbj_list(dmTEXTPRIMARYKEY,mcTEXT,jysTEXT);CREATETABLEIFNOTEXISTSbj_realtime(dmTEXT,tTEXT,pREAL,oREAL,hREAL,lREAL,ycREAL,cjeREAL,vREAL,pvREAL,udREAL,pcREAL,zfREAL,peREAL,trREAL,pb_ratioREAL,tvREAL,PRIMARYKEY(dm,t));四、完整代码
importrequestsimportsqlite3importtime LICENCE="YOUR_LICENCE"BASE="https://api.biyingapi.com"DB_PATH="quant.db"defbiying_api_get_retry(url,timeout=15,max_retry=3):foriinrange(max_retry):try:r=requests.get(url,timeout=timeout)r.raise_for_status()returnr.json()exceptExceptionase:ifi==max_retry-1:raisetime.sleep(1+i)deffetch_bj_list():d=biying_api_get_retry(f"{BASE}/bj/list/all/{LICENCE}")returnd.get("data",[])ifisinstance(d,dict)else[]deffetch_bj_realtime():d=biying_api_get_retry(f"{BASE}/bj/stock/real/time/{LICENCE}")returnd.get("data",[])ifisinstance(d,dict)else[]defstrength_tag(pc):ifpcisNone:return"平"ifpc>1.0:return"强"ifpc<-1.0:return"弱"return"平"if__name__=="__main__":lst=fetch_bj_list()con=sqlite3.connect(DB_PATH)con.executemany("INSERT OR REPLACE INTO bj_list(dm,mc,jys) VALUES(?,?,?)",[[r.get("dm"),r.get("mc"),r.get("jys")]forrinlst])con.commit()rt=fetch_bj_realtime()cols=["dm","t","p","o","h","l","yc","cje","v","pv","ud","pc","zf","pe","tr","pb_ratio","tv"]forrinrt:vals=[r.get(c)forcincols]ph=",".join("?"*len(cols))con.execute(f"INSERT OR REPLACE INTO bj_realtime({','.join(cols)}) VALUES({ph})",vals)con.commit();con.close()strong=[rforrinrtifstrength_tag(r.get("pc"))=="强"]thin=[rforrinrtif(r.get("tr")or0)<0.5]print(f"北交所列表{len(lst)}只,实时{len(rt)}只")print(f"强势{len(strong)}只,流动性偏薄(<0.5%换手){len(thin)}只")五、关键业务说明
- 代码后缀区分市场:北交所代码后缀为
.BJ,与主板.SH/.SZ不同,落库与查询要带全。 - 流动性是北交所特征:京市整体换手低于主板,量化策略需单独设阈值,不能直接套主板参数。
- 实时接口批量返回:
bj/stock/real/time一次返回全市场,无需逐只循环,注意免费版条数上限。
六、拓展练习
- 把北交所
pc分布与第 1 篇上证指数做跨市场强弱对比,看资金是否切换。 - 用
tr给北交所股票做流动性分层,回测各层换手策略有效性(仅统计)。 - 把
bj_list与主板hsstock列表合并,做全市场统一行情快照表。
下篇预告
A股量化数据工程:从 REST 接口到策略信号(第 13 篇):北交所五档盘口实战
下一篇用
bj/stock/real/five拉取北交所五档盘口(买卖委差),讲解盘口失衡指标的算法与落地。
免责申明:本篇全部代码、接口调用仅作为量化编程学习演示,仅为数据演示,不构成投资建议。市场有风险,投资需谨慎。