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