Python으로 실시간 SEC 파일링 모니터 만들기 (50줄 이하)
Source: Dev.to

헤지펀드가 여러분보다 먼저 내부자 거래를 알게 되는 이유가 궁금하신가요?
그들은 초능력이 있는 것이 아니라 SEC 서류를 실시간으로 모니터링하는 시스템을 가지고 있기 때문입니다. Form 4가 EDGAR에 올라오는 순간을 포착합니다.
왜 SEC 서류를 모니터링해야 할까?
시장을 움직이는 서류는 세 가지입니다:
- 8‑K – 비정기적인 주요 사건 (CEO 사임, 합병 발표, 소송 제기)
- 10‑K / 10‑Q – 연간·분기 재무 보고서
- Form 4 – 내부자 거래 – 임원이 자신의 주식을 매수·매도할 때
예를 들어 CEO가 자기 회사 주식을 200만 달러어치 매수한다면, 이는 강력한 신호가 됩니다.
우리가 만들고자 하는 것
다음 기능을 갖춘 파이썬 스크립트:
- 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 # 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를 통해 기관 투자자 보유 비중 변화를 추적?
댓글로 알려 주세요!