Files
gh-jeremylongshore-claude-c…/commands/openbb-equity.md
2025-11-30 08:20:18 +08:00

7.7 KiB

name, description
name description
openbb-equity Comprehensive equity analysis using OpenBB - historical prices, fundamentals, technical indicators, insider trading, analyst ratings, and AI-powered insights

OpenBB Equity Analysis

Perform comprehensive stock analysis using the OpenBB Platform.

Usage

/openbb-equity TICKER [--analysis fundamental|technical|all] [--period 1y]

What This Command Does

Retrieves and analyzes equity data for any stock ticker using OpenBB's comprehensive data sources.

Workflow

1. Check OpenBB Installation

First, verify OpenBB is installed:

try:
    from openbb import obb
    print("✅ OpenBB installed")
except ImportError:
    print("⚠️  Installing OpenBB...")
    import subprocess
    subprocess.run(["pip", "install", "openbb"], check=True)
    from openbb import obb

2. Parse Arguments

# Parse user input
import sys
ticker = sys.argv[1].upper() if len(sys.argv) > 1 else "AAPL"
analysis_type = "all"  # fundamental, technical, or all
period = "1y"  # 1d, 1w, 1m, 3m, 6m, 1y, 5y

# Parse flags
for arg in sys.argv[2:]:
    if arg.startswith("--analysis="):
        analysis_type = arg.split("=")[1]
    elif arg.startswith("--period="):
        period = arg.split("=")[1]

3. Retrieve Historical Price Data

# Get historical prices
price_data = obb.equity.price.historical(
    symbol=ticker,
    interval="1d",
    period=period
)

df = price_data.to_dataframe()
print(f"\n📈 Historical Prices for {ticker}")
print(f"Period: {period}")
print(f"Latest Close: ${df['close'].iloc[-1]:.2f}")
print(f"52-Week High: ${df['high'].max():.2f}")
print(f"52-Week Low: ${df['low'].min():.2f}")
print(f"YTD Return: {((df['close'].iloc[-1] / df['close'].iloc[0]) - 1) * 100:.2f}%")

4. Fundamental Analysis (if requested)

if analysis_type in ["fundamental", "all"]:
    print(f"\n📊 Fundamental Analysis for {ticker}")

    # Company profile
    try:
        profile = obb.equity.profile(symbol=ticker)
        print(f"\nCompany: {profile.name}")
        print(f"Sector: {profile.sector}")
        print(f"Industry: {profile.industry}")
        print(f"Market Cap: ${profile.market_cap / 1e9:.2f}B")
    except:
        print("Profile data not available")

    # Financial metrics
    try:
        metrics = obb.equity.fundamental.metrics(symbol=ticker)
        print(f"\nKey Metrics:")
        print(f"P/E Ratio: {metrics.pe_ratio:.2f}")
        print(f"EPS: ${metrics.eps:.2f}")
        print(f"Dividend Yield: {metrics.dividend_yield:.2%}")
        print(f"ROE: {metrics.roe:.2%}")
    except:
        print("Metrics data not available")

    # Analyst ratings
    try:
        ratings = obb.equity.estimates.analyst(symbol=ticker)
        print(f"\nAnalyst Consensus:")
        print(f"Buy: {ratings.buy_count}")
        print(f"Hold: {ratings.hold_count}")
        print(f"Sell: {ratings.sell_count}")
        print(f"Target Price: ${ratings.target_price:.2f}")
    except:
        print("Analyst ratings not available")

5. Technical Analysis (if requested)

