From 33ec0e8998a2088f76171e493cc207e8dd10ad5a Mon Sep 17 00:00:00 2001 From: Tyler Date: Tue, 31 Mar 2026 00:32:02 -0700 Subject: Add live price + daily change to sidebar Shows current price, $ change, and % change (green/red) below the company name so the stock price is always visible while navigating tabs. Co-Authored-By: Claude Sonnet 4.6 --- app.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index d196ae2..f4c0ce8 100644 --- a/app.py +++ b/app.py @@ -63,7 +63,7 @@ from components.insiders import render_insiders from components.filings import render_filings from components.news import render_news from components.options import render_options -from services.data_service import get_company_info, search_tickers +from services.data_service import get_company_info, search_tickers, get_latest_price if "ticker" not in st.session_state: @@ -118,6 +118,24 @@ with st.sidebar: info = get_company_info(ticker) if ticker and info: st.caption(info.get("longName", ticker)) + price = get_latest_price(ticker) + prev_close = info.get("previousClose") or info.get("regularMarketPreviousClose") + if price is not None: + if prev_close and prev_close > 0: + chg = price - prev_close + chg_pct = chg / prev_close * 100 + sign = "+" if chg >= 0 else "" + color = "#2ecc71" if chg >= 0 else "#e74c3c" + st.markdown( + f"${price:,.2f}" + f" {sign}{chg:+.2f} ({sign}{chg_pct:.2f}%)", + unsafe_allow_html=True, + ) + else: + st.markdown( + f"${price:,.2f}", + unsafe_allow_html=True, + ) st.caption(f"Exchange: {info.get('exchange', '—')}") st.caption(f"Currency: {info.get('currency', 'USD')}") st.caption(f"Sector: {info.get('sector', '—')}") -- cgit v1.3-2-g0d8e