Wallet Quality
Is this wallet actually skilled, or just lucky and large? Wallet Quality answers that with a position-correct skill signal — the metric Conyr is built around and the one commodity APIs get wrong.
Most providers report a per-exit win rate: profitable exits / total exits. A trader who scales out of one winner over five sells books five “wins.” On a real leaderboard whale we measured 44.6% per-exit vs 1.96% position-correct — a 22× distortion. The position-correct metrics below (gated on full-position exits) predicted forward profitability +10–14 points beyond raw past PnL in backtest.
The quality object
| Field | Type | Description |
|---|---|---|
wallet | string | The wallet |
rated | boolean | true when the wallet has ≥10 closed positions (enough sample to trust the behavioral metrics) |
skill_score | number | Composite 0–100 (see below) |
position_win_rate_pct | number | The differentiator — win rate over full, position-level outcomes |
raw_exit_win_rate_pct | number | The commodity per-exit rate, for contrast |
win_rate_inflation_pts | number | raw − position — how many points the commodity number overstates skill |
disposition_index | number | Avg hold on winners ÷ avg hold on losers (below 1 = cuts losers fast) |
conviction_sizing | number | Avg entry size on winners ÷ on losers (>1 = sizes up when right) |
profit_factor | number | Gross profit ÷ gross loss |
runner_score | number | Tendency to let winners run (0–1) |
roi_p10_pct / roi_p50_pct / roi_p90_pct | number | Per-position ROI distribution |
avg_loss_roi_pct / loss_consistency_stddev | number | Loss size and how consistent losses are |
big_wins / big_losses | number | Count of outsized outcomes |
realized_pnl_usd | number | Total realized PnL over closed positions |
performance_level · trader_type · exit_style · size_class | string | Taxonomy (Labels) |
closed_positions | number | Sample size |
trade_badges | string[] | Behavioral badges |
skill_score
A heuristic, explainable composite in [0, 100] — a weighted blend of the signals that backtested as predictive (weights are operator-tuned, not a calibrated probability):
skill_score = 100 × (
0.40 · position_win_rate
+ 0.30 · profit_factor (mapped 0.5→3.0 ⇒ 0→1)
+ 0.15 · disposition (cuts losers faster ⇒ higher)
+ 0.15 · runner_score
)REST
L2 GET /v1/wallet/{address}/quality
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallet/7xKXtg.../quality"{
"wallet": "7xKXtg...",
"rated": true,
"skill_score": 71.4,
"position_win_rate_pct": 38.2,
"raw_exit_win_rate_pct": 61.0,
"win_rate_inflation_pts": 22.8,
"disposition_index": 0.82,
"conviction_sizing": 1.6,
"profit_factor": 2.1,
"runner_score": 0.64,
"roi_p10_pct": -38.0, "roi_p50_pct": 9.5, "roi_p90_pct": 220.0,
"big_wins": 12, "big_losses": 4,
"realized_pnl_usd": 48210.0,
"performance_level": "PROFITABLE",
"trader_type": "SWING_TRADER",
"exit_style": "DCA_OUT",
"size_class": "SHARK",
"closed_positions": 184,
"trade_badges": ["CONSISTENT_WINNER", "RUNNER_KEEPER"]
}When rated is false (fewer than 10 closed positions) the behavioral metrics are present but not statistically meaningful — treat the wallet as unrated. The endpoint returns null for a wallet with no closed positions in the snapshot.