ahmet guzererler
e4f5d70756
feat(risk): fallback to sector ETF proxy for <30 days history ( #130 )
...
Update compute_holding_risk and compute_portfolio_risk to use
a mathematical risk floor. If a stock has < 30 days of price history,
the risk logic now substitutes its returns with its Sector ETF (e.g. XLF),
"SPY", or the benchmark_prices array to ensure the portfolio manager agent
receives coherent, baseline risk values (VaR, Sharpe, Sortino, max DD).
Sets is_proxy_risk=True when applied.
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: aguzererler <6199053+aguzererler@users.noreply.github.com>
2026-03-27 11:20:01 +01:00
copilot-swe-agent[bot]
1444e8438c
feat: Portfolio Manager Phases 2-5 — risk evaluation, candidate prioritization, LLM agents, trade executor
...
- tradingagents/portfolio/risk_evaluator.py: pure-Python risk metrics
(log returns, Sharpe, Sortino, VaR, max drawdown, beta, sector
concentration, portfolio/holding aggregation, constraint checking)
- tradingagents/portfolio/candidate_prioritizer.py: conviction × thesis ×
diversification × held_penalty scoring; sorted candidate ranking
- tradingagents/portfolio/trade_executor.py: executes BUY/SELL decisions
(SELLs first), pre-flight constraint checks, EOD snapshot
- tradingagents/agents/portfolio/holding_reviewer.py: LLM agent using
run_tool_loop() — reviews all holdings, outputs HOLD/SELL JSON
- tradingagents/agents/portfolio/pm_decision_agent.py: pure-reasoning LLM
agent (no tools) — produces structured BUY/SELL/HOLD decision JSON
- tradingagents/portfolio/portfolio_states.py: PortfolioManagerState
(MessagesState + Annotated _last_value reducers)
- tradingagents/graph/portfolio_setup.py: PortfolioGraphSetup — sequential
6-node workflow with factory-pattern non-LLM nodes
- tradingagents/graph/portfolio_graph.py: PortfolioGraph — mirrors
ScannerGraph pattern with mid/deep_think LLM tiers
- tests/portfolio/test_risk_evaluator.py: 28 tests (pure Python)
- tests/portfolio/test_candidate_prioritizer.py: 10 tests (pure Python)
- tests/portfolio/test_trade_executor.py: 10 tests (MagicMock repo)
- tradingagents/portfolio/__init__.py: exports new symbols
All 93 tests pass (4 integration skipped, no regressions).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-20 14:38:48 +00:00