edgar
美国证券交易委员会(SEC)设计了一种电子数据收集、分析和检索系统(Electronic Data Gathering,Analysis and Retrieval(EDGAR) System),以支持上市公司、证券公司以及个人根据 SEC 证券法规的要求提交各种公共文件。并且 SEC 还提供了面向公共传输的服务(The EDGAR Public Dissemination Service(PDS))。
格式要求
edgar 中要求公共文件必须以 ASCII/SGML 文本文件,即使是二进制文件也必须使用 UUencoded 编码。所有的内容以标题(Header)串联文档(Concatenated Documents)的组成,其中串联文档可以包含 ASCII/SGML、HTML、XML、XBRL 以及有 UUencoded 编码的 PDF、JPG 和 GIF 格式组成。
Tips
Rendered XBRL 文档也可以包含 HTML、XML、CSS、JS、UUencoded 编码的 PNG、XLSX 和 ZIP。
格式长度
ASCII/SGML 文档每行长度不超过 80 个字符,但是文档中的 <TABLE>
标识允许 132 个字符的宽度限制。
HTML、XML 和 XBRL 文档文本没有固定的宽度限制。
UUencoded 编码的二进制文件的文本宽度是 64 字符。
forms-index/type
公共文件包含非常多的类型,例如年报、月报、财务分析等等,他们以不同的类型呈现,不同类型的内容以及解析方式也完全不同:
文件访问
edgar 能够通过 CIK 来实现对文件的索引,CIK 是公司向 SEC 提交组册文件时,EDGAR 为每一个申请人分配一个唯一的数字标识符,成为中央索引文件(Central Index Key),注意他们不会被回收。
可以从 https://www.sec.gov/Archives/edgar/cik-lookup-data.txt 获取目前所有的 CIK,他包含基金和个人并且是历史累积的。因此在公司或者基金名称更改的情况下,给定的 CIK 可能与多个名称相互关联。同样它也包含一些退市的不在向 SEC 报备的公司。同样也提供了最新的 CIK、股票代码和交易所对应的文件:
- https://www.sec.gov/files/company_tickers.json : 股票代码(ticker), CIK 和公司名称
- https://www.sec.gov/files/company_tickers_exchange.json: 公司名称,CIK 股票代码(ticker) 股票交易所
- https://www.sec.gov/files/company_tickers_mf.json : 基金 CIK、seriesID(基金系列,代表一组具有相同投资目标和策略但可能不同费用结构的基金)、classID(基金内部的不同份额类别,类别的不同可能会有不同的销售负担、管理费、分配权益等)、symbol
Tips
比较不好理解的是基金公司的: 以贝莱德基金公司(BlackRock)为例,它是世界上最大的资产管理公司之一。在美国,贝莱德的基金产品可能会有多个 seriesId,每个 seriesId 代表一个基金系列,这些系列可能包括不同的投资策略或资产类别。例如,贝莱德可能有一个专注于美国股票的基金系列,另一个可能专注于国际债券。在每个基金系列中,可能会有不同的 classId,这些 classId 代表基金的不同份额类别。例如,一个基金系列可能有A类份额、B类份额和C类份额,每种份额的销售负担、管理费用和分配权益可能不同。投资者可以根据自己的投资目标和费用偏好选择合适的份额类别。
索引文件
有两个位置提供了 1994 年三季度至今的所有公开文件的索引:
- http://www.sec.gov/Archives/edgar/daily-index/: 当年每日的索引文件
- http://www.sec.gov/Archives/edgar/full-index/: 将每日的索引文件合并为季度
他们的每个目录包含四种类型的索引:
company.idx
: 按照公司名称排序form.idx
: 按照表单类型排序master.idx
: 按照 CIK 编号排序XBRL.idx
: 包含 ZBRL(可扩展商业报告语言,特定格式报告财务数据) 财务文件的提交文件,按照 CIK 编码排序
Tips
还有一个比较特殊的 crawler.idx 文件,保存了原始网页。
每个索引文件中列出了每个申请的以下信息:
company name
: 公司名称form type
: 报表类型central index key
: 即 CIKdata filed
: 提交日期filename
: 文件名,包括文件夹路径
而我们要下载的具体文件就是通过 filename 来获取。
Tips
推荐抓取 master.idx 因为他是用 | 分隔的,比较好解析。
API
https://www.sec.gov/edgar/sec-api-documentation 介绍了目前提供的 API。
该 API 目前只包含上市公司的提交历史记录和财务报表的 XBRL 数据。他提供了一个全量的 JSON 下载:
- https://www.sec.gov/Archives/edgar/daily-index/xbrl/companyfacts.zip: XBRL 数据
- https://www.sec.gov/Archives/edgar/daily-index/bulkdata/submissions.zip: 所有提交历史信息
下载所有数据
还有一个下载所有数据的地方:
- https://www.sec.gov/Archives/edgar/Feed/: 每日提交存档,整个比较好就是按照单个文件保存的
- https://www.sec.gov/Archives/edgar/Oldloads/: 这个是将每日提交存档串接为一个文件
这里的文件比较多,每个目录都隐式提供了一个 index.xml/index.json
文件来提供列表,例如:
- https://www.sec.gov/Archives/edgar/Oldloads/index.json
- https://www.sec.gov/Archives/edgar/Oldloads/2000/index.json
- https://www.sec.gov/Archives/edgar/Feed/2000/QTR1/index.json
解析数据
https://www.sec.gov/files/edgar/pds_dissemination_spec.pdf 中详细介绍了这些文件是应该如何解析的。
整个流程
- 首先我们从中下载所有的数据,推荐使用每日提交存档。
- 目前使用来下载, aria2c 多线程或出现问题, curl 没办法很方便的批量,注意下载需要指定 user_agent 和 Host: www.sec.gov
wget -i ../tar_gz_urls_last.csv --header='Host: www.sec.gov' --header='User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Safari/605.1.15'
- 下载并解析,推荐下载 master.idx
- 匹配两者查看下载的数据是否有缺失,具体如何匹配需要确认
- 最终在通过索引文件来补齐缺少的内容