A股量化数据工程:从 REST 接口到策略信号(第 22 篇):机构持股汇总透视
前言
聪明钱的去向,是基本面之外的重要维度。接口 hijg/jgcghz 给出机构持股汇总(持股比例、流通比例、日期),本篇把机构持仓落库,并自研机构持仓变动信号:同一股票跨期 gbl(持股比例)的变化,反映机构增减持方向。
一、接口原始字段梳理
1)机构持股汇总
接口地址:https://api.biyingapi.com/hijg/jgcghz/{LICENCE}
| dm | 股票代码 |
| mc | 股票名称 |
| oc | 持股数(机构,接口原始字段) |
| occ | 持股数(接口原始字段) |
| gbl | 持股比例 |
| gblz | 持股比例(另一口径,接口原始字段) |
| lbl | 流通比例 |
| ltz | 流通股本(接口原始字段) |
| dt | 日期 |
| y, q, yq | 年 / 季 / 年季标识 |
二、自研衍生统计指标
变动与聚合基于原始 gbl 字段二次计算。
三、数据表设计
CREATE TABLE IF NOT EXISTS inst_hold (
dm TEXT, yq TEXT,
gbl REAL, gblz REAL, lbl REAL, ltz REAL,
PRIMARY KEY (dm, yq)
);
CREATE TABLE IF NOT EXISTS inst_hold_chg (
dm TEXT, yq TEXT,
gbl_prev REAL, gbl_chg REAL,
PRIMARY KEY (dm, yq)
);
四、完整代码
import requests
import sqlite3
import time
LICENCE = "YOUR_LICENCE"
BASE = "https://api.biyingapi.com"
DB_PATH = "quant.db"
def biying_api_get_retry(url, timeout=15, max_retry=3):
for i in range(max_retry):
try:
r = requests.get(url, timeout=timeout)
r.raise_for_status()
return r.json()
except Exception as e:
if i == max_retry – 1:
raise
time.sleep(1 + i)
def fetch_summary():
d = biying_api_get_retry(f"{BASE}/hijg/jgcghz/{LICENCE}")
return d.get("data", []) if isinstance(d, dict) else []
def build_chg(rows):
by_dm = {}
for r in rows:
by_dm.setdefault(r["dm"], []).append(r)
out = []
for dm, rs in by_dm.items():
rs = sorted(rs, key=lambda x: x.get("yq") or "")
for i, r in enumerate(rs):
prev = rs[i – 1].get("gbl") if i > 0 else None
cur = r.get("gbl")
chg = round(cur – prev, 4) if (prev is not None and cur is not None) else 0.0
out.append((dm, r.get("yq"), prev, chg))
return out
if __name__ == "__main__":
rows = fetch_summary()
con = sqlite3.connect(DB_PATH)
con.executemany(
"INSERT OR REPLACE INTO inst_hold(dm,yq,gbl,gblz,lbl,ltz) VALUES(?,?,?,?,?,?)",
[[r.get("dm"), r.get("yq"), r.get("gbl"), r.get("gblz"),
r.get("lbl"), r.get("ltz")] for r in rows])
con.commit()
chg = build_chg(rows)
con.executemany(
"INSERT OR REPLACE INTO inst_hold_chg(dm,yq,gbl_prev,gbl_chg) VALUES(?,?,?,?)",
chg)
con.commit(); con.close()
add = sorted([c for c in chg if c[3] > 0], key=lambda x: x[3], reverse=True)[:5]
print("机构增持 Top5:")
for dm, yq, prev, d in add:
print(f" {dm} 上期{gbl_prev} 变动{d}")
五、关键业务说明
- gbl 是核心:机构持股比例直接反映关注度,跨期差值比绝对值更说明方向。
- 季度披露滞后:机构持股按季披露,变动信号偏滞后,适合中长线而非日内。
- 与基本面共振:机构增持 + 第 21 篇高 ROE,是「聪明钱 + 好公司」的双确认。
六、拓展练习
下篇预告
A股量化数据工程:从 REST 接口到策略信号(第 23 篇):基金、社保与 QFII 重仓股透视
下一篇用 hijg/jj / sb / qf 拉取三类机构重仓股,自研「三类共振」信号,定位被多元聪明钱共同看好的标的。
免责申明:本篇全部代码、接口调用仅作为量化编程学习演示,仅为数据演示,不构成投资建议。市场有风险,投资需谨慎。




