美国上市公司报告
美国上市公司必须向美国证券交易委员会(SEC)提交几种定期报告,SEC 会将上市公司提交的所有公开文件发布到https://www.sec.gov/edgar网站上,并提供了 EDGAR(电子数据收集、分析和检索系统)来供公众访问。
文件类型
可以在https://www.sec.gov/forms中查看所有提供的文件类型,其中比较重要的包括:
- 10-K报告:这是一份详细的年度报告,包含公司的财务状况、运营结果、风险因素等信息。它提供了公司一年的全面概述,并且包含经过审计的财务报表
- 10-Q报告:这是一份季度报告,包含未经审计的财务数据和公司的运营情况。它提供了公司每个季度的财务表现
- 8-K报告:这是一份在特定事件发生时需要立即提交的报告,如重大财务变动、人事变动或其他对投资者有重大影响的事件
此外,还有其他一些报告,如S-1报告(IPO招股说明书),S-4报告(发行新股的公告),以及DEF 14A(代理人报告)。
抓取 EDGAR 数据
https://www.sec.gov/os/accessing-edgar-data详细介绍了应当如何批量访问 EDGAR 中的数据。
数据时效性
数据的时效性为 1994年第三季度至今。
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
比较不好理解的是基金公司的: 以贝莱德基金公司(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 中详细介绍了这些文件是应该如何解析的。
整个流程
- 首先我们从上面[[#下载所有数据]]中下载所有的数据,推荐使用每日提交存档
- 目前使用 wget 来下载,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
- 匹配两者查看下载的数据是否有缺失,具体如何匹配需要确认
- 最终在通过索引文件来补齐缺少的内容