6.8 KiB
6.8 KiB
Portfolio Analysis Feature
Overview
The Portfolio Analysis feature extends TradingAgents to analyze entire portfolios of stocks, providing comprehensive insights on diversification, risk, correlation, and rebalancing recommendations.
Features
Core Capabilities
- Multi-stock parallel analysis: Analyze multiple stocks concurrently for faster results
- Portfolio-level metrics: Calculate correlation, beta, volatility, Sharpe ratio, and diversification scores
- Risk assessment: Identify concentration risks, sector exposure, and correlation risks
- Rebalancing suggestions: AI-powered recommendations for portfolio optimization
- Comprehensive PDF reports: Visual charts including allocation pie charts, correlation heatmaps, sector breakdown, and performance graphs
Analysis Components
Individual Stock Analysis
Each position in your portfolio is analyzed using the full TradingAgents framework:
- Market Analyst
- Sentiment Analyst (optional)
- News Analyst (optional)
- Fundamentals Analyst (optional)
- Research Team debate
- Trading recommendations
- Risk management review
Portfolio-Level Analysis
- Correlation Matrix: Understand how your positions move together
- Sector Diversification: See your exposure across different sectors
- Position Weights: Identify over/under-weighted positions
- Performance Metrics: Beta, volatility, Sharpe ratio, max drawdown
- Risk Concentration: Warnings for concentrated positions or sectors
Usage
Command Line Interface
Option 1: Interactive CLI
python -m cli.main analyze-portfolio
The CLI will prompt you to enter:
- Portfolio name
- Analysis date
- Your positions (ticker, shares, average cost)
- Analyst selection
- Research depth
- LLM settings
Option 2: Programmatic Usage
from tradingagents.portfolio.models import Portfolio, Position
from tradingagents.portfolio.portfolio_graph import PortfolioAnalysisGraph
from tradingagents.default_config import DEFAULT_CONFIG
# Define your positions
positions = {
"AAPL": Position(ticker="AAPL", shares=100, avg_cost=150.00),
"MSFT": Position(ticker="MSFT", shares=50, avg_cost=300.00),
"NVDA": Position(ticker="NVDA", shares=75, avg_cost=450.00),
}
# Create portfolio
portfolio = Portfolio(
positions=positions,
analysis_date="2024-12-01",
name="My Portfolio"
)
# Configure analysis
config = DEFAULT_CONFIG.copy()
config["max_debate_rounds"] = 1
config["quick_think_llm"] = "gpt-4o-mini"
config["deep_think_llm"] = "gpt-4o-mini"
# Initialize and run analysis
portfolio_graph = PortfolioAnalysisGraph(
selected_analysts=["market", "fundamentals"],
debug=True,
config=config
)
result = portfolio_graph.analyze_portfolio(portfolio)
# Access results
print(result.portfolio_recommendation)
print(result.risk_assessment)
print(result.rebalancing_suggestions)
Test the Feature
Run the included test script:
python test_portfolio_analysis.py
Output
Console Output
- Real-time progress updates for each stock analysis
- Portfolio summary (value, P/L, allocations)
- Portfolio metrics (beta, volatility, Sharpe ratio)
- Risk assessment
- Rebalancing suggestions
Saved Files
Results are saved in results/portfolio/{analysis_date}/:
portfolio_analysis.json: Complete analysis results in JSON formatportfolio_analysis_{date}.pdf: Comprehensive PDF report with charts
PDF Report Sections
- Cover Page: Portfolio summary, total value, P/L
- Portfolio Visualizations:
- Allocation pie chart
- Position performance bar chart
- Sector allocation bar chart
- Correlation heatmap
- Portfolio Overview: Summary and recommendations
- Risk Assessment: Detailed risk analysis
- Rebalancing Suggestions: Specific recommendations
- Individual Stock Analyses: Detailed breakdown for each position
Configuration
Performance Optimization
Adjust max_workers for parallel processing:
result = portfolio_graph.analyze_portfolio(portfolio, max_workers=3)
- Higher values = faster but more API calls
- Recommended: 2-4 workers
Cost Optimization
Use cheaper LLMs for testing:
config["quick_think_llm"] = "gpt-4o-mini"
config["deep_think_llm"] = "gpt-4o-mini"
config["max_debate_rounds"] = 1
Select fewer analysts:
selected_analysts=["market", "fundamentals"] # Instead of all 4
Requirements
Python Packages
pip install reportlab matplotlib seaborn
All requirements are in requirements.txt.
API Keys
- OpenAI API key (or Anthropic/Google)
- Alpha Vantage API key (for fundamental/news data)
Metrics Explained
Portfolio Beta
- Measures portfolio volatility relative to the market (SPY)
- Beta > 1: More volatile than market
- Beta < 1: Less volatile than market
Sharpe Ratio
- Risk-adjusted return metric
- Higher is better (>1 is good)
- Negative means returns below risk-free rate
Diversification Score
- 0 to 1 scale (1 = best diversification)
- Based on correlation between positions
- <0.5 = high correlation, poor diversification
Max Drawdown
- Largest peak-to-trough decline
- Measures downside risk
- Lower is better
Backward Compatibility
The portfolio analysis feature is completely separate from single-stock analysis:
- Single stock:
python -m cli.main analyze - Portfolio:
python -m cli.main analyze-portfolio
All existing functionality remains unchanged.
Limitations
- Requires historical price data (uses yfinance)
- Analysis date cannot be in the future
- Parallel analysis increases API costs
- Correlation analysis requires at least 60 days of overlapping price data
- Sector data may not be available for all tickers
Examples
Example Portfolio Input
Portfolio name: Tech Holdings
Analysis date: 2024-12-01
Position #1
Ticker: AAPL
Shares: 100
Average cost: $150.00
Position #2
Ticker: MSFT
Shares: 50
Average cost: $300.00
Position #3
Ticker: GOOGL
Shares: 25
Average cost: $120.00
Example Output
Portfolio Summary:
Total Cost Basis: $36,000.00
Total Market Value: $42,500.00
Unrealized P/L: $6,500.00 (+18.06%)
Portfolio Metrics:
Beta: 1.15
Volatility: 22.3% (annualized)
Sharpe Ratio: 1.42
Diversification Score: 0.68/1.00
Sector Allocation:
- Technology: 85.0%
- Communication: 15.0%
⚠️ High concentration in Technology sector (85.0%) - consider diversifying
Support
For issues or questions:
- Check the main README.md
- Review PORTFOLIO_ANALYSIS.md (this file)
- Run test_portfolio_analysis.py to verify setup
- Open an issue on GitHub
Future Enhancements
Potential future features:
- Portfolio optimization suggestions
- Historical portfolio performance tracking
- Tax-loss harvesting recommendations
- Monte Carlo simulation for risk projections
- Factor analysis (value, growth, momentum)
- ESG scoring