Prerequisite refactor: - Consolidate duplicate _to_dicts into shared obb_utils.to_list - Add fetch_historical and first_or_empty helpers to obb_utils Phase 1 - Local computation (no provider risk): - Group I: 12 technical indicators (ATR, ADX, Stoch, OBV, Ichimoku, Donchian, Aroon, CCI, Keltner, Fibonacci, A/D, Volatility Cones) - Group J: Sortino, Omega ratios + rolling stats (variance, stdev, mean, skew, kurtosis, quantile via generic endpoint) - Group H: ECB currency reference rates Phase 2 - FRED/Federal Reserve providers: - Group C: 10 fixed income endpoints (treasury rates, yield curve, auctions, TIPS, EFFR, SOFR, HQM, commercial paper, spot rates, spreads) - Group D: 11 economy endpoints (CPI, GDP, unemployment, PCE, money measures, CLI, HPI, FRED search, balance of payments, Fed holdings, FOMC documents) - Group E: 5 survey endpoints (Michigan, SLOOS, NFP, Empire State, BLS search) Phase 3 - SEC/stockgrid/FINRA providers: - Group B: 4 equity fundamental endpoints (management, dividends, SEC filings, company search) - Group A: 4 shorts/dark pool endpoints (short volume, FTD, short interest, OTC dark pool) - Group F: 3 index/ETF enhanced (S&P 500 multiples, index constituents, ETF N-PORT) Phase 4 - Regulators: - Group G: 5 regulatory endpoints (COT report, COT search, SEC litigation, institution search, CIK mapping) Security hardening: - Service-layer allowlists for all getattr dynamic dispatch - Regex validation on date, country, security_type, form_type params - Exception handling in fetch_historical - Callable guard on rolling stat dispatch Total: 32 existing + 67 new = 99 endpoints, all free providers.
11 KiB
11 KiB
OpenBB Feature Expansion Plan
67 new endpoints across 10 feature groups. All use free providers.
Prerequisites (Do First)
P0: Consolidate Shared Utilities
- Replace duplicate
_to_dictsinopenbb_service.pyandmacro_service.pywithobb_utils.to_list - Add
fetch_historical(symbol, days, provider)helper toobb_utils.py - Add
serialize_dates(items)helper toobb_utils.py - Files:
obb_utils.py,openbb_service.py,macro_service.py,technical_service.py,quantitative_service.py - Complexity: S
Phase 1: Local Computation (No Provider Risk)
Group I: Technical Analysis Extended (14 endpoints)
- Add generic indicator dispatcher to
technical_service.py - Implement indicators: ATR, ADX, Stochastic, OBV, VWAP, Ichimoku, Donchian, Aroon, CCI, Keltner Channels, Fibonacci, A/D Line, Volatility Cones, Relative Rotation
- Add individual endpoints to
routes_technical.py - Add generic endpoint:
GET /api/v1/stock/{symbol}/technical/{indicator} - New endpoints:
GET /api/v1/stock/{symbol}/technical/atr-- Average True Range (volatility, position sizing)GET /api/v1/stock/{symbol}/technical/adx-- Average Directional Index (trend strength)GET /api/v1/stock/{symbol}/technical/stoch-- Stochastic Oscillator (overbought/oversold)GET /api/v1/stock/{symbol}/technical/obv-- On-Balance Volume (volume-price divergence)GET /api/v1/stock/{symbol}/technical/vwap-- Volume Weighted Average PriceGET /api/v1/stock/{symbol}/technical/ichimoku-- Ichimoku Cloud (comprehensive trend)GET /api/v1/stock/{symbol}/technical/donchian-- Donchian Channels (breakout detection)GET /api/v1/stock/{symbol}/technical/aroon-- Aroon Indicator (trend changes)GET /api/v1/stock/{symbol}/technical/cci-- Commodity Channel Index (cyclical trends)GET /api/v1/stock/{symbol}/technical/kc-- Keltner Channels (volatility bands)GET /api/v1/stock/{symbol}/technical/fib-- Fibonacci Retracement (support/resistance)GET /api/v1/stock/{symbol}/technical/ad-- Accumulation/Distribution LineGET /api/v1/stock/{symbol}/technical/cones-- Volatility Cones (implied vs realized vol)GET /api/v1/stock/{symbol}/technical/relative_rotation-- RRG (sector rotation)
- Extend:
technical_service.py(+200 lines),routes_technical.py(+80 lines) - Complexity: L (high volume, low individual complexity)
Group J: Quantitative Extended (8 endpoints)
- Add Sortino ratio, Omega ratio
- Add rolling statistics: variance, stdev, mean, skew, kurtosis, quantile
- New endpoints:
GET /api/v1/stock/{symbol}/sortino?days=365-- Sortino ratio (downside risk only)GET /api/v1/stock/{symbol}/omega?days=365-- Omega ratio (full distribution)GET /api/v1/stock/{symbol}/rolling/variance?days=365&window=30-- Rolling varianceGET /api/v1/stock/{symbol}/rolling/stdev?days=365&window=30-- Rolling std deviationGET /api/v1/stock/{symbol}/rolling/mean?days=365&window=30-- Rolling meanGET /api/v1/stock/{symbol}/rolling/skew?days=365&window=30-- Rolling skewnessGET /api/v1/stock/{symbol}/rolling/kurtosis?days=365&window=30-- Rolling kurtosisGET /api/v1/stock/{symbol}/rolling/quantile?days=365&window=30&quantile=0.5-- Rolling quantile
- Extend:
quantitative_service.py(+120 lines),routes_quantitative.py(+60 lines) - Complexity: M
Group H: Currency Reference Rates (1 endpoint)
- Add ECB reference rates to
market_service.py - New endpoint:
GET /api/v1/currency/reference-rates-- ECB reference rates for 28 currencies
- Extend:
market_service.py(+15 lines),routes_market.py(+10 lines) - Complexity: S
Phase 2: FRED/Federal Reserve Providers
Group C: Fixed Income (10 endpoints)
- Create
fixed_income_service.py-- treasury rates, yield curve, auctions, TIPS, EFFR, SOFR, HQM, commercial paper, spot rates, spreads - Create
routes_fixed_income.py - Register router in
main.py - New endpoints:
GET /api/v1/fixed-income/treasury-rates-- Full yield curve rates (4W-30Y)GET /api/v1/fixed-income/yield-curve?date=-- Yield curve with maturity/rate pairsGET /api/v1/fixed-income/treasury-auctions?security_type=-- Auction bid-to-cover, yieldsGET /api/v1/fixed-income/tips-yields-- TIPS real yields by maturityGET /api/v1/fixed-income/effr-- Effective Fed Funds Rate with percentilesGET /api/v1/fixed-income/sofr-- SOFR rate with moving averagesGET /api/v1/fixed-income/hqm-- High Quality Market corporate bond yieldsGET /api/v1/fixed-income/commercial-paper-- CP rates by maturity/typeGET /api/v1/fixed-income/spot-rates-- Corporate bond spot ratesGET /api/v1/fixed-income/spreads?series=tcm-- Treasury/corporate spreads
- New files:
fixed_income_service.py(~250 lines),routes_fixed_income.py(~180 lines) - Complexity: L
Group D: Economy Expanded (13 endpoints)
- Extend
macro_service.pywith structured FRED indicators (CPI, GDP, unemployment, PCE, money measures) - Create
economy_service.pyfor non-series endpoints (fred_search, fred_regional, balance_of_payments, central_bank_holdings, primary_dealer_positioning, fomc_documents) - Extend
routes_macro.pyfor FRED-based indicators - Create
routes_economy.pyfor search/institutional data - Register new router in
main.py - New endpoints (extend routes_macro.py):
GET /api/v1/macro/cpi?country=united_states-- Consumer Price Index (multi-country)GET /api/v1/macro/gdp?type=real-- GDP nominal/real/forecastGET /api/v1/macro/unemployment?country=united_states-- Unemployment rate (multi-country)GET /api/v1/macro/pce-- Personal Consumption Expenditures (Fed preferred inflation)GET /api/v1/macro/money-measures-- M1/M2 money supplyGET /api/v1/macro/cli?country=united_states-- Composite Leading IndicatorGET /api/v1/macro/house-price-index?country=united_states-- Housing price index
- New endpoints (new routes_economy.py):
GET /api/v1/economy/fred-search?query=-- Search FRED series by keywordGET /api/v1/economy/fred-regional?series_id=®ion=-- Regional economic dataGET /api/v1/economy/balance-of-payments-- Current/capital/financial accountGET /api/v1/economy/central-bank-holdings-- Fed SOMA portfolioGET /api/v1/economy/primary-dealer-positioning-- Wall Street firm positionsGET /api/v1/economy/fomc-documents?year=-- FOMC meeting documents
- New files:
economy_service.py(~200 lines),routes_economy.py(~150 lines) - Extend:
macro_service.py(+80 lines),routes_macro.py(+50 lines) - Complexity: L
Group E: Economy Surveys (5 endpoints)
- Create
surveys_service.py-- Michigan, SLOOS, NFP, Empire State, BLS - Create
routes_surveys.py - Register router in
main.py - New endpoints:
GET /api/v1/economy/surveys/michigan-- Consumer Sentiment + inflation expectationsGET /api/v1/economy/surveys/sloos-- Senior Loan Officer survey (recession predictor)GET /api/v1/economy/surveys/nonfarm-payrolls-- Detailed employment dataGET /api/v1/economy/surveys/empire-state-- NY manufacturing outlookGET /api/v1/economy/surveys/bls-search?query=-- BLS data series search
- New files:
surveys_service.py(~130 lines),routes_surveys.py(~100 lines) - Complexity: M
Phase 3: SEC/Stockgrid/CFTC Providers
Group B: Equity Fundamentals (4 endpoints)
- Add management, dividends, filings, search to
openbb_service.py - Add endpoints to
routes.py - New endpoints:
GET /api/v1/stock/{symbol}/management-- Executive team, titles, compensationGET /api/v1/stock/{symbol}/dividends-- Historical dividend recordsGET /api/v1/stock/{symbol}/filings?form_type=10-K-- SEC filings (10-K, 10-Q, 8-K)GET /api/v1/search?query=-- Company search by name (SEC/NASDAQ)
- Extend:
openbb_service.py(+60 lines),routes.py(+40 lines) - Complexity: S
Group A: Equity Shorts & Dark Pool (4 endpoints)
- Create
shorts_service.py-- short volume, FTD, short interest, OTC dark pool - Create
routes_shorts.py - Register router in
main.py - New endpoints:
GET /api/v1/stock/{symbol}/shorts/volume-- Daily short volume & percent (stockgrid)GET /api/v1/stock/{symbol}/shorts/ftd-- Fails-to-deliver records (SEC)GET /api/v1/stock/{symbol}/shorts/interest-- Short interest, days to cover (FINRA)GET /api/v1/darkpool/{symbol}/otc-- OTC/dark pool trade volume (FINRA)
- New files:
shorts_service.py(~120 lines),routes_shorts.py(~80 lines) - Complexity: M
Group F: Index & ETF Enhanced (3 endpoints)
- Add sp500_multiples, index_constituents, etf nport_disclosure to
market_service.py - Add endpoints to
routes_market.py - New endpoints:
GET /api/v1/index/sp500-multiples?series=pe_ratio-- Historical S&P 500 valuation (Shiller PE, P/B, P/S, dividend yield)GET /api/v1/index/{symbol}/constituents-- Index member stocks with sector/price dataGET /api/v1/etf/{symbol}/nport-- Detailed ETF holdings from SEC N-PORT filings
- Extend:
market_service.py(+60 lines),routes_market.py(+50 lines) - Complexity: S
Phase 4: Regulators
Group G: Regulators (5 endpoints)
- Create
regulators_service.py-- COT, COT search, SEC litigation, institution search, CIK mapping - Create
routes_regulators.py - Register router in
main.py - New endpoints:
GET /api/v1/regulators/cot?symbol=-- Commitment of Traders report (commercial/speculator positions)GET /api/v1/regulators/cot/search?query=-- Search COT report symbolsGET /api/v1/regulators/sec/litigation-- SEC litigation releases RSS feedGET /api/v1/regulators/sec/institutions?query=-- Search institutional investorsGET /api/v1/regulators/sec/cik-map?symbol=-- Ticker to CIK mapping
- New files:
regulators_service.py(~150 lines),routes_regulators.py(~100 lines) - Complexity: M
Summary
| Phase | Groups | Endpoints | New Files | Complexity |
|---|---|---|---|---|
| P0 Prereq | - | 0 | 0 | S |
| Phase 1 | I, J, H | 23 | 0 | L+M+S |
| Phase 2 | C, D, E | 28 | 6 | L+L+M |
| Phase 3 | B, A, F | 11 | 2 | S+M+S |
| Phase 4 | G | 5 | 2 | M |
| Total | 10 | 67 | 10 |
File Impact
New files (10):
shorts_service.py,routes_shorts.pyfixed_income_service.py,routes_fixed_income.pyeconomy_service.py,routes_economy.pysurveys_service.py,routes_surveys.pyregulators_service.py,routes_regulators.py
Extended files (12):
obb_utils.py(shared helpers)openbb_service.py(Group B fundamentals)routes.py(Group B endpoints)macro_service.py(Group D indicators)routes_macro.py(Group D endpoints)market_service.py(Groups F, H)routes_market.py(Groups F, H)technical_service.py(Group I indicators)routes_technical.py(Group I endpoints)quantitative_service.py(Group J metrics)routes_quantitative.py(Group J endpoints)main.py(register 5 new routers)
Endpoint Count After Completion
- Current: 32 endpoints
- New: 67 endpoints
- Total: 99 endpoints