Newplace26/OptionsS
0
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 