Skip to content

nsj02/yahoo-finance-mcp

Β 
Β 

Repository files navigation

Yahoo Finance API & Database System

πŸ’° 이 ν”„λ‘œμ νŠΈλŠ” μ•Όν›„ νŒŒμ΄λ‚ΈμŠ€ 데이터λ₯Ό ν™œμš©ν•œ 두 κ°€μ§€ μ‹œμŠ€ν…œμ„ μ œκ³΅ν•©λ‹ˆλ‹€:

  1. FastAPI μ„œλ²„: μ‹€μ‹œκ°„ μ•Όν›„ νŒŒμ΄λ‚ΈμŠ€ 데이터 API
  2. λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ: ν•œκ΅­ 주식 데이터 μˆ˜μ§‘ 및 μ €μž₯ μ‹œμŠ€ν…œ

πŸš€ μ£Όμš” κΈ°λŠ₯

FastAPI μ„œλ²„ (server.py)

  • ⚑ κ³ μ„±λŠ₯: FastAPI 기반 비동기 처리
  • πŸ“Š 포괄적 금육 데이터:
    • κ³Όκ±° μ£Όκ°€ 데이터 (OHLCV)
    • κΈ°μ—… 정보 및 μ§€ν‘œ
    • μž¬λ¬΄μ œν‘œ (μ†μ΅κ³„μ‚°μ„œ, λŒ€μ°¨λŒ€μ‘°ν‘œ, ν˜„κΈˆνλ¦„ν‘œ)
    • μ£Όμ£Ό 정보 및 μ• λ„λ¦¬μŠ€νŠΈ μΆ”μ²œ
  • πŸ”’ μ•ˆμ „: 데이터 검증 및 였λ₯˜ 처리
  • πŸ“ μžλ™ λ¬Έμ„œν™”: /docsμ—μ„œ μΈν„°λž™ν‹°λΈŒ API λ¬Έμ„œ

λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ

  • πŸ‡°πŸ‡· ν•œκ΅­ 주식 νŠΉν™”: KOSPI/KOSDAQ μ „ μ’…λͺ© 지원
  • πŸ“ˆ 기술적 μ§€ν‘œ: RSI, MACD, λ³Όλ¦°μ € λ°΄λ“œ λ“± μžλ™ 계산
  • πŸ“Š μ‹œμž₯ 톡계: μƒμŠΉ/ν•˜λ½ μ’…λͺ© 수, κ±°λž˜λŸ‰/κ±°λž˜λŒ€κΈˆ
  • πŸ”„ μžλ™ μ—…λ°μ΄νŠΈ: 일일 데이터 μžλ™ μˆ˜μ§‘

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

yahoo-finance-mcp/
β”œβ”€β”€ server.py              # FastAPI μ„œλ²„ (μ‹€μ‹œκ°„ 데이터)
β”œβ”€β”€ models.py              # λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈ μ •μ˜
β”œβ”€β”€ data_importer.py       # 데이터 μˆ˜μ§‘ 및 μ €μž₯ 둜직
β”œβ”€β”€ run_update.py          # DB μ—…λ°μ΄νŠΈ 메인 슀크립트
β”œβ”€β”€ test_db.py            # λΉ λ₯Έ ν…ŒμŠ€νŠΈ 슀크립트
β”œβ”€β”€ README_DATABASE.md    # λ°μ΄ν„°λ² μ΄μŠ€ 상세 λ¬Έμ„œ
└── README.md             # 이 λ¬Έμ„œ

πŸ› οΈ μ„€μΉ˜ 및 μ„€μ •

1. μ˜μ‘΄μ„± μ„€μΉ˜

pip install ta sqlalchemy psycopg2-binary pykrx tqdm yfinance fastapi uvicorn

2. PostgreSQL μ„€μ •

# PostgreSQL μ„€μΉ˜ 및 μ‹œμž‘
brew install postgresql@14
brew services start postgresql@14

# λ°μ΄ν„°λ² μ΄μŠ€ 생성
createdb finance_db

πŸš€ μ‚¬μš© 방법

FastAPI μ„œλ²„ μ‹€ν–‰

uvicorn server:app --reload --host 0.0.0.0 --port 8000

접속 μ£Όμ†Œ:

  • API μ„œλ²„: http://localhost:8000
  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ

초기 ꡬ좕 (3λ…„μΉ˜ 데이터)

python run_update.py init 3

일일 μ—…λ°μ΄νŠΈ

python run_update.py update 2

λΉ λ₯Έ ν…ŒμŠ€νŠΈ (8개 μ£Όμš” μ’…λͺ©)

python test_db.py

πŸ“Š API μ—”λ“œν¬μΈνŠΈ

핡심 주식 데이터

μ—”λ“œν¬μΈνŠΈ μ„€λͺ… μ˜ˆμ‹œ
GET /stock/history κ³Όκ±° OHLCV 데이터 ?ticker=005930.KS&period=1y
GET /stock/info κΈ°μ—… 정보 및 μ§€ν‘œ ?ticker=005930.KS
GET /stock/actions λ°°λ‹Ή 및 주식 λΆ„ν•  ?ticker=005930.KS

μž¬λ¬΄μ œν‘œ

