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"", 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)