Vibe-Trading SEC EDGAR 文件分析实战:从 10-K 到 Form 4 的美股基本面与事件信号框架
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
导读
本文基于 Vibe-Trading 项目内建的edgar-sec-filings方法论技能,系统讲解如何对美股上市公司的 SEC EDGAR 公开文件进行分析——覆盖年报(10-K)、季报(10-Q)、重大事件披露(8-K)、委托书(DEF 14A)、内幕交易(Form 4)与机构持仓(13F/SC 13D-G)。你将掌握一套可直接落地的分析框架:文件类型与信号价值映射、三大报表解读要点、MD&A 语气识别、风险因素变化检测、8-K 事件分类规则、内幕交易评分、13F 聪明钱追踪,以及最终的综合信号评分模板;同时结合 Vibe-Trading 仓库中的get_sec_filings工具与sec_edgar_client传输层实现,了解数据是如何在免 API Key、受 IP 限速保护的条件下被可靠获取的。
技能定位与数据获取分工
在 Vibe-Trading 中,SEC 相关能力被拆分为两层,理解这一分工有助于正确使用:
edgar-sec-filings(本文主体):方法论层,回答“拿到文件后怎么读”——提取财务数据、风险信号与投资相关信息;sec-edgar(fetch 技能):获取层,回答“数据从哪来、怎么拿”——封装 ticker→CIK 解析、文件索引、XBRL 财务序列三个数据通道。
数据检索通过read_url工具访问 EDGAR URL,或通过yfinance的 Ticker 对象获取结构化财务数据;而项目内置的get_sec_filings工具(实现见 sec_filings_tool.py)则把“拉取文件列表 + 拉取单一 us-gaap 指标序列”合并为一次调用,由底层冻结的限速客户端保证不会以未节流的方式访问sec.gov。
文件类型与投资相关性
| 文件 | 频率 | 核心内容 | 信号价值 |
|---|---|---|---|
| 10-K | 年度 | 全年财务、风险因素、MD&A、分部数据 | 全面的基本面视角 |
| 10-Q | 季度 | 季度财务、中期 MD&A、法律更新 | 趋势确认 / 拐点识别 |
| 8-K | 事件驱动 | 重大事件:并购、CEO 变更、重述、业绩指引 | 催化剂 / 风险触发器 |
| DEF 14A | 年度(委托书) | 高管薪酬、董事会构成、股东提案 | 治理质量信号 |
| Form 4 | 2 个工作日内 | 内幕人买入 / 卖出 | 内幕人信心信号 |
| 13F | 季度 | AUM 超 1 亿美元的机构持仓 | 聪明钱仓位动向 |
| SC 13D/G | 事件驱动 | 持股超 5% 的披露 | 激进投资者 / 战略投资者信号 |
EDGAR 数据访问
直接 EDGAR URL
# 公司文件检索 # https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={ticker}&type={filing_type} # 示例:Apple 的 10-K 文件列表 url = "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=AAPL&type=10-K&dateb=&owner=include&count=10" # EDGAR 全文检索(EFTS) # https://efts.sec.gov/LATEST/search-index?q={query}&dateRange=custom&startdt={start}&enddt={end}通过 yfinance(结构化数据)
import yfinance as yf ticker = yf.Ticker("AAPL") # 财务报表(源自 10-K/10-Q) income = ticker.financials # 年度利润表 income_q = ticker.quarterly_financials # 季度 balance = ticker.balance_sheet # 资产负债表 cashflow = ticker.cashflow # 现金流量表 # 内幕交易(源自 Form 4) insider = ticker.insider_transactions # 机构持仓(源自 13F) institutions = ticker.institutional_holders major = ticker.major_holders通过内置get_sec_filings工具(推荐)
Vibe-Trading 的SecFilingsTool(模块 sec_filings_tool.py)将 EDGAR 访问包装在BaseTool契约之后。一次调用可以回答两个问题:列出近期文件(可按form过滤),以及(当给出metric时)返回某一 us-gaap 概念的已报告时间序列。完整契约见 get_sec_filings_tool.md。
参数说明:
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
ticker | string | 是 | — | 美股代码,不区分大小写(AAPL、msft),经 SEC company-tickers 表解析为 CIK |
form | string | 否 | 全部 | SEC 表单类型过滤,不区分大小写(10-K、10-Q、8-K) |
metric | string | 否 | — | XBRLus-gaap概念名(Revenues、NetIncomeLoss、Assets),大小写敏感(taxonomy 元素名精确匹配) |
limit | integer | 否 | 20 | 最多返回的文件 / 指标点数,被钳制在1..40(源码常量_MAX_LIMIT = 40、_DEFAULT_LIMIT = 20) |
调用示例:
{ "ticker": "AAPL", "form": "10-K", "limit": 5 } { "ticker": "MSFT", "metric": "Revenues", "limit": 8 } { "ticker": "TSLA", "form": "8-K", "limit": 10 } { "ticker": "NVDA", "metric": "NetIncomeLoss", "limit": 12 }成功信封结构(简化):
{ "ok": true, "market": "US", "source": "sec_edgar", "data": { "ticker": "AAPL", "cik": "0000320193", "filings": [ { "form": "10-K", "accession_number": "0000320193-23-000106", "filing_date": "2023-11-03", "report_date": "2023-09-30", "primary_document": "aapl-20230930.htm", "document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019323000106/aapl-20230930.htm" } ], "metric": { "concept": "Revenues", "unit": "USD", "points": [{ "end": "2023-09-30", "val": 383285000000.0, "fiscal_year": 2023, "fiscal_period": "FY", "form": "10-K" }] } } }失败时返回错误信封,例如{ "ok": false, "error": "ticker 'XYZ' not found in the SEC company table (US only)" }。filings按 SEC 返回顺序保持最新优先,分页字段paging.next_offset支持继续翻页(对应 test_sec_filings_tool.py 中验证的分页行为)。
底层传输:sec_edgar_client
当需要工具未暴露的原始字段(如公司地址、某概念的全部 units)时,可直接调用传输层函数(见 sec_edgar_client.md):
from backtest.loaders.sec_edgar_client import cik_for, get_submissions, get_company_facts cik = cik_for("AAPL") # "0000320193",或 None(不在 SEC 表中) submissions = get_submissions(cik) # 近期文件索引 + 公司元数据 facts = get_company_facts(cik) # 全部已报告 XBRL 概念仓库里还提供了一个可运行的端到端示例脚本 sec_filings_example.py,展示 ticker → CIK → 近期 10-K 列表 → 单一指标序列的完整链路,可在agent/目录下以python src/skills/sec-edgar/scripts/sec_filings_example.py运行。
关键实现细节(重要):
- CIK 填充规则:submissions 与 companyfacts 端点要求 10 位零填充 CIK(
320193→"0000320193");而主文档 URL 使用未填充形式。示例:"CIK0000320193"也会被归一化为0000320193。 - 主文档 URL 拼装:
https://www.sec.gov/Archives/edgar/data/{cik_unpadded}/{accession_no_dashes}/{primary_document},其中 accession 连字符被去除(0000320193-23-000106→000032019323000106)。 - 限速与 User-Agent:所有请求经由
backtest.loaders._http的"sec"主机桶节流,每次请求间隔约 0.12 秒(远低于 SEC 约 10 req/s 上限),并携带合规的联系人 User-Agent。两个环境变量可覆盖:VIBE_TRADING_SEC_UA(替换 UA)与VIBE_TRADING_SEC_MIN_INTERVAL(提高间隔,不会低于 0.12s 下限)。切勿绕过客户端用裸requests循环突发请求,否则会触发 SEC 的临时 IP 封禁(详见 endpoints_and_limits.md)。 - 仅限美国市场:EDGAR 不覆盖 A 股、港股等非美市场;非美代码不会解析出 CIK。从源码结构看,
sec_edgar_client是纯 REST 客户端而非DataLoaderProtocol,未注册为回测source,EDGAR 只喂给get_sec_filings工具层。
10-K / 10-Q 分析框架
一、财务报表深度拆解
利润表关注点:
- 营收增速:同比与环比加速 / 减速
- 毛利率趋势:扩张(定价权)vs 压缩(成本压力)
- 经营杠杆:SG&A 占营收比下降 = 正的经营杠杆
- 研发强度:R&D / 营收与同业对比
- 非经常性项目:重组费用、减值、一次性收益
资产负债表关注点:
- 现金及等价物 vs 总债务:净现金 / 净债务头寸
- 流动比率与速动比率:流动性健康度
- 商誉 / 无形资产占总资产比:并购驱动型增长风险
- 存货天数(制造业 / 零售业):上升 = 需求走弱信号
- 应收账款天数:上升 = 回款风险或渠道压货
现金流量表关注点:
- FCF = 经营现金流 − 资本开支:真实现金创造能力
- FCF 转化率 = FCF / 净利润:>80% 代表高盈利质量
- 资本开支强度 = CapEx / 营收:上升 = 增长投入或维护负担
- 股权激励(SBC):加回以还原真实现金盈利
- 回购 vs 分红:资本回报策略信号
关于指标期间的一个坑(源码级佐证):SEC 的 XBRLcompanyfacts会在同一end日期下同时上报“真实季度”与“年初至今”两类期间帧(同一fy/fp/form/accn)。仅凭end识别期间,会把九个月的数字与同日结束的季度混淆——在真实 AAPL 营收数据上曾出现 81 个 key 中 36 个发生碰撞。Vibe-Trading 的 sec_frames.py 用(start, end)跨度作为期间唯一标识,并按天数窗口分类:季度帧约 60–120 天、年度帧约 330–380 天,其余持续时间归类为ytd。_parse_metric还会对同一跨度去重且保留最新申报版本,确保重述(restatement)后显示的是最新数字(对应回归测试 test_sec_period_frames.py)。当你在分析中用Revenues、NetIncomeLoss这类指标时,务必留意period_type与period_days字段,避免把 QTD 当成季度值。
二、MD&A(管理层讨论与分析)
MD&A 是文件中最具定性、最前向的部分。
关键提取目标:
- 营收驱动:哪些分部 / 地区在增长,哪些在下滑
- 毛利评论:管理层对毛利率变化的解释
- 前瞻指引措辞:“expect”“anticipate”“believe”——语气转变检测
- 风险因素变化:与上次文件对比;新增风险 = 实质性变化
- 流动性与资本资源:债务到期时间表、信贷额度可用性
语气分析信号:
# 简化语气打分 positive_words = ["growth", "improvement", "strong", "exceeded", "momentum", "opportunity"] negative_words = ["challenging", "decline", "uncertainty", "headwind", "pressure", "risk"] cautious_words = ["moderate", "cautious", "prudent", "measured", "selective"] # 与上次文件对比词频变化 # 负面词数上升 = 展望恶化 # 谨慎词上升 = 管理层在 hedging三、风险因素分析
风险因素变化检测(10-K vs 上期 10-K):
| 变化类型 | 信号 | 行动 |
|---|---|---|
| 新增风险因素 | 识别出实质性新风险 | 深挖该具体风险 |
| 移除风险因素 | 风险已解决或视为不重大 | 若是真实解决则为正面信号 |
| 措辞加剧 | 风险升级 | 审视敞口与对冲 |
| 排序变化(上移) | 风险优先级提升 | 评估潜在影响幅度 |
美股常见风险类别:
- 监管 / 法律风险(反垄断、FDA、专利到期)
- 客户集中度(单一客户营收超 10% 必须披露)
- 地域集中度(中国敞口、新兴市场风险)
- 技术颠覆风险
- 网络安全风险(SEC 新规:重大网络事件须在 8-K 中披露)
- 气候 / ESG 风险(要求日益增加)
8-K 事件分析
重大事件分类
| 事件类型 | 8-K 条款 | 典型价格影响 | 时间敏感性 |
|---|---|---|---|
| 业绩预告发布 | 2.02 | 高 | 立即 |
| 并购公告 | 1.01 | 极高 | 立即 |
| CEO / CFO 离职 | 5.02 | 中高 | 当日 |
| 财务重述 | 4.02 | 极高(负面) | 立即 |
| 业绩指引修订 | 7.01/8.01 | 高 | 当日 |
| 信贷协议变更 | 1.01 | 低-中 | 监控 |
| 股票回购计划 | 8.01 | 低正面 | 背景信号 |
| 股息变更 | 8.01 | 中 | 当日 |
8-K 信号规则
# 高优先级 8-K 事件 if item == "4.02": # 财务重述 signal = "strong_negative" # 重述摧毁信任 action = "review_all_prior_financials" elif item == "2.02" and surprise_direction == "negative": signal = "negative" # 业绩预告不及预期 elif item == "5.02" and role in ["CEO", "CFO"]: signal = "uncertainty" # C 级高管离职 = 治理风险 elif item == "1.01" and event_type == "acquisition": signal = "evaluate" # 并购:收购方通常 -2% 至 -5%,标的 +20% 至 +40%内幕交易分析(Form 4)
信号框架
| 模式 | 信号 | 置信度 |
|---|---|---|
| 集群买入:30 天内 3+ 内幕人买入 | 强看多 | 高 |
| CEO/CFO 大额公开市场买入(>$500K) | 看多 | 高 |
| 股价下跌 >20% 后内幕人买入 | 逆势看多 | 中高 |
| 历史高位集群卖出 | 中性至轻度看空 | 低(可能是预先规划) |
| CFO 卖出超 50% 持仓 | 看空 | 中 |
| 10b5-1 计划卖出 | 中性 | 低(预先编程) |
关键区分:
- 公开市场买入(信息量最大):内幕人自掏腰包
- 10b5-1 计划卖出(信息量最小):预先编程、监管安全港
- 期权行权 + 立即卖出:常为税务驱动,信号价值低
- 赠予交易:做信号时可忽略
# 内幕信号打分 def score_insider_activity(transactions, lookback_days=90): buys = [t for t in transactions if t.type == "Purchase" and t.days_ago <= lookback_days] sells = [t for t in transactions if t.type == "Sale" and t.days_ago <= lookback_days] buy_value = sum(t.value for t in buys) sell_value = sum(t.value for t in sells) # 过滤掉 10b5-1 计划卖出 organic_sells = [s for s in sells if not s.is_10b5_1] if len(buys) >= 3 and buy_value > 1_000_000: return "strong_bullish" elif buy_value > sell_value * 2: return "bullish" elif len(organic_sells) >= 3 and sell_value > 5_000_000: return "bearish_watch" else: return "neutral"13F 机构持仓分析
聪明钱追踪
关键指标:
- 机构持有人数:上升 = 持仓基础扩大
- 前 10 大持有人集中度:>50% = 集中,易受单基金赎回冲击
- 本季新建仓:聪明钱入场
- 本季清仓:聪明钱离场
- 激进投资者持仓(SC 13D):潜在公司行动催化剂
机构质量分级:
- Tier 1 — 信念信号:Berkshire、Baupost、Greenlight、Pershing Square、Tiger Global
- Tier 2 — 趋势信号:BlackRock、Vanguard、Fidelity(资金流驱动,选股信号较弱)
- Tier 3 — 量化型:Renaissance、Two Sigma、Citadel(高换手,方向性信号较弱)
# 13F 变化检测 def analyze_13f_changes(current_holders, prior_holders): new_positions = current_holders - prior_holders # 新进 closed_positions = prior_holders - current_holders # 退出 # 标记:多个 Tier 1 基金同时建仓 tier1_new = [h for h in new_positions if h.tier == 1] if len(tier1_new) >= 2: signal = "strong_smart_money_accumulation" return signal综合文件信号(Composite Filing Signal)
评分模板
filing_score = { "financial_health": 0, # -2 至 +2:基于 10-K/10-Q 财务 "management_tone": 0, # -2 至 +2:MD&A 情绪变化 "risk_factor_change": 0, # -2 至 +2:新增风险 vs 已解决风险 "insider_activity": 0, # -2 至 +2:内幕净买入/卖出 "institutional_flow": 0, # -2 至 +2:13F 仓位变化 "event_catalyst": 0, # -2 至 +2:近期 8-K 影响 } # 总分区间:-12 至 +12 # > +6:强基本面看多 # +2 至 +6:轻度看多 # -2 至 +2:中性 # < -2:基本面谨慎输出格式模板
完成分析后,可参照以下结构化模板产出可复用的分析报告(该格式本身即适合作为 Agent 的后续处理输入):
## SEC Filing Analysis — [Ticker] ### Filing Summary - **Latest 10-K/10-Q**: [date], [period] - **Recent 8-K events**: [list material events] - **Insider activity (90d)**: [net buy/sell summary] ### Financial Health - Revenue trend: [accelerating / stable / decelerating] - Margin trajectory: [expanding / stable / compressing] - FCF conversion: [strong / adequate / weak] - Balance sheet: [net cash / moderate leverage / high leverage] ### MD&A Tone Shift - vs prior filing: [more optimistic / unchanged / more cautious] - Key language changes: [specific quotes or paraphrases] ### Risk Factor Changes - New risks: [list any new risk factors added] - Intensified risks: [list risks with stronger language] - Resolved risks: [list removed risk factors] ### Insider & Institutional Signals - Insider net activity: [cluster buy / neutral / cluster sell] - Institutional positioning: [accumulation / stable / distribution] ### Composite Signal | Dimension | Score (-2~+2) | Basis | |-----------|---------------|-------| | Financial health | +1 | Revenue accelerating, margins stable | | Management tone | -1 | More cautious language in MD&A | | ... | ... | ... | ### Investment Implication - Direction: [bullish / bearish / neutral] - Confidence: [high / medium / low] - Key monitoring: [next earnings date, upcoming 8-K triggers]使用注意事项
- 免费免 Key,但须守规矩:EDGAR 文件公开免费,无需 API Key;SEC 按源 IP 限速约 10 请求/秒,并要求请求头携带描述性 User-Agent。Vibe-Trading 内置客户端已默认合规,并支持
VIBE_TRADING_SEC_UA覆盖。 - 滞后性(look-back):10-K/10-Q 数据是回溯性的,需结合前向指引与分析师预期才能形成完整视角。
- Form 4 报告滞后:内幕交易数据有 2 个工作日报告延迟;实时内幕数据需付费服务。
- 13F 报告滞后:13F 在季末后 45 天才披露,仓位可能已发生变化。
- 范围限制:本框架仅覆盖美国市场,EDGAR 不提供非美覆盖。
- 研究用途声明:本框架仅用于研究目的,不构成投资建议。配套方法论技能的原文位于 edgar-sec-filings/SKILL.md,获取层细节见 sec-edgar/SKILL.md,两者配合使用可在 Vibe-Trading 的 Agent 工作流中完成“取数 → 解读 → 信号评分”的完整闭环。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考