μ—”λ“œν¬μΈνŠΈ μ„€λͺ… λ§€κ°œλ³€μˆ˜
GET /stock/financials μ†μ΅κ³„μ‚°μ„œ, λŒ€μ°¨λŒ€μ‘°ν‘œ, ν˜„κΈˆνλ¦„ν‘œ ticker, financial_type

μž¬λ¬΄μ œν‘œ νƒ€μž…:

  • income_stmt - μ—°κ°„ μ†μ΅κ³„μ‚°μ„œ
  • quarterly_income_stmt - λΆ„κΈ° μ†μ΅κ³„μ‚°μ„œ
  • balance_sheet - μ—°κ°„ λŒ€μ°¨λŒ€μ‘°ν‘œ
  • quarterly_balance_sheet - λΆ„κΈ° λŒ€μ°¨λŒ€μ‘°ν‘œ
  • cashflow - μ—°κ°„ ν˜„κΈˆνλ¦„ν‘œ
  • quarterly_cashflow - λΆ„κΈ° ν˜„κΈˆνλ¦„ν‘œ

μ‚¬μš© μ˜ˆμ‹œ

# μ‚Όμ„±μ „μž 1λ…„ μ£Όκ°€ 데이터
curl "http://localhost:8000/stock/history?ticker=005930.KS&period=1y&interval=1d"

# 넀이버 κΈ°μ—… 정보
curl "http://localhost:8000/stock/info?ticker=035420.KS"

# SKν•˜μ΄λ‹‰μŠ€ μ—°κ°„ μ†μ΅κ³„μ‚°μ„œ
curl "http://localhost:8000/stock/financials?ticker=000660.KS&financial_type=income_stmt"

πŸ—οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈ

  • Stock: μ’…λͺ© κΈ°λ³Έ 정보
  • DailyPrice: 일일 μ£Όκ°€ 데이터
  • TechnicalIndicator: 기술적 μ§€ν‘œ
  • MarketIndex: μ‹œμž₯ μ§€μˆ˜ (KOSPI, KOSDAQ)
  • MarketStat: μ‹œμž₯ 톡계

μž‘λ™ 원리

  1. μ’…λͺ© μˆ˜μ§‘: pykrx β†’ Yahoo Finance ν˜•μ‹ λ³€ν™˜
  2. μ£Όκ°€ 데이터: 병렬 처리둜 λΉ λ₯Έ μˆ˜μ§‘
  3. 기술적 μ§€ν‘œ: ta 라이브러리둜 μžλ™ 계산
  4. μ‹œμž₯ 톡계: 일일 μ‹œμž₯ 동ν–₯ 뢄석

πŸ”„ μžλ™ν™” μ„€μ •

Cron μ„€μ • (맀일 μžλ™ μ—…λ°μ΄νŠΈ)

# crontab -e
30 15 * * 1-5 cd /path/to/project && python run_update.py update 2

🐳 Docker 배포

λΉ λ₯Έ 배포

docker build -t yahoo-finance-api .
docker run -d -p 8000:8000 --name yahoo-finance-api yahoo-finance-api

ν”„λ‘œλ•μ…˜ 배포

docker run -d \
  --name yahoo-finance-api \
  --restart unless-stopped \
  -p 8000:8000 \
  --health-cmd="curl -f http://localhost:8000/docs || exit 1" \
  --health-interval=30s \
  yahoo-finance-api:latest

πŸ“š 상세 λ¬Έμ„œ

  • λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ: README_DATABASE.md
  • API λ¬Έμ„œ: μ„œλ²„ μ‹€ν–‰ ν›„ /docs 경둜

🎯 μ£Όμš” νŠΉμ§•

  • ν•œκ΅­ 주식 μ΅œμ ν™”: KOSPI/KOSDAQ μ „ μ’…λͺ© 지원
  • μ‹€μ‹œκ°„ + νžˆμŠ€ν† λ¦¬: μ‹€μ‹œκ°„ API + μΆ•μ λœ λ°μ΄ν„°λ² μ΄μŠ€
  • 병렬 처리: λΉ λ₯Έ λŒ€μš©λŸ‰ 데이터 μˆ˜μ§‘
  • μ•ˆμ •μ„±: 였λ₯˜ 볡ꡬ 및 μž¬μ‹œλ„ 둜직
  • ν™•μž₯μ„±: μƒˆλ‘œμš΄ μ§€ν‘œ 및 κΈ°λŠ₯ μ‰½κ²Œ μΆ”κ°€
  • μžλ™ν™”: 무인 운영 κ°€λŠ₯ν•œ μ—…λ°μ΄νŠΈ μ‹œμŠ€ν…œ

πŸ›‘οΈ 였λ₯˜ 처리

  • 404: μ’…λͺ©μ„ 찾을 수 μ—†μŒ
  • 500: λ‚΄λΆ€ μ„œλ²„ 였λ₯˜ (상세 정보 포함)
  • 422: 검증 였λ₯˜ (잘λͺ»λœ λ§€κ°œλ³€μˆ˜)

πŸ“œ λΌμ΄μ„ΌμŠ€

MIT License - LICENSE 파일 참쑰

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 98.4%
  • Dockerfile 1.6%