import streamlit as st import plotly.graph_objects as go import yfinance as yf import pandas as pd from datetime import datetime, timedelta from data_fetcher import get_stock_data, get_company_info from visualization import create_stock_chart, create_metrics_table import styles def main(): # Apply custom styles styles.apply_custom_styles() st.title("📈 Stock Analysis Terminal") # Stock Symbol Input symbol = st.text_input("Enter Stock Symbol (e.g., AAPL)", "").upper() if symbol: try: # Fetch stock data stock_data = get_stock_data(symbol) company_info = get_company_info(symbol) # Display company info col1, col2 = st.columns(2) with col1: st.subheader(company_info.get('longName', symbol)) st.write(f"Sector: {company_info.get('sector', 'N/A')}") with col2: st.metric( "Current Price", f"${stock_data['Close'].iloc[-1]:.2f}", f"{((stock_data['Close'].iloc[-1] / stock_data['Close'].iloc[-2]) - 1) * 100:.2f}%" ) # Stock Chart st.plotly_chart(create_stock_chart(stock_data, symbol), use_container_width=True) # Financial Metrics Table metrics_df = create_metrics_table(company_info) st.dataframe(metrics_df, use_container_width=True) # Download button for CSV csv = stock_data.to_csv(index=True) st.download_button( label="Download Data as CSV", data=csv, file_name=f"{symbol}_stock_data.csv", mime="text/csv" ) except Exception as e: st.error(f"Error retrieving data for {symbol}: {str(e)}") if __name__ == "__main__": main()