Files
All-in-one-Financial-Analysis/views/tab6_crypto.py
T

44 lines
1.9 KiB
Python
Raw Normal View History

import pandas as pd
import streamlit as st
try:
import yfinance as yf
except ImportError:
yf = None
def render_tab6():
st.subheader("Cryptocurrency Prices")
crypto_list = [
("Bitcoin", "BTC-USD"), ("Ethereum", "ETH-USD"), ("BNB", "BNB-USD"),
("Solana", "SOL-USD"), ("XRP", "XRP-USD"), ("Cardano", "ADA-USD"),
("Avalanche", "AVAX-USD"), ("Dogecoin", "DOGE-USD"), ("Polkadot", "DOT-USD"),
("Chainlink", "LINK-USD"), ("Polygon", "MATIC-USD"), ("Litecoin", "LTC-USD"),
]
crypto_rows = []
for name, sym in crypto_list:
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
mcap = info.get("marketCap") or 0
crypto_rows.append({
"Coin": name,
"Symbol": sym.replace("-USD", ""),
"Price (USD)": f"${price:,.2f}",
"24h Change": f"{chg:+.2f}%",
"Market Cap": f"${mcap/1e9:.1f}B" if mcap >= 1e9 else (f"${mcap/1e6:.0f}M" if mcap else "N/A"),
"_change": chg,
})
except Exception:
crypto_rows.append({"Coin": name, "Symbol": sym.replace("-USD", ""), "Price (USD)": "N/A", "24h Change": "N/A", "Market Cap": "N/A", "_change": 0})
if crypto_rows:
df_crypto = pd.DataFrame(crypto_rows)
def style_crypto(row):
chg = row.get("_change", 0)
color = "#34D399" if chg >= 0 else "#F87171"
return [f"color: {color}" if col == "24h Change" else "" for col in row.index]
display_df = df_crypto.drop(columns=["_change"])
st.dataframe(display_df.style.apply(style_crypto, axis=1), use_container_width=True, hide_index=True)