ETF资金流监测系统实战:用Python构建场内场外套利信号识别
ETF资金流监测系统实战用Python构建场内场外套利信号识别ETF是A股一个特殊的存在——它既是一篮子股票又能在二级市场像股票一样交易。我做量化这几年专门搭建了一套ETF资金流监测系统用Python把场内场外的资金流数据打通识别套利信号。这篇文章把核心实现分享出来。ETF数据主要分四块。第一块是ETF基金列表路径base/jjlbList基金列表返回所有ETF基金的代码、名称、类型、跟踪指数。第二块是ETF基金行情路径time/jjHQ/{基金代码}返回ETF的实时行情。第三块是ETF基金规模变动路径time/jjgm/{基金代码}返回ETF的份额变动历史。第四块是行业资金流向路径all/zjlx/zjhhy行业资金流向返回各行业的资金流向数据。我把这四块数据全部沉到本地。先说ETF基金列表怎么读。importjsonimportosimportpandasaspd data_dirD:/stock_datadefread_etf_list():file_pathos.path.join(data_dir,base,jjlbList)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,jjlb,gmbm,gmrb,gmsj,gmjz,gmje]returndfdefread_etf_realtime(dm):file_pathos.path.join(data_dir,time,jjHQ,dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame([data])df.columns[dm,mc,now,zf,jk,zs,zsz,cjsl,cjje,zt,dt,wb,wp]returndf字段简写dm基金代码mc基金名称jjlb基金类型gmbm规模编码gmrb规模日期gmje规模金额。实时行情字段now当前价zf涨跌幅jk今开zs昨收zsz总市值cjsl成交量cjje成交金额zt涨停dt跌停wb委买wp委卖。第一步是分析ETF场内场外溢价。ETF同时在场内二级市场和场外一级市场交易两个价格之间的差额就是套利空间。defanalyze_etf_premium(dm,lookback_days30):realtimeread_etf_realtime(dm)ifrealtimeisNone:returnNoneetf_listread_etf_list()ifetf_listisNone:returnNonetarget_etfetf_list[etf_list[dm]dm]iflen(target_etf)0:returnNoneetf_iopvtarget_etf.iloc[0][gmjz]etf_pricerealtime[now].iloc[0]premium(etf_price-etf_iopv)/etf_iopv*100print(ETF{}场内场外溢价分析.format(dm))print(场内价格{:.4f}.format(etf_price))print(场外净值{:.4f}.format(etf_iopv))print(溢价率{:.2f}%.format(premium))signalNoneifpremium2.0:signal场内高溢价可考虑卖出套利elifpremium-1.0:signal场内折价可考虑买入套利else:signal溢价正常无套利空间return{premium:premium,signal:signal}第二步是分析ETF份额变动。ETF份额变动反映了资金对这只ETF的态度是大资金进场还是离场最直观的指标。defread_etf_share_change(dm):file_pathos.path.join(data_dir,time,jjgm,dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[rq,fbdw,fqjz,fcye,zfdw,zqjz,zcye,jzzzl]returndfdefanalyze_etf_share_change(dm,days30):dfread_etf_share_change(dm)ifdfisNoneorlen(df)0:returnNonedf[fbdw]pd.to_numeric(df[fbdw],errorscoerce)df[zfdw]pd.to_numeric(df[zfdw],errorscoerce)df[rq]pd.to_datetime(df[rq],errorscoerce)recentdf.head(days)total_inflowrecent[fbdw].sum()/1e8total_outflowrecent[zfdw].sum()/1e8nettotal_inflow-total_outflowprint(ETF{}近{}日份额变动.format(dm,days))print(总申购{:.2f}亿份.format(total_inflow))print(总赎回{:.2f}亿份.format(total_outflow))print(净申购{:.2f}亿份.format(net))signalNoneifnet1.0:signal大额净申购资金流入elifnet-1.0:signal大额净赎回资金流出else:signal份额变动正常return{net:net,signal:signal}第三步是行业ETF联动分析。行业ETF和行业指数高度联动可以用行业资金流向数据来预判行业ETF的走势。defread_industry_flow():file_pathos.path.join(data_dir,all,zjlx,zjhhy)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[rq,hy,zjl,zlJlr,zlJlb,shJlb,ddy,ddx,ddz,ddf,f5MinZlJe]returndfdeffind_industry_etf_signals(date_str):dfread_industry_flow()ifdfisNone:returnNonedf[rq]pd.to_datetime(df[rq],errorscoerce)targetdf[df[rq].dt.strftime(%Y-%m-%d)date_str]iflen(target)0:returnNonetarget[zlJlr]pd.to_numeric(target[zlJlr],errorscoerce)strongtarget[target[zlJlr]5]weaktarget[target[zlJlr]-5]print(日期{} 行业资金流向.format(date_str))print(强势行业)foridx,rowinstrong.iterrows():print( {}净流入{:.2f}亿.format(row[hy],row[zlJlr]))print(弱势行业)foridx,rowinweak.iterrows():print( {}净流出{:.2f}亿.format(row[hy],abs(row[zlJlr])))return{strong:strong,weak:weak}第四步是构建完整的ETF套利信号系统。我把上面几个模块组合起来。defetf_arbitrage_scan(date_str):etf_listread_etf_list()ifetf_listisNone:returnNoneetf_listetf_list[etf_list[jjlb].str.contains(ETF,naFalse)]signals[]fordminetf_list[dm].tolist():premium_resultanalyze_etf_premium(dm)share_resultanalyze_etf_share_change(dm,days10)ifpremium_resultisNoneorshare_resultisNone:continuepremiumpremium_result[premium]net_shareshare_result[net]ifpremium2.0andnet_share0.5:signals.append({dm:dm,signal:高溢价净申购可能有大资金申购套利关注卖出机会,premium:premium,net_share:net_share})elifpremium-1.0andnet_share-0.5:signals.append({dm:dm,signal:折价净赎回可能有大资金赎回套利关注买入机会,premium:premium,net_share:net_share})returnpd.DataFrame(signals)这套ETF系统跑了一年最关键的收获是ETF的资金流向比价格更值得关注。当某只ETF出现大额净申购但价格没怎么涨的时候往往是聪明钱在悄悄建仓。反过来当某只ETF大额净赎回但价格还坚挺的时候往往是陷阱。接口说明ETF基金列表base/jjlbListETF实时行情time/jjHQ/{dm}ETF份额变动time/jjgm/{dm}行业资金流向all/zjlx/zjhhy资料参考ig50

相关新闻

Java 应用数据库接入层工程实践:驱动、连接池与故障排查

Java 应用数据库接入层工程实践:驱动、连接池与故障排查

--- title: "Java 应用数据库接入层工程实践:驱动、连接池与故障排查" date: "2026-08-06T09:02:2708:00" summary: "数据库访问异常往往不只来自 SQL,也可能发生在驱动加载、连接池配置、网络超时和事务边界。本文以 Spring B…

2026/10/25 19:58:40 阅读更多 →
CANoe测试工程从零搭建指南:汽车电子工程师实战手册

CANoe测试工程从零搭建指南:汽车电子工程师实战手册

1. 项目概述:从零搭建CANoe测试工程如果你是一名汽车电子工程师,或者正在进入这个领域,那么“CANoe”这个名字对你来说一定不陌生。它几乎是汽车网络开发、测试和仿真领域的“瑞士军刀”,由Vector公司出品。但很多新手朋友拿到这个…

2026/10/26 6:26:31 阅读更多 →
免费GPX在线编辑器:无需下载软件,浏览器里编辑GPS轨迹

免费GPX在线编辑器:无需下载软件,浏览器里编辑GPS轨迹

免费GPX在线编辑器:无需下载软件,浏览器里编辑GPS轨迹 【免费下载链接】gpxstudio.github.io The online GPX file editor 项目地址: https://gitcode.com/gh_mirrors/gp/gpxstudio.github.io 你是否经常需要处理户外运动的GPS轨迹文件&#xff0…

2026/10/26 13:40:55 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →