You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

8.8 KiB

Changelog

All notable changes to Stock Oracle API will be documented in this file.

[3.1.1] - 2026-04-26

Changed (breaking — News v2 only, pre-GA)

  • SessionAggregateItem social fields nested: social_message_count / social_bull_count / social_bear_count removed; replaced by nested social: {message_count, bull_count, bear_count, bull_bear_ratio}. Adds derived bull_bear_ratio = bull/(bull+bear) (null when no directional messages). Restores spec compliance — fithia2 integration test caught the deviation pre-GA, no client traffic yet.

[3.1.0] - 2026-04-26

Added

  • News v2 — multi-source structured ingest (/api/v1/news/v2/*): premium news/social signal designed for backtest/forward-test consumers (fithia2 V49 ORB).
    • Sources: Alpaca News (Benzinga backend, P0), StockTwits public API (P1), Finnhub free tier (P2). Existing /news/{ticker} aggregator unchanged for UI use.
    • GET /news/v2/headlines — raw rows with symbols/start/end/sources/limit/cursor
    • GET /news/v2/session_aggregate — single (ticker, session_date, window) Redis-cached aggregate
    • POST /news/v2/session_aggregate/batch — many tickers in one call (no server cache; client disk-cache assumed)
    • GET /news/v2/coverage — per-source ingest depth probe
  • Unified 22-term category taxonomy with regex headline overrides for FDA approval/rejection split, analyst rating direction, etc.
  • Session windows via pandas_market_calendars (XNYS) — premarket/intraday/post/full_session with NYSE holiday + early-close handling. post ends at next trading day's premarket start (04:00 ET) to remain disjoint from next session's premarket.
  • PIT safety: aggregates filter ingested_at <= window_end_utc so backtests don't see lookahead headlines.
  • APScheduler jobs (opt-in via NEWS_INGEST_ENABLED=true): Alpaca 5-min poll + 04:30 ET daily backfill, StockTwits 09:00 ET universe refresh + 5-min poll, Finnhub 05:00 ET daily backfill.
  • Fail-fast: NEWS_INGEST_ENABLED=true with neither ALPACA_API_KEY/SECRET nor FINNHUB_API_KEY → scheduler refuses to start (StockTwits-only is too low-signal).
  • StockTwits dynamic universe: (last 14 days V49 union) (today's premarket gap movers > 2%), capped at 300 tickers.
  • Manual backfill script: scripts/news_backfill.py --source finnhub --tickers ... --start --end --chunk monthly.
  • Stock Oracle Python client: get_news_headlines, get_news_session_aggregate, get_news_session_aggregate_batch, get_news_coverage.
  • New table: news_headline (UUID PK, ARRAY columns, (source, source_id, ticker) unique constraint for idempotent multi-source ingest).
  • New env vars: NEWS_INGEST_ENABLED, NEWS_INGEST_TIMEZONE, ALPACA_NEWS_BASE_URL, FINNHUB_API_KEY, FINNHUB_BASE_URL, STOCKTWITS_BASE_URL, STOCKTWITS_UNIVERSE_LOOKBACK_DAYS, STOCKTWITS_PREMARKET_GAP_THRESHOLD, STOCKTWITS_UNIVERSE_MAX_SIZE.
  • New dependency: pandas_market_calendars>=4.3.0.

[3.0.3] - 2026-03-18

Fixed

  • ETF Holdings as_of_date 정확도: 요청 날짜에 가장 가까운 파일링을 반환하도록 수정
    • _load_snapshot_holdings(): DB 캐시 스냅샷과 as_of_date 간격이 120일 초과 시 stale 판단, SEC 신규 fetch 트리거
    • _find_best_filing_and_xml(): eligible 후보 필터에 365일 하한 추가 — target_date 기준 1년 이내 파일링 우선 탐색
    • 수정 전: SPY?as_of_date=2021-06-30 → 2019-11-18 (19개월 stale)
    • 수정 후: SPY?as_of_date=2021-06-30 → 2021-05-28 (정상)

[3.0.2] - 2026-03-17

Added

  • Attention 서브시스템: 이벤트 중심 Wikipedia/GDELT 관심도 피처 (백테스팅용)
    • GET /api/v1/attention/event/{ticker}?event_date=YYYY-MM-DD — 이벤트 날짜 기준 관심도 피처 조회
    • GET /api/v1/attention/entity/{ticker} — 티커 → 캐노니컬 엔티티 정보 조회
    • POST /api/v1/attention/admin/resolve/{ticker} — 티커 → 캐노니컬 엔티티 해석
    • POST /api/v1/attention/admin/collect/wiki/{ticker} — Wikipedia 페이지뷰 수집
    • POST /api/v1/attention/admin/collect/gdelt/{ticker} — GDELT 뉴스 아티클 수집
    • Wikipedia 일별 페이지뷰 스파이크 / z-score 계산
    • GDELT GKG 아티클 수 기반 언론 노출 지표

[3.0.1] - 2026-03-14

Added

  • Filing Search accepted_at field: GET /filings/search/{ticker} response now includes accepted_at (ISO 8601 timestamp) in each FilingSummary
    • Sourced from acceptanceDateTime in SEC EDGAR submissions JSON — no additional HTTP requests needed
    • SECFiling DB model gains a nullable accepted_at TIMESTAMP column
    • SQLite auto-migration: ALTER TABLE sec_filings ADD COLUMN accepted_at TIMESTAMP runs at startup (idempotent)
    • Existing rows have accepted_at = NULL; re-index with force_refresh=true to backfill
    • Enables downstream consumers (e.g. filing_poller) to populate Document.accepted_at_utc and Event.filed_at_utc

[3.0.0] - 2026-03-12

Added

  • Alpaca Market Data Adapter: Complete integration with Alpaca Market Data API v2

    • GET /alpaca/status — Connection status and API key validation
    • GET /alpaca/bars/{ticker} — Raw bars from Alpaca (no DB)
    • GET /alpaca/data/{ticker} — OHLCV price data with DB storage (PriceDataResponse format)
    • GET /alpaca/intraday/{ticker} — Intraday candles (1m, 5m, 15m, 1h)
    • Built-in rate limiting (200 req/min token bucket) with retry + exponential backoff
    • VWAP (volume-weighted average price) and trade count per bar
    • Auto-pagination for large date ranges
    • Completely independent from Yahoo Finance — users choose their source
  • FINRA Short Sale Volume Adapter: RegSHO daily short volume data

    • GET /finra/short-volume/{symbol} — Short volume data with auto-ingest
    • GET /finra/short-ratio/{symbol} — Aggregated short ratio history
    • POST /finra/admin/ingest — Manual ingest for single date or date range
    • Public FINRA CDN data (no API key required)
    • Pipe-delimited text parser for CNMS short volume files
    • Multi-market data (NYSE TRF, NASDAQ TRF, NYSE)
    • Auto-ingest on first query if data is missing
  • New DB Model: FinraShortVolume with (symbol, date, market) unique constraint

  • New DataSource Enum: DataSource.ALPACA added to schema

  • Configuration: ALPACA_API_KEY, ALPACA_SECRET_KEY, ALPACA_BASE_URL settings

  • Docker: Alpaca env vars passed to API container

New Files

  • app/services/alpaca_client.py — Alpaca HTTP client with httpx
  • app/services/alpaca_price_service.py — Alpaca bars → PriceData conversion
  • app/api/v1/endpoints/alpaca.py — Alpaca endpoints
  • app/models/finra_short_volume.py — FINRA SQLAlchemy model
  • app/services/finra_short_volume_service.py — FINRA fetch/parse/ingest service
  • app/schemas/finra.py — FINRA Pydantic schemas
  • app/api/v1/endpoints/finra.py — FINRA endpoints

[2.1.0] - 2025-08-10

Added

  • ETF Holdings API v2: Complete rewrite with enhanced features
    • availability field in all error responses showing available date ranges
    • ETF launch date validation to prevent invalid historical requests
    • Automatic detection when ETF didn't exist on requested date
    • Fast performance optimization (<0.1s response time, down from 35s)
    • Enhanced error messages with actionable information

Improved

  • Performance: ETF date validation now uses cached launch dates for instant response
  • User Experience: Clear error messages when ETF data is unavailable
  • Documentation: Comprehensive API documentation with examples

Fixed

  • Historical date requests now correctly validate against ETF launch dates
  • QQQM pre-launch date requests now return proper error instead of wrong data
  • Response model now includes all fields (fixed Pydantic model filtering issue)

[2.0.0] - 2025-07-01

Added

  • ETF Holdings API: New endpoint for ETF portfolio data
    • Support for 30+ major ETFs with pre-configured mappings
    • Automatic CIK to ticker conversion
    • Historical NPORT data from 2019 onwards
    • Support for both ticker symbols and CIK numbers

Changed

  • Simplified ETF API to single /holdings/{ticker} endpoint
  • Removed redundant ETF endpoints

[1.5.0] - 2024-12-01

Added

  • Price Data API: OHLCV data integration with yfinance
  • Bulk Data Support: Batch requests for multiple tickers
  • Period Strings: Convenient time period specification (1y, 6m, 3m, etc.)

Improved

  • Database caching strategy
  • Error handling and logging
  • API documentation

[1.0.0] - 2024-10-01

Initial Release

  • Financial Data API: SEC filing data extraction
  • Metrics Calculation: P/E, P/B, ROE, margins, etc.
  • Database Caching: SQLite/PostgreSQL support
  • Docker Deployment: Complete containerization
  • API Documentation: Interactive Swagger/OpenAPI docs