CoolFace
Apppublic

Newplace26/OptionsS

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
app.py82 linesDownload Raw Back to root
1import os2from datetime import datetime, timezone3import requests4import pandas as pd5import streamlit as st6 7st.set_page_config(page_title="Solana Wallet Screener", layout="wide")8st.title("Solana Wallet Screener")9 10API_KEY = os.getenv("SOLANA_TRACKER_API_KEY", "")11 12st.sidebar.header("Filters")13min_win_rate = st.sidebar.number_input("Minimum win rate %", 0.0, 100.0, 64.0, 1.0)14min_pnl_usd = st.sidebar.number_input("Minimum PnL USD", -100000, 100000, 0, 100)15min_trades = st.sidebar.number_input("Minimum trade count", 1, 100000, 50, 1)16 17wallet = st.text_input("Paste a Solana wallet address")18 19def solana_tracker_pnl(address):20    url = "https://api.solanatracker.io/data-api/pnl/get-wallet-pnl"21    headers = {22        "x-api-key": API_KEY23    }24    params = {25        "address": address26    }27    r = requests.get(url, params=params, headers=headers, timeout=30)28    r.raise_for_status()29    return r.json()30 31def wallet_summary(address):32    pnl_data = solana_tracker_pnl(address)33    34    win_rate = pnl_data.get("winRate", 0)35    pnl_usd = pnl_data.get("realizedPnlUsd", 0)36    trade_count = pnl_data.get("totalTrades", 0)37    last_ts = pnl_data.get("lastTradeTimestamp")38    39    if last_ts:40        latest_ts = datetime.fromtimestamp(last_ts, tz=timezone.utc)41        days_since_active = (datetime.now(timezone.utc) - latest_ts).days42        last_active = latest_ts.strftime("%Y-%m-%d %H:%M UTC")43    else:44        days_since_active = None45        last_active = "Unknown"46    47    return {48        "wallet_address": address,49        "win_rate": win_rate,50        "realized_pnl_usd": pnl_usd,51        "trade_count": trade_count,52        "last_active": last_active,53        "days_since_active": days_since_active if days_since_active is not None else "N/A",54    }55 56if not API_KEY:57    st.warning("Add SOLANA_TRACKER_API_KEY in your Space Settings -> Secrets first.")58 59if st.button("Check wallet"):60    if not wallet.strip():61        st.error("Please enter a wallet address.")62    elif not API_KEY:63        st.error("Missing API key secret.")64    else:65        try:66            result = wallet_summary(wallet.strip())67            st.subheader("Wallet summary")68            st.dataframe(pd.DataFrame([result]), use_container_width=True)69 70            passed = (71                result["win_rate"] >= min_win_rate and72                result["realized_pnl_usd"] >= min_pnl_usd and73                result["trade_count"] >= min_trades74            )75 76            if passed:77                st.success("PASS")78            else:79                st.error("FAIL")80        except Exception as e:81            st.error(f"Error: {e}")82