Overview

The Finance App is an interactive Streamlit-based web application that enables users to analyze stock performance, calculate key financial metrics, and optimize portfolio allocations. The app fetches real-time stock data from Yahoo Finance and provides intuitive visualizations for investment decision-making.

Features

Stock Data Analysis

  • Multi-ticker Support: Analyze multiple stocks simultaneously with comma-separated inputs
  • Flexible Date Range: Select custom date ranges for historical analysis
  • Real-time Data: Fetch current stock data through Yahoo Finance API
  • Price Visualization: Interactive charts showing price movements over time

Performance Metrics

  • Sharpe Ratio: Calculate risk-adjusted returns to measure performance efficiency
  • Sortino Ratio: Evaluate downside risk-adjusted performance
  • Returns Analysis: Visualize and analyze stock return patterns
  • Comparative Analysis: Compare performance across multiple securities

Portfolio Management

  • Portfolio Optimization: Generate optimal portfolio weights (equal-weighted implementation)
  • Weight Visualization: Bar charts showing allocation across different securities
  • Data Export: Download stock data as CSV for further analysis
  • Interactive Interface: User-friendly controls for customizing analysis parameters

Technical Implementation

Core Components

def fetch_data(tickers, start_date, end_date):
    data_frames = []
    for ticker in tickers:
        stock_data = yf.download(ticker, start=start_date, end=end_date)['Adj Close']
        data_frames.append(stock_data)
    
    data = pd.concat(data_frames, axis=1, keys=tickers)
    data.columns = tickers
    return data

The application fetches adjusted close prices using the Yahoo Finance API, processes the data with Pandas, and presents it through multiple interactive visualizations.

Performance Calculations

def calculate_sharpe_ratio(returns, risk_free_rate=0.02):
    portfolio_return = returns.mean().mean()
    portfolio_volatility = returns.std().mean()
    return (portfolio_return - risk_free_rate) / portfolio_volatility

def calculate_sortino_ratio(returns, risk_free_rate=0.02):
    portfolio_return = returns.mean().mean()
    downside_returns = returns[returns < 0]
    downside_deviation = downside_returns.std().mean()
    return (portfolio_return - risk_free_rate) / downside_deviation

These implementations calculate crucial risk-adjusted performance metrics that help users understand investment efficiency.

User Interface

The Streamlit interface provides:

  • Text inputs for stock ticker entry
  • Date selectors for time range customization
  • Interactive charts for price and returns visualization
  • Performance metrics display
  • Portfolio weight visualization
  • Data download capabilities

Technology Stack

  • Streamlit: Powers the interactive web interface
  • Pandas: Handles financial data processing
  • yfinance: Provides stock market data access
  • NumPy: Performs numerical operations
  • Matplotlib: Creates financial charts and visualizations

Future Enhancements

Planned improvements include:

  • Advanced portfolio optimization using Modern Portfolio Theory
  • Additional performance metrics (Jensen’s Alpha, Information Ratio)
  • Technical indicator integration (Moving Averages, RSI, MACD)
  • Fundamental analysis using financial statement data
  • Backtesting capabilities for trading strategies