ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

machine-learning-for-trading 权益定位数据管道:SEC 13F 机构持仓与 Form 4 内幕交易下载、解析与加载实战

machine-learning-for-trading 权益定位数据管道:SEC 13F 机构持仓与 Form 4 内幕交易下载、解析与加载实战 machine-learning-for-trading 权益定位数据管道SEC 13F 机构持仓与 Form 4 内幕交易下载、解析与加载实战【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading导读machine-learning-for-trading仓库在 data/equities/positioning 目录下维护了一套完整的权益定位Equity Positioning数据管道围绕两类 SEC 强制披露文件展开13F机构持仓与 Form 4内幕交易。本文以 data/equities/positioning/README.md 为骨架结合 13f_download.py、form4_download.py 与 loader.py 的源码实现系统讲解数据集的来源、两种 13F 下载模式per-cik 与 bulk、Form 4 原始 XML 抓取、目录落盘布局、规范化的加载 API以及 Ch4 / Ch10 / Ch22 / Ch23 各章对这批数据的消费方式。读完本文你将能够在自己的环境中一键拉取伯克希尔、桥水等头部机构的季度持仓或获取全市场单季度约 300 万行的 13F 明细并将其直接接入持仓图、机构拥挤度与知识图谱特征工程。数据集总览两类定位文件DatasetFilingUniverseScriptLoader(s)Institutional holdings13FCurated 10 managers (per-cik) 或 full universe (bulk)13f_download.pyload_institutional_holdings_13f、load_13f_stock_features、load_13f_edges、load_13f_bulk_holdingsInsider transactionsForm 4User-chosen tickersform4_download.pyRaw XML — 直接用pathlib读取见 Ch4 NB 03两条链路的数据全部来自 SEC EDGAR美国证券交易委员会公开数据属于公共领域。SEC 对 EDGAR 请求有10 req/sec 的速率限制并要求每个请求携带描述性的 User-Agent两个下载脚本都内置了限速与身份标识处理无需手工节流。13F 下载per-cik 精选机构模式默认命令行入口# per-cik默认10 家精选管理人每家最近 4 份 13F-HR uv run python data/equities/positioning/13f_download.py # 每家拉取最近 8 份 uv run python data/equities/positioning/13f_download.py --num-filings 8 # 只取前 3 家机构调试/试跑用 uv run python data/equities/positioning/13f_download.py --max-institutions 3精选机构名单与 CIK在 13f_download.py 中INSTITUTIONS常量硬编码了 10 家全球大型资产管理人的名称与 SEC CIK 编号机构CIKBerkshire Hathaway伯克希尔·哈撒韦0001067983Bridgewater Associates桥水0001350694Renaissance Technologies文艺复兴科技0001037389Two Sigma Investments0001450144DE Shaw0001009207AQR Capital0001167557Citadel Advisors0001423053Millennium Management千禧年0001273087Point72 Asset Management0001603466Tiger Global老虎环球0001167483--max-institutions N即从该名单头部截取前 N 家INSTITUTIONS[:max_institutions]适合快速连通性验证--num-filings N控制每家机构拉取的最近 13F-HR 数量默认 4约一整年的季度持仓。底层抓取链路源码级per-cik 模式的完整调用链如下get_recent_13f_filings(cik, num_filings)—— 请求 SEC JSON 提交接口https://data.sec.gov/submissions/CIK{cik}.json在filings.recent中筛选form 13F-HR收集 accession_number、report_date、filing_date 等元数据fetch_13f_xml_root(cik, accession)—— 按 accession 构造 EDGAR 归档目录 URL先取index.json定位归档内 XML 信息表跳过primary_doc.xml再拉取并解析 XMLparse_13f_holdings(cik, accession)—— 在http://www.sec.gov/edgar/document/thirteenf/informationtable命名空间下遍历infoTable提取nameOfIssuer、cusip、value、shrsOrPrnAmt/sshPrnamt、putCall字段组装为规范行汇总为 Polars DataFrame 后调用build_features_and_matrix产出派生工件见下文派生工件小节。全程每次请求之间time.sleep(RATE_LIMIT_SECONDS)RATE_LIMIT_SECONDS 0.1即约 10 req/sec 上限请求头固定为{User-Agent: ML4T Book stefanml4t.io}。13F 下载bulk 全市场季度模式当需要全市场粒度而不是 10 家精选机构时切换到 bulk 模式直接下载 SEC 官方预打包的季度数据集——单个 zip 约 80 MB包含该 3 个月窗口内所有 13F 申报约 5K 家申报人、每季度约 300 万行持仓# 单个季度 uv run python data/equities/positioning/13f_download.py --mode bulk --quarters 2024Q3 # 多个季度逗号分隔SEC 官方标签 uv run python data/equities/positioning/13f_download.py --mode bulk --quarters 2024Q2,2024Q3季度标签的 SEC 语义重要_bulk_zip_url13f_download.py揭示了 SEC 的一个关键命名约定SEC 用申报文件窗口filing-date window而非报告季度来标注数据包Q1 当年 3 月 1 日 – 5 月 31 日Q2 当年 6 月 1 日 – 8 月 31 日Q3 当年 9 月 1 日 – 11 月 30 日Q4 当年 12 月 1 日 – 次年 2 月末跨年需处理闰年标签会被校验正则^(\d{4})Q([1-4])$不合法会在下载前报错避免长耗时下载后才暴露问题。zip 内包含INFOTABLE.tsv、COVERPAGE.tsv、SUBMISSION.tsv三张表_normalize_bulk_to_canonical以 ACCESSION_NUMBER 为键内连接三表并把SUBMISSION中的DD-MON-YYYY大写日期解析为真实日期最终规整到与 per-cik 完全一致的规范 schema。zip 会被缓存为bulk_13f.zip重复运行直接复用缓存。下载器的关键工程机制规范 schema两种模式共享同一列结构无论 per-cik 还是 bulk最终都产出 10 列规范结构cik, accession_no, issuer, cusip, value_thousands, shares, put_call, report_date, filing_date, company_name其中report_date为季度末持仓基准日filing_date为申报公开日——两个 SEC 日期都被完整保留这正是点位point-in-time分析的基石。put_call保留 SEC 的安全类型标记消费方据此把多头股票行与期权行区分开。未完整申报季度的防偏差保护13F 申报截止期为季度结束后 45 天因此下载窗口内往往只有部分机构先申报。_complete_report_dates13f_download.py只返回所有请求机构都已申报的报告日并保证图季度与对比季度都来自该列表——否则晚申报者会被误读为季度间的集体清仓产生虚假的持仓变化信号。覆盖率统计基于全部披露行含仅披露期权的机构而非仅多头股票行。2023 年美元换算口径保护SEC 于 2023-01-03 将 13F 市值单位从千美元切换为整美元。_reject_pre_2023_reporting_units13f_download.py会硬性拒绝覆盖到该日期之前的窗口生产者虽保留历史列名value_thousands但派生特征统一以*_usd命名仅对切换后的申报成立。混合两种口径会静默地相差 1000 倍因此下载器选择直接报错并提示缩小--num-filings。输出路径解析优先级两个脚本都通过resolve_data_dirutils/downloading.py决定落盘根目录优先级为CLI--data-path参数 ML4T_DATA_PATH环境变量 仓库内data/目录。即默认写入$ML4T_DATA_PATH/equities/positioning/无配置时退回repo/data/equities/positioning/。派生工件边表、股票特征与共同持股矩阵per-cik 模式下载完原始持仓后build_features_and_matrix13f_download.py会进一步产出四件下游工件institution_stock_edges.parquet—— 机构 → 股票二部图边表字段含institution_idcik、stock_idcusip、weight_value、weight_shares、report_date、timestamp直接服务 Ch22/Ch23 的持仓图构建stock_features.parquet—— 股票级特征包括持有机构数n_inst_holders、机构持仓总额total_inst_value_usd、平均持仓avg_position_size_usd、持仓离散度position_cv、机构覆盖率inst_coverage_pct、所有权集中度ownership_hhi持仓占比平方和以及跨季度的inst_value_change_usd与inst_pct_change仅当存在可对比的完整季度时计算否则变化额置 0、变化率置空以保持 schema 稳定coownership_matrix.npy—— 股票 × 股票共同持股相似度矩阵先构造机构 × 股票的持仓权重矩阵并做行归一化再计算ownership_norm.T ownership_norm并按对角线归一化得到余弦相似度形式的重叠持仓度量coownership_stocks.txt—— 上述矩阵行列对应的 CUSIP 清单。此外工件上的timestamp取自该季度所有申报的 filing_date 最大值——即最后一个申报公开后才视为数据可用杜绝把早申报者的时间戳当作整季度可用性的前视偏差lookahead。Form 4 内幕交易下载Form 4 要求内幕人士在交易发生后2 个工作日内申报XML 体积小包含发行人、申报人及若干交易行是检测知情交易活动的第一类另类数据集。下载脚本面向用户自选 ticker# 单只股票最近 20 份 uv run python data/equities/positioning/form4_download.py --ticker TSLA --count 20 # 多只股票每只 10 份 uv run python data/equities/positioning/form4_download.py --ticker TSLA,AAPL,MSFT --count 10 # 该股票全部 Form 4--count 0 表示不限量 uv run python data/equities/positioning/form4_download.py --ticker TSLA --count 0前置条件EDGAR_IDENTITY 必须设置与 13F 脚本硬编码 UA 不同form4_download.py 使用edgartools库并要求在仓库根目录.env的EDGAR_IDENTITY行填入你自己的姓名与邮箱例如EDGAR_IDENTITYJane Doe janeexample.org。SEC 要求每个 EDGAR 请求携带真实 User-Agent 并将流量归属到其署名者占位邮箱会被封锁。该身份经set_identity(identity)注入未设置时脚本会明确报错并给出修复指引。注意utils的导入会顺带把.env加载进os.environ因此EDGAR_IDENTITY在运行时天然可用。断点续传与限速download_form4_for_ticker使用Company(symbol).get_filings(form4, amendmentsFalse)枚举申报按 accession去横线命名落盘为TICKER/accession.xml。已存在的文件直接跳过skipped 1重跑脚本天然具备断点续传能力每个新请求间隔默认--rate-limit 0.2秒满足 SEC 策略可用-v查看逐文件明细。落盘目录布局$ML4T_DATA_PATH/equities/positioning/ ├── 13f/ │ ├── institutional_holdings.parquet # per-cik原始持仓10 家精选管理人 │ ├── institution_stock_edges.parquet # per-cik机构 → 股票边表 │ ├── stock_features.parquet # per-cik股票级特征 │ ├── coownership_matrix.npy # per-cik股票 × 股票相似度 │ ├── coownership_stocks.txt # per-cik矩阵行列 CUSIP │ └── bulk/ │ └── {YYYYQN}/ │ ├── institutional_holdings.parquet # bulk全窗口全集约 300 万行 │ └── bulk_13f.zip # 缓存的 SEC 原始 zip └── form4/ └── {TICKER}/{accession}.xml # 原始 Form 4 内幕申报统一加载 API全部加载函数集中在 data/equities/loader.py以from data import ...方式导入from data import ( load_institutional_holdings_13f, load_13f_stock_features, load_13f_edges, load_13f_bulk_holdings, ) # 13F per-cik精选管理人 holdings load_institutional_holdings_13f(start_date2024-01-01) features load_13f_stock_features() edges load_13f_edges() # 13F bulk全市场单季度 q3_2024 load_13f_bulk_holdings(2024Q3)实现细节值得注意load_institutional_holdings_13f(start_date, end_date)在读取 parquet 后会对report_date/filing_date做字符串 → 日期转换若存储为字符串并按filing_date过滤区间四者均在文件缺失时抛出DataNotFoundError异常信息携带下载脚本路径与本文 README 的相对路径直接引导用户先运行下载器load_13f_bulk_holdings(quarter)与 per-cik 共享同一规范 schema只是覆盖全部约 5–7K 家申报人holdings 的 schema 同时保留report_date季度末持仓基准日与filing_date申报公开日这是所有点位类分析的前提。仓库内消费方Consumers这批数据被仓库多个章节直接消费形成完整的数据 → 特征 → 图/嵌入 → 策略链条Ch4 NB 0303_sec_form4_insider_transactions.py—— 用xml.etree.ElementTree直接解析form4/下的原始 XML演示纯文本解析流程无需中间转换层其parse_form4返回申报头、普通股交易行与被略去内容的结构化字典Ch4 NB 05—— 通过--mode bulk做全市场 13F 分析Ch10 NB 02—— 由 13F 持仓构造资产嵌入asset embeddingsCh22 NB 0707_institutional_holdings_graph.py—— 读取load_institutional_holdings_13f()、load_13f_edges()、load_13f_stock_features()构建机构持仓图与拥挤度信号并在文件末尾以assert_frame_equal校验规范边表/特征工件的一致性Ch23——09_knowledge_graph_features、05_institutional_holdings_kg、04_rag_comparison_benchmark三个 notebook 将 13F 持仓、共同持股矩阵作为知识图谱特征与 RAG 评测的数据底座。使用前提与快速上手环境仓库使用uv管理依赖脚本需在仓库根目录以uv run python data/equities/positioning/...形式执行Form 4 链路依赖edgartools由uv sync安装身份运行 Form 4 前先在仓库根目录.env中配置EDGAR_IDENTITY你的姓名 你的邮箱建议先跑--max-institutions 3 --num-filings 4验证连通性再扩展到 10 家或 bulk 全市场数据输出根目录遵循--data-pathML4T_DATA_PATH 仓库data/的优先级可通过环境变量统一管理装载失败时loader.py抛出的异常会精确指向下载脚本与本 README按提示执行即可恢复。延伸阅读数据加载器源码Positioning 段13F 下载器完整实现Form 4 下载器完整实现路径解析与通用下载工具权益数据区总览Ch4 Form 4 解析 notebook 与 Ch22 机构持仓图 notebook【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表