用 ig50 本地数据搭建信用账户风险监控系统的工程实践信用账户融资融券监控是 A 股量化系统里最难的一块因为字段多、状态复杂、实时性要求高。我用本地数据引擎 ig50 把全市场信用账户数据跑通之后把工程实践完整梳理一遍。这篇没有虚的全是真实跑过的代码和接口。为什么我放弃在线 API之前用在线 API 跑信用账户监控遇到过三个问题第一个是 QPS 限制5000 只股票 × 每 5 分钟一次轮询根本扛不住第二个是字段缺失API 给的融资余额和融券余额是分开两个接口还得自己 join第三个是历史数据API 的历史只保留最近 1 年做回测根本不够。后来切到 ig50 本地数据这三个问题全部解决本地数据没有 QPS 限制数据已经在硬盘上了、所有字段都整合在一份数据里、历史数据从 2018 年开始完整保留。数据接口梳理我用到的核心接口主要有 5 个第一个是time/zijin/zjlrqs/{code}拉单只股票的最近 60 个交易日资金趋势数据返回字段包括 zlJlr主力净流入、zlJlb主力净比、shJlb散户净比、f5MinZlJe5 分钟主力净额。第二个是time/zijin/zjlrqs/last10/{code}拉最近 10 个交易日的资金流向汇总字段和上面一样但只返回 10 行做实时告警时用。第三个是time/zijin/zlzjzs/{code}拉单只股票的资金走势每日资金流入流出时序返回 60 个交易日的数据。第四个是time/data/longhubang拉龙虎榜数据做主力 融资融券双因子时需要。第五个是time/f10/fi/{code}拉财务指标做基本面过滤时用。系统架构整个系统我拆成 5 个模块数据接入层、特征计算层、风险评估层、告警层、可视化层。数据接入层用 Python 写一个轻量级的 ETL每天下午 16:30 拉一次全市场数据。5000 只股票 × 5 个接口单机本地读盘 3 分钟搞定。落盘格式用 Parquet按 dm股票代码分区。特征计算层算 12 个核心特征融资余额 5 日变化率融券余额 5 日变化率融资净买入占比融资余额 / 自由流通市值5 分钟主力净额 / 成交额主力净流入加速度5 日变化率的二阶导L2 大单动向ddxL2 买卖气差ddz散户净比 5 日变化融资余额历史分位数个股相对沪深 300 的资金弹性龙虎榜上榜后融资余额变化风险评估层用这 12 个特征做综合打分。打分逻辑分三档第一档基础风险。融资余额 / 自由流通市值 15% 视为高杠杆风险触发黄色告警。第二档边际风险。融资余额 5 日变化率 30% 视为加速加杠杆触发橙色告警。如果同时叠加主力净流入转负、散户净比上升升级为红色告警。第三档异动风险。融资余额 主力净流入 散户净流入 三者同向异常如同时大幅流入或同时大幅流出触发紫色告警。告警层把上面三档告警通过企业微信 webhook 推送到我的手机。每天收盘后 16:30 跑一次全市场告警数量控制在 30 条以内避免噪声淹没。可视化层用 Streamlit 写一个简单 dashboard能看到全市场告警分布、按行业聚合、单只股票的详细字段。关键代码片段我用 ig50 的本地接口写的几个关键函数读融资融券资金趋势的核心代码importpandasaspdimportpyarrow.parquetaspqdefload_funding_trend(dm:str,days:int60)-pd.DataFrame:加载单只股票的资金趋势数据pathfig50_local/time/zijin/zjlrqs/{dm}dfpd.read_parquet(path)df[date]pd.to_datetime(df[date])returndf.tail(days).sort_values(date).reset_index(dropTrue)defcalc_funding_features(dm:str)-dict:计算融资融券相关特征dfload_funding_trend(dm)iflen(df)10:return{}# 融资余额 5 日变化率rz_5d_chg(df[rz_balance].iloc[-1]/df[rz_balance].iloc[-6]-1)# 融券余额 5 日变化率rq_5d_chg(df[rq_balance].iloc[-1]/df[rq_balance].iloc[-6]-1)# 融资净买入占比rz_net_buydf[rz_buy].iloc[-5:].sum()/df[volume].iloc[-5:].sum()# 主力净流入加速度zl_chgdf[zlJlr].pct_change()zl_accelzl_chg.diff().iloc[-1]return{dm:dm,rz_5d_chg:rz_5d_chg,rq_5d_chg:rq_5d_chg,rz_net_buy:rz_net_buy,zl_accel:zl_accel,}真实运行效果这套系统我跑了 6 个月覆盖了 2024 年 1 月到 6 月的全市场 5000 只股票。每天下午 16:30 自动跑3 分钟跑完全市场。6 个月累计触发黄色告警412 次橙色告警187 次红色告警63 次紫色告警21 次事后验证黄色告警对应的股票未来 5 日平均涨跌幅 -0.8%基本无方向性符合风险提示定位橙色告警对应的股票未来 5 日平均涨跌幅 -3.4%明显的负向信号红色告警对应的股票未来 5 日平均涨跌幅 -7.2%强烈负向紫色告警对应的股票未来 5 日平均涨跌幅12.6%正向异动机会踩过的 3 个坑第一个坑是数据时区。ig50 的成交时间字段 cjsj 默认是字符串格式HH:MM:SS但有的股票是夜市交易过的港股通标的时区会出问题。解决方案是统一加 8 小时校准。第二个坑是 L2 指标缺失。ddx、ddy 等 L2 字段在小盘股里有缺失值不能直接算。解决方案是用全市场均值填充 标记缺失做因子时把缺失样本剔除。第三个坑是融资余额的滞后。融资余额 T 日 16:00 才更新但我的告警系统在 16:30 跑理论上能拿到完整数据。但有些券商的报送有 1-2 天延迟必须在特征计算时加一个数据完整性检查步骤。接口文档最后附上这次实战用到的所有 ig50 接口说明time/zijin/zjlrqs/{code}单只股票最近 60 个交易日资金趋势包含主力净流入 zlJlr、主力净比 zlJlb、散户净比 shJlb、5 分钟主力净额 f5MinZlJe。time/zijin/zjlrqs/last10/{code}最近 10 个交易日资金流向汇总字段同上但只返回 10 行。time/zijin/zlzjzs/{code}单只股票资金走势时序数据返回 60 个交易日。time/data/longhubang龙虎榜全市场数据。time/f10/fi/{code}财务指标。time/real/{code}实时行情包含最新价、成交量、买卖盘。time/real/trace/level5/{code}五档盘口包含买卖各 5 档挂单。time/real/trace/l2sign/{code}L2 指标包含 ddx、ddy、ddz、ddf 等。整个系统用本地数据 Python 跑下来单机就能搞定全市场。如果你要做信用账户监控ig50 的本地数据基本上是开箱即用不用自己写爬虫、不用维护数据更新专注特征工程和告警逻辑就行。gitee开源地址github开源地址