Spaces:
Runtime error
Runtime error
from stock_data_loader import StockDataLoader | |
import streamlit as st | |
import pandas as pd | |
import yfinance as yf | |
from datetime import datetime | |
from plots import Plots, StockChart | |
class StockDashboard: | |
def __init__(self): | |
self.tickers = ['NVDA', 'AAPL', 'GOOGL', 'MSFT', 'AMZN'] | |
self.period_map = {'all': 'max','1m': '1mo', '6m': '6mo', '1y': '1y'} | |
def render_sidebar(self): | |
st.sidebar.header("Choose your filter:") | |
self.ticker = st.sidebar.selectbox('Choose Ticker', options=self.tickers, help='Select a ticker') | |
self.selected_range = st.sidebar.selectbox('Select Period', options=list(self.period_map.keys())) | |
def load_data(self): | |
self.yf_data = yf.Ticker(self.ticker) | |
self.df_history = self.yf_data.history(period=self.period_map[self.selected_range]) | |
self.current_price = self.yf_data.info.get('currentPrice', 'N/A') | |
self.previous_close = self.yf_data.info.get('previousClose', 'N/A') | |
def display_header(self): | |
company_name = self.yf_data.info['shortName'] | |
symbol = self.yf_data.info['symbol'] | |
st.subheader(f'{company_name} ({symbol}) π°') | |
st.divider() | |
if self.current_price != 'N/A' and self.previous_close != 'N/A': | |
price_change = self.current_price - self.previous_close | |
price_change_ratio = (abs(price_change) / self.previous_close * 100) | |
price_change_direction = "+" if price_change > 0 else "-" | |
st.metric(label='Current Price', value=f"{self.current_price:.2f}", | |
delta=f"{price_change:.2f} ({price_change_direction}{price_change_ratio:.2f}%)") | |
def plot_data(self): | |
chart = StockChart(self.df_history) | |
chart.add_price_chart() | |
chart.add_oversold_overbought_lines() | |
chart.add_volume_chart() | |
chart.render_chart() | |
def run(self): | |
st.write("--------------------------------------------") | |
self.render_sidebar() | |
self.load_data() | |
self.display_header() | |
self.plot_data() | |