import streamlit as st try: import yfinance as yf except ImportError: yf = None def render_tab5(): st.subheader("Markets & Foreign Exchange") # FX Rates st.markdown("#### \U0001f4b1 FX Rates") fx_pairs = {"USD/KRW": "USDKRW=X", "GBP/USD": "GBPUSD=X", "EUR/USD": "EURUSD=X", "USD/JPY": "USDJPY=X"} fx_cols = st.columns(len(fx_pairs)) for i, (label, sym) in enumerate(fx_pairs.items()): with fx_cols[i]: try: t = yf.Ticker(sym) info = t.info or {} price = info.get("regularMarketPrice") or info.get("previousClose") or 0 prev = info.get("regularMarketPreviousClose") or price chg = ((price - prev) / prev * 100) if prev else 0 color = "#34D399" if chg >= 0 else "#F87171" st.markdown(f"""
{label}
{price:,.2f}
{chg:+.2f}%
""", unsafe_allow_html=True) except Exception: st.markdown(f"
{label}
N/A
", unsafe_allow_html=True) # Market Sector Heatmap st.markdown("---") st.markdown("#### \U0001f5fa\ufe0f Sector Performance") sector_tickers = {"Technology": "XLK", "Healthcare": "XLV", "Financials": "XLF", "Energy": "XLE", "Consumer": "XLY", "Industrial": "XLI", "Utilities": "XLU", "Materials": "XLB", "Real Estate": "XLRE", "Communication": "XLC"} sector_data = [] for name, sym in sector_tickers.items(): try: t = yf.Ticker(sym) info = t.info or {} price = info.get("regularMarketPrice") or 0 prev = info.get("regularMarketPreviousClose") or price chg = ((price - prev) / prev * 100) if prev else 0 sector_data.append({"sector": name, "change": chg}) except Exception: sector_data.append({"sector": name, "change": 0}) # Render as colored grid heatmap_cols = st.columns(5) for i, s in enumerate(sector_data): with heatmap_cols[i % 5]: bg = f"rgba(52, 211, 153, {min(abs(s['change'])/3, 0.6)})" if s['change'] >= 0 else f"rgba(248, 113, 113, {min(abs(s['change'])/3, 0.6)})" st.markdown(f"""
{s['sector']}
{s['change']:+.2f}%
""", unsafe_allow_html=True)