TradingAgents/PORTFOLIO_ANALYSIS.md

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:

  1. Portfolio name
  2. Analysis date
  3. Your positions (ticker, shares, average cost)
  4. Analyst selection
  5. Research depth
  6. 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 format
  • portfolio_analysis_{date}.pdf: Comprehensive PDF report with charts

PDF Report Sections

  1. Cover Page: Portfolio summary, total value, P/L
  2. Portfolio Visualizations:
    • Allocation pie chart
    • Position performance bar chart
    • Sector allocation bar chart
    • Correlation heatmap
  3. Portfolio Overview: Summary and recommendations
  4. Risk Assessment: Detailed risk analysis
  5. Rebalancing Suggestions: Specific recommendations
  6. 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:

  1. Check the main README.md
  2. Review PORTFOLIO_ANALYSIS.md (this file)
  3. Run test_portfolio_analysis.py to verify setup
  4. 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