if analysis_type in ["technical", "all"]:
    print(f"\n📉 Technical Analysis for {ticker}")

    # Calculate technical indicators
    import pandas as pd

    # Simple Moving Averages
    df['SMA_20'] = df['close'].rolling(window=20).mean()
    df['SMA_50'] = df['close'].rolling(window=50).mean()
    df['SMA_200'] = df['close'].rolling(window=200).mean()

    current_price = df['close'].iloc[-1]
    sma_20 = df['SMA_20'].iloc[-1]
    sma_50 = df['SMA_50'].iloc[-1]
    sma_200 = df['SMA_200'].iloc[-1]

    print(f"\nMoving Averages:")
    print(f"Current Price: ${current_price:.2f}")
    print(f"SMA 20: ${sma_20:.2f} {'🟢' if current_price > sma_20 else '🔴'}")
    print(f"SMA 50: ${sma_50:.2f} {'🟢' if current_price > sma_50 else '🔴'}")
    print(f"SMA 200: ${sma_200:.2f} {'🟢' if current_price > sma_200 else '🔴'}")

    # RSI calculation
    delta = df['close'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
    rs = gain / loss
    df['RSI'] = 100 - (100 / (1 + rs))

    rsi = df['RSI'].iloc[-1]
    print(f"\nRSI (14): {rsi:.2f}")
    if rsi > 70:
        print("⚠️  Overbought territory")
    elif rsi < 30:
        print("🟢 Oversold territory - potential buy")
    else:
        print("Neutral zone")

    # Volume analysis
    avg_volume = df['volume'].rolling(window=20).mean().iloc[-1]
    current_volume = df['volume'].iloc[-1]
    print(f"\nVolume:")
    print(f"Current: {current_volume:,.0f}")
    print(f"20-day Avg: {avg_volume:,.0f}")
    print(f"Relative: {(current_volume / avg_volume):.2f}x")

6. AI-Powered Insights

Generate investment insights using Claude's analysis:

# Prepare summary for AI analysis
summary = {
    "ticker": ticker,
    "current_price": current_price,
    "52w_high": df['high'].max(),
    "52w_low": df['low'].min(),
    "ytd_return": ((df['close'].iloc[-1] / df['close'].iloc[0]) - 1) * 100,
    "technical": {
        "sma_position": "bullish" if current_price > sma_200 else "bearish",
        "rsi": rsi,
        "volume_trend": "high" if current_volume > avg_volume else "normal"
    }
}

print(f"\n🤖 AI Analysis for {ticker}:")
print("\nBased on the data above, here's my assessment:")
print(f"- Trend: {'Bullish' if current_price > sma_200 else 'Bearish'} (price {'above' if current_price > sma_200 else 'below'} 200-day SMA)")
print(f"- Momentum: {'Overbought' if rsi > 70 else 'Oversold' if rsi < 30 else 'Neutral'} (RSI: {rsi:.1f})")
print(f"- Volume: {'Elevated' if current_volume > avg_volume * 1.5 else 'Normal'} trading activity")
print(f"\n💡 Recommendation: Consider {summary} in context of your investment strategy and risk tolerance.")

7. Generate Report

Create a formatted analysis report:

print(f"\n{'='*60}")
print(f"EQUITY ANALYSIS REPORT: {ticker}")
print(f"{'='*60}")
print(f"Generated: {pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"Data Source: OpenBB Platform")
print(f"\nAnalysis Type: {analysis_type.upper()}")
print(f"Period Analyzed: {period}")
print(f"\n{'='*60}")

Examples

Basic equity analysis

/openbb-equity AAPL

Fundamental analysis only

/openbb-equity TSLA --analysis=fundamental

Technical analysis with custom period

/openbb-equity NVDA --analysis=technical --period=6m

Complete analysis

/openbb-equity GOOGL --analysis=all --period=1y

Data Coverage

  • Price Data: Historical OHLCV, real-time quotes
  • Fundamentals: Income statements, balance sheets, cash flow, ratios
  • Technical: SMA, EMA, RSI, MACD, Bollinger Bands, volume
  • Analyst Data: Ratings, price targets, recommendations
  • Insider Trading: Recent insider transactions
  • News: Latest company news and sentiment

Tips

  1. Compare Multiple Stocks: Run for different tickers to compare
  2. Track Over Time: Save reports to monitor changes
  3. Combine with AI Agents: Use with equity-analyst agent for deeper insights
  4. Export Data: Save dataframes to CSV for further analysis
  5. Set Alerts: Monitor key technical levels (support/resistance)

Integration with Other Commands

# Compare with crypto
/openbb-crypto BTC --compare=equity

# Portfolio context
/openbb-portfolio --add=AAPL

# Macro correlation
/openbb-macro --impact=equity

Requirements

  • OpenBB Platform installed (pip install openbb)
  • Python 3.9.21 - 3.12
  • Optional: API keys for premium data providers (configured in OpenBB)

Notes

  • Free tier provides delayed data (15-20 minutes)
  • Premium data requires API keys (configured via obb.user.credentials)
  • All financial data is for informational purposes only
  • Not financial advice - always do your own research