如何用 Python 构建实时 SEC 备案监控(不足 50 行)
发布: (2025年12月15日 GMT+8 00:41)
4 min read
原文: Dev.to
Source: Dev.to

有没有想过对冲基金是如何在你之前得知内部交易的?
他们并不是有超能力,只是拥有实时监控 SEC 文件的系统。当 Form 4 出现在 EDGAR 上的那一刻,他们就知道了。
为什么要监控 SEC 文件?
有三类文件会影响市场:
- 8‑K – 未预告的重大事件(CEO 辞职、宣布合并、提起诉讼)
- 10‑K / 10‑Q – 年度和季度财报
- Form 4 – 内部交易——高管买卖自己公司的股票
当一位 CEO 购买价值 200 万美元的自家公司股票时,这就是一个信号。
我们要构建的东西
一个 Python 脚本,能够:
- 每 5 分钟检查一次新文件
- 按你的自选列表(特定股票代码)过滤
- 将提醒打印到控制台(可以轻松扩展到 Slack、邮件等)
不需要爬虫。无需解析 HTML。也不必处理 EDGAR 的各种怪癖。
首先,获取免费 API 密钥(点此获取)。
代码
import requests
import time
from datetime import datetime
# Config
API_KEY = "your_api_key" # Free tier at earningsfeed.com
BASE_URL = "https://earningsfeed.com/api/v1"
WATCHLIST = ["AAPL", "TSLA", "NVDA", "MSFT", "GOOGL"]
CHECK_INTERVAL = 300 # 5 minutes
# Track what we've already seen
seen_filings = set()
def get_recent_filings():
"""Fetch recent SEC filings for watchlist tickers."""
headers = {"Authorization": f"Bearer {API_KEY}"}
filings = []
for ticker in WATCHLIST:
response = requests.get(
f"{BASE_URL}/filings",
headers=headers,
params={"ticker": ticker, "limit": 10}
)
if response.ok:
filings.extend(response.json().get("items", []))
return filings
def check_for_new_filings():
"""Check for new filings and alert on any we haven't seen."""
filings = get_recent_filings()
for filing in filings:
filing_id = filing.get("accessionNumber")
if filing_id and filing_id not in seen_filings:
seen_filings.add(filing_id)
alert(filing)
def alert(filing):
"""Print alert for new filing. Swap this for Slack/email/SMS."""
company = filing.get("companyName", "Unknown")
form_type = filing.get("formType", "???")
filed_at = filing.get("filedAt", "")
url = filing.get("url", "")
print(f"""
🚨 NEW FILING DETECTED
━━━━━━━━━━━━━━━━━━━━━
Company: {company}
Form: {form_type}
Filed: {filed_at}
Link: {url}
━━━━━━━━━━━━━━━━━━━━━
""")
def main():
print(f"👀 Monitoring {len(WATCHLIST)} tickers: {', '.join(WATCHLIST)}")
print(f"⏱️ Checking every {CHECK_INTERVAL // 60} minutes")
print("Press Ctrl+C to stop\\n")
# Initial check
check_for_new_filings()
while True:
time.sleep(CHECK_INTERVAL)
print(f"[{datetime.now().strftime('%H:%M:%S')}] Checking...")
check_for_new_filings()
if __name__ == "__main__":
main()
运行方式
pip install requests
python sec_monitor.py
示例输出
👀 Monitoring 5 tickers: AAPL, TSLA, NVDA, MSFT, GOOGL
⏱️ Checking every 5 minutes
Press Ctrl+C to stop
🚨 NEW FILING DETECTED
━━━━━━━━━━━━━━━━━━━━━
Company: NVIDIA Corp
Form: 4
Filed: 2024-12-14T16:32:00.000Z
Link: https://www.sec.gov/Archives/edgar/data/1045810/...
━━━━━━━━━━━━━━━━━━━━━
让它真正有用
alert() 函数是你自定义通知方式的入口。
Slack 通知
def alert(filing):
requests.post(SLACK_WEBHOOK, json={
"text": f"🚨 {filing['companyName']} just filed a {filing['formType']}"
})
按表单类型过滤(仅内部交易)
if filing.get("formType") == "4":
alert(filing)
只关注重大事件
# In get_recent_filings(), add forms filter
params={"ticker": ticker, "forms": "8-K,4", "limit": 10}
为什么我会做这个
全披露:我创建 Earnings Feed 是因为对现有方案感到厌倦。
EDGAR 的直接 API 有速率限制,容易被封锁。大多数商业 API 每月要几百美元。我想要一个免费层且真的能用的服务。
该数据库覆盖了所有公开公司向 SEC 提交的文件:每一份 10‑K、每一份 Form 4、每一份 8‑K。
如果你在金融科技领域构建产品,这可能会帮你省去不少麻烦。
你会怎么用?
我很好奇你会如何利用实时 SEC 数据:
- 基于内部买入的交易信号?
- 当竞争对手提交 8‑K 时的提醒?
- 通过 13F 跟踪机构持股变动?
欢迎留言!