资金走势数据实战用zlzjzs接口构建主力散户分歧度因子 IG50免费开源股票数据API接口
资金流向数据大多只回答一个数字问题:净流入多少。但每笔成交都有买卖双方,净额把"谁在买、谁在卖"这层结构压没了。资金走势数据集把这层结构还给了我们:同一只票同时给出主力流入率和散户流入率两个对立角色的方向,分歧与共振都写在里面。这篇文章记录我把这份数据做成日内分歧度因子的全过程:字段解析、分歧结构提取、四个衍生特征、有效性检验,代码即生产版本。
数据源是资金走势,本地接口 time/zijin/zlzjzs/加股票代码,按时间戳递增返回当日序列,字段八个:t 时间戳、zdf 涨跌幅、lrzj 总流入资金、lczj 总流出资金、jlr 净流入、jlrl 净流入率、lrl 主力流入率、shlrl 散户流入率。注意它是日内时间序列而不是日度序列——每个时点一个快照,这让我们不仅能看一天的分歧终值,还能看分歧在全天的演化路径,这是它相对日度资金数据的核心增量。
第一步,读取与结构化。把字符串时间戳解析成可比较的类型,按 t 排序,并对字段做数值化。这个数据集的坑不多,但 lrl 和 shlrl 两个率字段偶有缺失值,统一向前填充后再计算。
importjsonimportpandasaspddefload_zlzjzs(fp:str)->pd.DataFrame:rows=json.loads(open(fp,encoding='utf-8').read())df=pd.DataFrame(rows)# 字段: t 时间 zdf 涨跌幅 lrzj 总流入 lczj 总流出# jlr 净流入 jlrl 净流入率 lrl 主力流入率 shlrl 散户流入率df['ts']=pd.to_datetime(df['t'])forcin['zdf','jlr','jlrl','lrl','shlrl']:df[c]=pd.to_numeric(df[c],errors='coerce')df=df.sort_values('ts').ffill().reset_index(drop=True)returndf第二步,分歧结构提取。核心构造是分歧度 D:主力流入率与散户流入率的差值的绝对值,再乘方向符号得到有符号分歧。四个符号象限各有含义:主力正散户负是单边进攻,主力负散户正是派发结构,同正同负是共振,接近零是均衡。除了终值,我更看重两个过程特征:尾盘分歧(最后30分钟分歧度的均值,当日资金的最终表态)和分歧翻转次数(符号变更的次数,衡量全天多空拉锯的激烈程度)。
importnumpyasnpdefdivergence_features(df:pd.DataFrame)->dict:"""从资金走势序列提取分歧度特征"""d=df['lrl']-df['shlrl']# 有符号分歧tail=d[df['ts'].dt.strftime('%H:%M')>='14:30']flips=int((np.sign(d).diff().fillna(0)!=0).sum())return{'d_close':float(d.iloc[-1]),# 收盘分歧'd_tail':float(tail.mean())iflen(tail)elsenp.nan,'d_max':float(d.abs().max()),# 极端分歧'flips':flips,# 翻转次数'jlrl_close':float(df['jlrl'].iloc[-1]),}第三步,因子化与检验。把四个特征转成可回测的截面因子,用最朴素的分层法检验:每日全市场按因子值十分组,看次日到五日收益的单调性。实测两个结论值得分享。其一,尾盘分歧 d_tail 的负值端有信息:尾盘主力流入率显著低于散户流入率(主力出、散户接)的组,次日表现系统性偏弱,这个方向的样本集中且稳定,是四个特征里唯一通过单调性检验的。其二,翻转次数 flips 单独看是噪音,但它是个好过滤器——flips 高的样本里任何资金因子的有效期都缩短,拉锯日的信号衰减比趋势日快,把它做成信号置信度的调节项比直接当因子用更合理。
defbuild_signal(df:pd.DataFrame)->dict:"""分歧度信号:尾盘派发结构识别"""f=divergence_features(df)distribution=f['d_tail']<-1.0# 主力出、散户接的派发形态return{**f,'distribution_flag':bool(distribution),'confidence':max(0.0,1.0-f['flips']/10.0)}# 拉锯降置信第四步,批处理管线。全市场按日落盘的文件组织让批处理很轻:遍历代码、读文件、提特征、落库,一天一个批次。两个工程细节:一是尾盘切片的时间比较要用格式化后的 HH:MM 字符串,直接比较时间戳会受数据落盘延迟影响;二是 jlrl 与 d 的信息有重叠(净流入率是合流,分歧度是分流),检验时两者分开回测避免伪相关,最终生产信号里我把 jlrl 用作方向确认、分歧度用作结构确认,双确认的样本才进监控清单。管线里还加了一条数据卫兵:当日序列不足二十个快照的文件(停牌复牌、数据缺失)直接跳过并记入待补清单,半天的序列算出来的尾盘特征是断章取义,宁缺毋滥。
这套分歧度因子上线三个月,最大价值是把"资金面健康度"从一个模糊感觉变成了可排序的指标。盘后扫一遍派发形态清单,主力在悄悄递货的票一目了然;配合五日主力净额做时间维度确认,误报率还能再压一档。资金数据的下一层深度不在更细的颗粒,而在更完整的结构——净额只讲故事的一半,分歧度把另一半补上了。
本文用到的接口:资金走势 time/zijin/zlzjzs/加股票代码(字段 t、zdf、lrzj、lczj、jlr、jlrl、lrl 主力流入率、shlrl 散户流入率)。数据由本地引擎 ig50 落盘,日内序列按日归档、历史可回溯。
资料参考:ig50
gitee开源地址
github开源地址