The first command in Axe that surprises people is /similar. You point it at
a wallet — your own, a public one, an outlier you spotted in the tape — and it
returns the cohort of traders that behave like that one. Ranked by closeness,
labeled by archetype. Five names, in less than a second.
The reaction is consistent: what does "similar" actually mean here?
The question is the right one, and it has a longer answer than most retrieval systems get asked to give. This post is about the part of the system that sits before the embedding, the index, the ANN search — the part that turns a wallet into something a model can compare. The fingerprint, before the cohort.
Part 2, dropping next, covers what we do with these fingerprints: the embedding, the cohort retrieval, and — the part most posts skip — how we measure whether the cohorts are actually real.
What "similar" usually means, and why it isn't enough
The naive version of trader similarity is one most people reach for first: take a wallet's trade history, average up some stats — total PnL, win rate, asset preference, average leverage — drop the resulting vector into cosine similarity, return the top-k nearest.
The result is a list of traders who look similar. They aren't. They're traders with comparable outcomes over the same window. Two wallets with identical PnL can get there by completely opposite paths: one running high-conviction directional bets, one farming funding with a delta-neutral basket, one accidentally surviving a leveraged blow-up. They don't share behavior. They share an accident of the period.
For the similarity index to be useful — to tell an operator "if this wallet is loading into BTC, here are five others who behave the same way and are about to load too" — it has to compare what people do, not what happened to them. That distinction is the entire problem.
A fingerprint operates at multiple time scales
The first thing the naive vector misses is that a trader doesn't behave on one time scale. The same wallet might churn fifteen times in an hour, hold a swing for three days, accumulate a position over a month. A summary stat collapses all of those into a single number and loses the texture that matters most.
The Axe fingerprint is built from multi-horizon aggregates. For every wallet that clears a minimum activity bar, we compute features across windows that span from intra-day to multi-month, and we compute them across five different views of the trader's surface area:
- Trade flow. How many fills, what side, how much taker vs. maker, how often the wallet is on the wrong end of a forced unwind. This catches whether someone is paying for liquidity or providing it, and whether they're winning the execution game or losing it.
- Order shape. Limit vs. market vs. trigger; reduce-only ratio; cancel rate. A wallet that places thirty limit orders for every fill behaves very differently from one that mashes market orders, even if their fill count matches.
- PnL path. Win count, loss count, win-PnL distribution, loss-PnL distribution. Not "what did they make" but "how does their PnL stream look when you put it under a microscope."
- Capital usage. Account value, margin used, unrealized PnL across the window. The same notional from a wallet running 5% margin utilization is a different signal than the same notional from a wallet running 95%.
- Position structure. Concentration (one asset or twenty), perp vs. spot mix, position lifetime distribution.
Each view at each horizon contributes features. The result is a fairly long vector per wallet, but a structured one — every dimension has a meaning, and every meaning was chosen by an operator who would want to see it preserved.
Percentile-ranking turns features into behavior
A long feature vector with raw values is still the wrong shape. Leverage in the 1×–50× range trains a similarity model on magnitudes. Notional in the $10² – $10⁹ range trains it on size. The model ends up learning to find "big" wallets when the question was "wallets that behave like this one."
So we don't compare raw features. We compare percentile ranks within the active population. Every feature gets transformed into the wallet's standing on that feature — 0.0 if you're at the bottom of the active universe, 1.0 if you're at the top.
Two benefits, one subtle and one obvious:
The obvious one: the vectors live in [0, 1]^d, which is what well-conditioned similarity wants. Distances are stable across orders of magnitude and there's no whale-effect on the geometry.
The subtle one: percentile rank is adaptive. Hyperliquid grows; new assets list; the vol regime shifts. Raw features drift; the percentile rank of a trader inside the active population is much more stable. The fingerprint says "this wallet is in the 87th percentile of margin utilization across active perps traders." Whether the absolute number for "87th percentile" moves, the wallet's behavioral signature — its position in the distribution — holds up.
This is also what makes the system robust to the fact that markets aren't stationary. The trader who sat at the 90th percentile of margin utilization in August 2025 still sits there in March 2026. The number behind the percentile changed; the operator profile didn't.
Archetypes are operator-defined, not data-derived
Once a wallet has a fingerprint, we tag it with one or more archetypes —
short labels like directional_long, high_leverage, liq_risk that name
a behavioral cluster. Seven archetypes in the current taxonomy, organized
across three axes: directional posture, capital aggression, and risk
proximity.
This is where it's tempting to lie about the methodology, and we'd like to not.
You could derive archetypes from the data. Run k-means or HDBSCAN on the percentile-ranked feature vectors and let the clusters fall out. We tried this. The clusters that emerge are real, but they are clusters the data finds — regime cohorts, recent-entrants vs. veterans, asset-specialist groups. Some are useful; many are artifacts of when a wallet started trading or what it happened to trade during the window. The labels they produce are hard to use: an operator can't open a cohort called "wallets that started in November 2025 and trade SOL more than BTC" and do anything with it.
So we made a different call. The seven archetypes are operator-defined. They're the things a trade-desk PM would name on a whiteboard if you asked them what kinds of traders are out there. The thresholds that decide who gets which tag are calibrated to the percentile distribution, not pulled from prior beliefs — but the axes are the ones an operator wanted to see preserved.
This is a tradeoff and worth being honest about it. The labels are opinionated. They reflect a view of which trader behaviors matter to a human operator. A different lab would draw the lines differently. We think operator-defined-and-data-calibrated is the right shape for a tool meant to sit next to a person making decisions, but the choice has consequences, and we'll come back to those when we talk about evaluation in Part 2.
A trader can be more than one thing
Here's the part that surprised us when we shipped the first labeled bundle: most labeled traders match more than one archetype.
A directional long who runs hot leverage gets directional_long and
high_leverage. A momentum trader with concentrated positions and tight
liquidation distance might pick up four labels at once. Multi-label is the
default; single-label is the exception.
The bundle stores all labels per wallet, plus a confidence per label that captures how far past the threshold the wallet sits. For convenience — because many UI surfaces want one tag, not a list — we expose a "primary" label, which is the first archetype triggered in a fixed order: directional posture first, then capital aggression, then risk proximity.
This is a real product decision, and it has consequences. The wallet whose
primary label is directional_long may also be carrying a strong
high_leverage signal that the surface only hints at via the confidence
score. We talk to operators about this — it's the part of the design we
revisit most.
What's actually in the index right now
The deployed bundle covers 350,430 traders who cleared the labeling bar across a seven-month training window (August 2025 through March 2026). The distribution looks like this:
| Archetype | Count | Share |
|---|---|---|
directional_long | 239,460 | 68.3% |
directional_short | 81,922 | 23.4% |
liq_risk | 13,802 | 3.9% |
high_leverage | 8,461 | 2.4% |
high_concentration | 5,252 | 1.5% |
directional_neutral | 1,181 | 0.3% |
high_margin_utilization | 352 | 0.1% |
The skew is the part most operators key in on. The directional posture
labels carry the bulk of the population by design — every active wallet has
some directional bias, even if it's near zero. The interesting concentration
is at the rare end: 350 wallets running high_margin_utilization is a small
enough cohort that you can read the names. These are the operators who pay
the most attention to capital structure, and they're the cohort that other
operators most want to watch.
The full archetype distribution is part of why the index is useful even before any retrieval happens. You can look at the population shape and learn something. Once you start pulling cohorts out of it, you learn more.
What this is, and isn't
The fingerprint is the substrate. It is not yet similarity.
Two wallets with similar fingerprints — same percentile bins, same archetypes, same multi-label profile — are candidates for being similar. The job of turning fingerprints into a cohort, and the job of proving the cohort is real, both belong to the next post.
That post — Part 2 — covers:
- The retrieval pipeline that turns these fingerprints into a cohort, and why it isn't just cosine on the percentile vectors.
- The contrastive embedding we train on top of the labels, and how the multi-label structure shapes the loss.
- The eval that actually matters: not "do retrieved neighbors share an archetype" (circular — we trained on that) but "do they trade similarly out of sample." With numbers.
The eval section is where the post earns its credibility. We're running it now and Part 2 will land when the numbers do.
If you want to look at the index today: request access,
or sign in if you already have it. /similar is the command.
— Axe Labs