Behavioral classification, performance analysis, and trading style detection for Solana wallets
npx skills add https://github.com/agiprolabs/claude-trading-skills --skill wallet-profiling
Behavioral classification, performance analysis, and trading style detection for Solana wallets. Profile any wallet to understand how it trades, how well it performs, and whether it is worth following.
Before mirroring another wallet's trades, you need evidence that its historical performance is genuine, consistent, and not the result of a single lucky hit. Profiling quantifies win rate, profit factor, hold time, and consistency so you can make informed decisions about which wallets merit attention.
Wallets that consistently buy tokens early and exit profitably are signal sources. Profiling separates genuinely skilled traders from lucky gamblers and wash-trading bots. Key differentiators: sustained profit factor above 2.0, win rates above 45% across 100+ trades, and diversified token selection.
When a large wallet enters a position you hold, understanding its historical behavior (sniper vs. holder, bot vs. human) helps you anticipate what will happen next. A sniper wallet buying suggests a quick dump is coming; a swing trader buying suggests multi-day conviction.
Token holder analysis benefits from knowing whether top holders are bots, snipers, or genuine investors. A token where 60% of holders are classified as snipers has very different risk characteristics than one held primarily by swing traders.
Classification is based on the median hold time across all closed trades:
| Style | Median Hold Time | Characteristics |
|-------|-----------------|-----------------|
| Sniper | < 5 minutes | First-block buyers, MEV-adjacent, extremely fast exits |
| Scalper | 5 min – 1 hour | Quick momentum trades, high frequency |
| Day Trader | 1 – 24 hours | Intraday positions, moderate frequency |
| Swing Trader | 1 – 7 days | Multi-day conviction holds |
| Position Holder | > 7 days | Long-term accumulation, low frequency |
See references/classification_methods.md for the full classification algorithm.
Based on median trade size in SOL:
| Tier | Median Trade Size | Typical Behavior |
|------|------------------|-----------------|
| Whale | > 100 SOL | Market-moving entries, often front-run |
| Large | 10 – 100 SOL | Significant but not dominant |
| Medium | 1 – 10 SOL | Active retail traders |
| Small | < 1 SOL | Micro-cap gamblers, new wallets |
| Type | Detection Method |
|------|-----------------|
| Bot | Low inter-trade timing variance (CV < 0.3), uniform sizing |
| Human | Variable timing, variable sizing, session-based activity |
| MEV | Sandwich patterns, consistent small profits, high frequency |
| Focus | Detection Criteria |
|-------|-------------------|
| PumpFun Specialist | > 70% of trades on PumpFun-launched tokens |
| DEX Trader | Primarily swaps on Raydium/Orca/Meteora |
| DeFi Farmer | Frequent LP add/remove, staking operations |
| NFT Trader | Significant NFT marketplace interactions |
| Multi-Strategy | No single category exceeds 50% |
Win Rate — Percentage of trades that are profitable.
win_rate = count(pnl > 0) / count(all_closed_trades)
Minimum 30 trades for statistical significance. A 60% win rate across 200 trades is far more meaningful than 80% across 10 trades.
Average ROI Per Trade — Mean return across all closed positions.
avg_roi = mean((exit_value - entry_value) / entry_value)
Include all fees: platform fees, priority fees, and estimated slippage.
Profit Factor — Ratio of gross profits to gross losses.
profit_factor = sum(winning_pnl) / abs(sum(losing_pnl))
Interpretation: > 2.0 excellent, 1.5–2.0 good, 1.0–1.5 marginal, < 1.0 losing.
Total PnL — Cumulative profit/loss in SOL.
total_pnl = sum(all_trade_pnl)
Maximum Drawdown — Largest peak-to-trough decline in cumulative PnL curve.
drawdown = (peak_equity - trough_equity) / peak_equity
Sharpe-Like Ratio — Risk-adjusted return metric.
sharpe = mean(trade_returns) / std(trade_returns) * sqrt(trades_per_year)
See references/performance_metrics.md for detailed formulas, edge cases, and interpretation guidelines.
| Metric | Calculation | What It Reveals |
|--------|------------|-----------------|
| Trades per day | total_trades / active_days | Activity level and capacity |
| Average hold time | mean(exit_time - entry_time) | Trading style confirmation |
| Token diversity | unique_tokens / total_trades | Specialization vs. diversification |
| Peak hours | mode(hour_of_trade) | Session patterns, timezone hints |
| Activity streaks | consecutive active days | Dedication and consistency |
The SolanaTracker API provides pre-computed PnL data per wallet per token.
import httpx
url = f"https://data.solanatracker.io/pnl/{wallet_address}"
headers = {"x-api-key": os.getenv("ST_API_KEY")}
resp = httpx.get(url, headers=headers)
pnl_data = resp.json()
Response includes per-token: realized, unrealized, total_invested, total_sold, num_buys, num_sells, last_trade_time.
For granular transaction-level analysis, use the helius-api skill to fetch parsed transaction history. This provides exact timestamps, amounts, and program interactions.
Birdeye's trader endpoints provide wallet-level analytics. See the birdeye-api skill for endpoint details.
DexScreener does not provide wallet-level PnL but can be used to validate token prices at trade timestamps.
Before following a wallet's trades, verify these criteria:
risk_score = 0 # 0 = low risk, 100 = high risk
if wallet_age_days < 14:
risk_score += 25
if top_trade_pnl_pct > 0.5:
risk_score += 20
if recent_pf < historical_pf * 0.7:
risk_score += 15
if bot_probability > 0.7:
risk_score += 15
if win_rate > 0.8:
risk_score += 10
if unique_tokens < 5:
risk_score += 15
whale-tracking: Identify large wallets, then profile them here for behavioral contexttoken-holder-analysis: Profile top holders of a token to assess holder qualitysolana-onchain: Fetch raw transaction data for deep-dive analysishelius-api: Parsed transaction history for granular trade reconstructionbirdeye-api: Token price data for PnL validation# Set environment variables
# export WALLET_ADDRESS=YourTargetWallet...
# export ST_API_KEY=your_solanatracker_key (optional)
python scripts/profile_wallet.py
# Or use demo mode:
python scripts/profile_wallet.py --demo
# export WALLET_ADDRESSES=Wallet1...,Wallet2...,Wallet3...
# export ST_API_KEY=your_solanatracker_key (optional)
python scripts/compare_wallets.py
# Or use demo mode:
python scripts/compare_wallets.py --demo
| File | Description |
|------|-------------|
| references/classification_methods.md | Hold time, size, bot detection, and focus classification algorithms |
| references/performance_metrics.md | Detailed metric formulas, interpretation, edge cases, and decay detection |
| scripts/profile_wallet.py | Profile a single wallet: fetch data, compute metrics, classify, report |
| scripts/compare_wallets.py | Compare multiple wallets side-by-side with ranking |
uv pip install httpx
| Variable | Required | Description |
|----------|----------|-------------|
| WALLET_ADDRESS | For profile_wallet.py | Solana wallet address to profile |
| WALLET_ADDRESSES | For compare_wallets.py | Comma-separated wallet addresses |
| ST_API_KEY | No | SolanaTracker API key for PnL data |
Automatically organizes invoices and receipts for tax preparation by reading messy files, extracting key information, renaming them consistently, and sorting them into logical folders. Turns hours of manual bookkeeping into minutes of automated organization.
Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.
This skill calculates key financial ratios and metrics from financial statement data for investment analysis
This skill provides an advanced financial modeling suite with DCF analysis, sensitivity testing, Monte Carlo simulations, and scenario planning for investment decisions
This skill retrieves upcoming earnings announcements for US stocks using the Financial Modeling Prep (FMP) API. Use this when the user requests earnings calendar data, wants to know which companies are reporting earnings in the upcoming week, or needs a weekly earnings review. The skill focuses on mid-cap and above companies (over $2B market cap) that have significant market impact, organizing the data by date and timing in a clean markdown table format. Supports multiple environments (CLI, Desktop, Web) with flexible API key management.
Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol to discover paid services, pay for API calls, monetize an API, or query onchain data. Use whenever the user mentions signing in, login, authentication, wallet status, balance, address, sending money, paying someone, transferring tokens, ENS names, swapping/trading/converting tokens, funding/topping up/onramp, USDC, ETH, POL, SOL, the x402 bazaar, paid APIs, monetizing an endpoint, or querying onchain data on Base.
Access real-time and historical stock market data, forex rates, cryptocurrency prices, commodities, economic indicators, and 50+ technical indicators via the Alpha Vantage API. Use when fetching stock prices (OHLCV), company fundamentals (income statement, balance sheet, cash flow), earnings, options data, market news/sentiment, insider transactions, GDP, CPI, treasury yields, gold/silver/oil prices, Bitcoin/crypto prices, forex exchange rates, or calculating technical indicators (SMA, EMA, MACD, RSI, Bollinger Bands). Requires a free API key from alphavantage.co.
Braintree Automation: manage payment processing via Stripe-compatible tools for customers, subscriptions, payment methods, and transactions
Take agiprolabs/wallet-profiling from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, uv.
Without those the skill loads but fails at the first command.