- New fmp_client.py — Postgres fmp_bulk fast path + live /stable/* fallback
- New fmp.py — FMP-backed public API matching y_finance shapes, plus
get_ticker_info() returning a yfinance-Ticker.info-shaped dict so
downstream .get(key) lookups work unchanged
- interface.py VENDOR_METHODS: fmp added as primary for every tool;
VENDOR_LIST now [fmp, yfinance, alpha_vantage]
- default_config.py: all four data_vendors categories -> fmp
- tier1/tier2/portfolio: drop direct yfinance imports; yf.Ticker(t).info
-> fmp.get_ticker_info(t); plain-function imports rerouted to .fmp
- y_finance.py: docstring flipped to fallback-only
- macro_data_tools.py deleted (orphaned 594-LOC @tool module — not
imported anywhere, agent_utils.py wires its four siblings but skipped
this one, so @tool versions never bound)
Zero live yf.Ticker / yf.download calls remain in the TradingAgents
execution graph.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Part of the FMP-primary data source migration (see
D:/sharkquant/docs/FMP_MIGRATION.md at the monorepo root).
- alpha_vantage_common.py: every helper returns empty; AlphaVantageRateLimitError kept for `except` compat
- alpha_vantage_stock.py / _fundamentals.py / _indicator.py / _news.py: all public functions return "" so callers through interface.py don't import-error
y_finance.py gets a module-level deprecation docstring; it's too big
to stub safely without a tested FMP replacement wired through
interface.py, so it stays live for this round. Callers (tier1, tier2,
test.py) still work via its Alpaca-fallback path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bulk commit of accumulated local changes on the dtarkent2-sys fork.
Spans agents, dataflows, llm_clients, graph orchestration, CLI, and
docs. Primary work areas:
- llm_clients/ — multi-LLM client layer (anthropic, google, openai,
factory, base, validators) for swappable provider support
- dataflows/alpaca_data.py — Alpaca integration alongside existing
alpha_vantage and y_finance flows
- agents/structured/ — portfolio, scoring, and tier1/2/3 layers
- agents/analysts, researchers, risk_mgmt — local prompt and logic
customizations
- graph/ — orchestration tweaks (parallel_analysts, propagation,
reflection, signal_processing, trading_graph)
- alembic scaffolding inherited from prior commit
- chainlit web UI design notes in docs/plans/
This is a single WIP snapshot to preserve work before any upstream
merge. History can be cleaned up with interactive rebase later.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Alpaca provides 10k calls/min free with 7yr history via IEX feed.
Hybrid approach: Alpaca for price bars, snapshots, sector ETF perf,
and moving averages; yfinance for fundamentals (PE, margins, 13F).
- Add alpaca_data.py: bars, snapshots, MAs, sector ETF perf, news
- Update get_macro_indicators: sector ETF performance via Alpaca
- Update get_sector_rotation: compute relative strength vs SPY
- Update entry timing node: Alpaca MAs from actual bar data
- Add alpaca-py to requirements.txt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace hardcoded column indices with column name lookup
- Add mapping for all supported indicators to their expected CSV column names
- Handle missing columns gracefully with descriptive error messages
- Strip whitespace from header parsing for reliability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace FinnHub with Alpha Vantage API in README documentation
- Implement comprehensive Alpha Vantage modules:
- Stock data (daily OHLCV with date filtering)
- Technical indicators (SMA, EMA, MACD, RSI, Bollinger Bands, ATR)
- Fundamental data (overview, balance sheet, cashflow, income statement)
- News and sentiment data with insider transactions
- Update news analyst tools to use ticker-based news search
- Integrate Alpha Vantage vendor methods into interface routing
- Maintain backward compatibility with existing vendor system
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>