What is Wash Trading?
Wash trading is trading with yourself. One wallet, or a ring of wallets working together, buys and sells the same token back and forth. Nothing really changes hands. The volume figure goes up, and volume is what most people check first when they decide whether a token is worth their time. It buys attention instead of earning it. This page gives you the arithmetic behind every check we run and the line we draw before we say we flagged a token.
- Five checks
- Trailing average
- Risk bands
- Where we abstain
Our estimate, not an accusation
These numbers are our model's estimates. They are not a finding that any person or team has done anything.
Every figure here comes out of software we wrote, reading public price data, reported volume and on-chain trades. A high score means our checks saw the pattern that wash trading leaves behind. Ordinary trading leaves that pattern too, and the limits section lists the cases we know about.
Read a score as evidence you can weigh, not as a verdict. It is not financial advice, and it does not tell you whether a token is safe to buy.
Overview
We score every token we track once a day. Five checks run against it. Four read reported price and volume for the shapes fake trading leaves. The fifth reads the chain and looks for the trade pattern itself.
Each check returns a score from 0 to 100, where 0 is clean. We take a weighted average of the checks that produced a score, rescaling the weights so the checks that did score carry all of it. That gives one composite for the day.
The number we publish is not that composite. It is a trailing average of the daily composites, and the band beside it reads off the same average, so the figure and the label cannot disagree.
The five checks, and the arithmetic in each
A token can trip one of these without tripping any of the others. Here is how each number is worked out.
- Volume against market value. The day's reported volume divided by the token's market value, run through a curve. A ratio up to 0.15 scores 10 or less. A ratio of 0.5 scores 40, a ratio of 1 scores 70, a ratio of 3 scores 90, and the curve reaches 100 at 6. We do not run this check below $100,000 in market value, where the ratio swings on its own.
- Price that will not move. We bucket the last seven days of price data into hours and take the hours where volume sat in this token's own top quartile. Of those busy hours, we count the ones where the price range stayed under 30 percent of the token's median hourly movement. The score is that count as a share of the busy hours, times 100. Measuring flat against a token's own habit rather than a fixed percentage stops a naturally steady token from scoring for being steady. The 30 percent line is held between 0.05 and 0.5 percent so the check still bites on a violent small cap. We need twelve hours of data before we run it.
- Volume spike. The latest volume against this token's own 30-day average. Under three times the average the check scores 0, and it climbs from there to 100 at five times. The 24-hour price change then halves it. A price that moved more than 2 percent halves the score, because a spike that carried the price is a market doing what markets do. Where we have no price-change reading, the check returns nothing rather than treating a missing number as a flat price.
- Peer comparison. The same volume-to-market-value ratio, divided by the median ratio among tokens sharing one of its categories. Three times the peer median scores 50, five times scores 80, ten times scores 100. We need at least three peers with a ratio of their own, or the check declines to answer.
- Round trips. This one reads the chain. We look for the same wallet buying a token and then selling within 30 minutes at a size within 10 percent of the buy. Each such buy counts once, however many sells it pairs with, and we divide by every trade we captured for that token over 30 days. That share maps to a score: 2 percent scores 30, 5 percent scores 50, 10 percent scores 70, 25 percent scores 90, and 50 percent reaches 100. We only run it when we captured at least 200 trades in the window. The next section explains why it works differently from the other four.
A token with less than a month of price history has its composite cut to 70 percent of what the checks produced. New tokens trade unevenly while they find a price, with nobody washing anything.
When a check has nothing to say
A check produces a score only when the data behind it is there. Without that input it returns nothing at all, and nothing is not zero. A zero would say we looked and found the token clean.
Each check has its own condition. Volume against market value and the peer comparison both need a market value over $100,000, and the peer comparison also needs three peers. Price that will not move needs twelve hours of price data in the last week. The volume spike needs a 24-hour price change to weigh the spike against. Round trips need 200 captured trades.
So a token can be scored on four checks, or three, or one. We rescale the weights across whichever checks did score, so the composite stays a number out of 100 rather than a number dragged down by the checks that stayed silent.
Coverage also caps the band. The top two bands need two separate checks reading 45 or above, so a token only one check could score never reaches them, whatever that one check says. Fewer scored checks leaves fewer that can corroborate, and we would rather hold a token in a lower band than name it on a single measurement.
You can see this on the token page. A check that abstained reads not measured, with an empty dashed outline where its bar would be.
Why round trips can only raise a score
We do not see every trade. Once a day we capture a page of recent on-chain trades for each token, and for most tokens that page covers part of the day rather than all of it. It is a sample, not a census.
The asymmetry is built into the check. A round trip in our sample is proof one happened. No round trip in our sample proves nothing, because we only looked at a slice of the day.
So the round-trip score can push a composite up and can never pull one down. We work the composite out twice, once without round trips and once with them, and keep the higher of the two.
The check also declines rather than guessing. Under 200 captured trades it reports no reading. At 200 or more with no round trip found, it also reports no reading. It never reports a zero, because a zero would read as a clean result we cannot support.
The trailing average and the window
One day's composite moves around for reasons that have nothing to do with the token, so we smooth it. The published number is an exponentially weighted mean of the daily composites over the trailing 30 days, on a seven-day half life. A reading a week old counts half as much as today's. A reading two weeks old counts a quarter as much. One odd day nudges the number. A month of odd days moves it.
The weighting runs on how many days ago a reading was taken, not on its position in the list, so a gap in the data decays like the time it covers.
Plenty of tokens have fewer than 30 scored days, because they are new to us or went quiet for a stretch. We print the count we actually have, and the average covers those days and no others. We never call a short window a month.
The token page shows the trailing average as the headline, with the day's raw reading beside it.
Risk bands, and what flagged means
The trailing average maps to one of four bands. The top two also need corroboration, meaning two of the five checks reading 45 or above on their own. One check reading high is one measurement. Two checks reading high separately is a pattern.
- Minimal indicators
- 20 or below. Little or no sign of wash trading.
- Some indicators
- Above 20, up to 45. A few patterns worth noting. A token whose average sits higher but rests on one accusing check is held here as well, because we will not make the stronger claim on a single measurement.
- Many indicators
- Above 45, up to 55, with two or more checks accusing. Several patterns line up. Treat the volume with caution.
- Severe indicators
- Above 55, with two or more checks accusing. Strong signs that much of the volume is fake.
- No recent trades
- Shown in place of a band rather than as a band of its own. The token has barely traded, so there is nothing to measure.
We say we flagged a token on a day when both halves held that day. The trailing average was above 45, and at least two of the five checks read 45 or above. A day that met one half is not a flagged day.
The band and the flagged-day count come off the same score under the same rule, so the two cannot contradict each other. A token can sit in a low band today and still carry flagged days in its window. That is a token whose readings have come down, and the sentence we publish on its page says so.
Where the score appears
The trailing average and its band follow a token everywhere we show it.
- On the token's own page. A Wash Trading Detector panel carries the trailing average and the window it covers, the day's raw reading, how many days in that window we flagged, and each of the five checks as its own meter.
- On the tokens list, and in a game's related-tokens table. The band appears as a compact badge beside the price and the Token Health score.
- In the analysis text on a token page. The paragraph names the check driving the reading once one runs high enough to point at, such as volume that dwarfs the market value.
Limits
A flagged reading is a reason to look harder before you trust a volume figure. A clean reading is not a promise.
- Minimal does not mean safe. It means our checks found nothing to flag. Plenty of risk sits outside what this tool looks at.
- Small tokens sit outside two of the checks. Below $100,000 in market value we skip volume against market value and the peer comparison, because the ratio swings widely on its own at that size.
- Ordinary trading explains most single signals. Market makers move size without moving price, and reward programmes create bursts of activity.
- Four of the checks trust reported volume. If the volume figure an exchange publishes is wrong before it reaches us, those four inherit the error. Only the round-trip check reads the chain itself.
- These are our scores, from our model. They describe what our measurements found in public data. They are not a finding that anyone has done anything.
What this model does well is tell you which volume figures deserve a second look before you rely on them.