沪深港通数据实战:从北向资金到择时信号的全链路量化(第 9 篇):沪、深股通历史数据:长期资金进出回溯
一、前言
第 1、2 篇看的是北向整体的「走势」,本篇下沉到沪股通、深股通各自的长期逐日资金流水,接入ht/nbzj/hgls(沪股通历史)与ht/nbzj/shls(深股通历史)。把长期数据落库后,可计算累计净买入拐点、回溯北向大进大出的时点,为第 11 篇综合择时提供长周期因子。
二、接口与字段
2.1 沪股通历史数据/ht/nbzj/hgls
| 字段 | 含义(按官方字段名推断) |
|---|---|
| t | 日期 |
| jme / mr / mc | 净买入额 / 买入额 / 卖出额 |
| lj | 累计值 |
| drlr / drye | 当日流入 / 当日余额 |
| lzgdm / lzgmc / lzgzdf | 领涨股代码 / 名称 / 涨跌幅 |
| zs / zszdf | 只数 / 总市值涨跌幅 |
2.2 深股通历史数据/ht/nbzj/shls
字段与hgls完全一致(12 个)。
三、自研衍生指标
- 累计净买入曲线:
jme.cumsum(),观察沪/深股通长期加仓节奏。 - 大进大出回溯:
jme绝对值创新高或连续为负的时段标记。 - 领涨股跟踪:提取
lzgmc / lzgzdf,看北向重仓周期里谁领涨。
四、数据表设计
CREATETABLEht_hgls(tTEXT,jmeTEXT,mrTEXT,mcTEXT,ljTEXT,drlrTEXT,dryeTEXT,lzgdmTEXT,lzgmcTEXT,lzgzdfTEXT,zsTEXT,zszdfTEXT);-- ht_shls 同构五、完整代码
importurllib.request,json,sqlite3,time,loggingimportpandasaspd LICENCE="YOUR_LICENCE_HERE"DB_PATH="quant.db"LOG_FILE="season4_article9.log"BASE="https://api.biyingapi.com"logging.basicConfig(filename=LOG_FILE,level=logging.INFO,format="%(asctime)s %(levelname)s %(message)s")HIST_COLS=["t","jme","mr","mc","lj","drlr","drye","lzgdm","lzgmc","lzgzdf","zs","zszdf"]defbiying_api_get_retry(url,timeout=15,max_retry=3):last=Noneforiinrange(max_retry):try:req=urllib.request.Request(url,headers={"User-Agent":"Mozilla/5.0"})withurllib.request.urlopen(req,timeout=timeout)asresp:returnjson.loads(resp.read().decode("utf-8"))exceptExceptionase:last=e logging.warning("retry %d/%d %s %s",i+1,max_retry,url,e)time.sleep(1)logging.error("api failed %s %s",url,last)returnNonedef_as_list(data):returndataifisinstance(data,list)else[data]defsave_hist(name,path):url=f"{BASE}/ht/nbzj/{path}/{LICENCE}"data=biying_api_get_retry(url)ifnotdata:returnrows=_as_list(data)conn=sqlite3.connect(DB_PATH)coldef=",".join(f"{c}TEXT"forcinHIST_COLS)conn.execute(f"CREATE TABLE IF NOT EXISTS{name}({coldef})")ph=",".join("?"*len(HIST_COLS))forrinrows:conn.execute(f"INSERT INTO{name}VALUES ({ph})",[r.get(c)forcinHIST_COLS])conn.commit();conn.close()logging.info("%s saved %d rows",name,len(rows))defsave_hgls():save_hist("ht_hgls","hgls")defsave_shls():save_hist("ht_shls","shls")defhist_trend():conn=sqlite3.connect(DB_PATH)fornamein["ht_hgls","ht_shls"]:df=pd.read_sql(f"SELECT t, jme, lzgmc, lzgzdf FROM{name}",conn)ifdf.empty:continuedf["t"]=pd.to_datetime(df["t"])df=df.sort_values("t").reset_index(drop=True)df["jme"]=pd.to_numeric(df["jme"],errors="coerce")df["cum"]=df["jme"].cumsum()print(f"[{name}] 累计净买入末5:")print(df[["t","jme","cum","lzgmc","lzgzdf"]].tail(5).to_string(index=False))conn.close()if__name__=="__main__":save_hgls()save_shls()hist_trend()六、业务关键点
- 历史接口是长期序列,
jme单位与第 1 篇bxls.bx需保持一致口径才能叠加验证。 lj(累计)理论上等于jme.cumsum(),可作为末端交叉校验项。- 长周期数据量大,落库建议按日期追加并去重,避免重复写入。
七、拓展练习
- 把
ht_hgls.jme + ht_shls.jme与第 2 篇ht_bx_trend.bx对齐日期,验证两套口径的累计差。 - 用
jme符号切换(正/负连续天数)构造「北向长期态度」状态机。 - 把
lzgmc按周期聚合,找历史上北向重仓阶段反复领涨的标的。
八、下篇预告
下一篇《港股通历史数据:沪、深港股通长期资金》将接入ht/nbzj/ghls与ht/nbzj/gsls,补齐南向(港股通)的长期资金流水,形成「北向 + 南向」长周期对照。
免责申明:文中所有数据处理逻辑仅为编程演示,仅为数据演示,不构成投资建议。市场有风险,投资需谨慎。