How HODL Health works
Current version: health-v0.3.0. 28 checks across 7 domains.
What Health is
Health is a 0 to 10 snapshot of the observable condition of a Solana token and its market, built only from data HODL could actually see at scan time.
It is not a prediction. A high score does not mean a token will go up, and a low score does not mean it will fail. It is not financial advice.
When data is missing, the check shows N/A and is left out of the average. It is never counted as zero. But a token whose Security or Liquidity could not be checked, or with under 60% of checks observed, is capped (see Score caps), so unknowns cannot make a token look healthy.
How the score is built
Each check scores 0 to 10. A domain score is the average of its observed checks. The overall score is the weighted average of the observed domains, with the weights re-scaled to the domains that had data.
Score caps
An average can hide a serious problem, so certain red flags set a ceiling. The final score is the lower of the average and the lowest ceiling that applies. A rugged token can never score above 1, whatever else looks fine. The score screen shows which cap applied.
The ceilings are provisional. Flags that compare against a recorded peak apply only to tokens that have been on a watchlist, because that is when HODL records the peak.
Coverage and the Partial label
Coverage is the share of checks that were observed. When coverage is under 60%, or when Liquidity or Security could not be observed at all, HODL labels the result Partial instead of giving it a confident label.
Otherwise the display label comes from the score: 7.5 and above is Healthy, 5.5 and above is Mixed, 3.5 and above is Weak, and anything lower is Poor. The labels are for display and do not change the score.
Market (15%)
What is price actually doing?
5m price stability
How far price moved in the last 5 minutes, in either direction.
Scoring: 10 when flat, falling smoothly with the size of the move (about 3.7 at a 20% move).
1h price stability
How far price moved in the last hour.
Scoring: 10 when flat; about 3.7 at a 50% move.
6h price stability
How far price moved in the last 6 hours.
Scoring: 10 when flat; about 3.7 at an 80% move.
24h price stability
How far price moved in the last 24 hours.
Scoring: 10 when flat; about 3.7 at a 150% move.
Drawdown from 24h high
How far price sits below its highest point of the last 24 hours (from 15-minute candles).
Scoring: 10 at the high; about 3.7 when 40% below it.
Volatility (15m candles)
The typical candle-to-candle move over 24 hours, scaled to a 15-minute equivalent. Pools under 6 hours old use 5-minute candles.
Scoring: 10 when steady; about 3.7 at a 4% typical move.
Recovery from 24h low
After the largest drop of the last 24 hours, how much of it price has won back.
Scoring: 9 when there was no drop of 10% or more. Otherwise 3 (no recovery) up to 10 (fully recovered).
Liquidity (25%)
Can the market absorb trading?
Absolute liquidity
Dollar value of liquidity in the pool.
Scoring: Log scale: 0 at $1,000, 10 at $10 million.
Liquidity / market cap
Liquidity as a share of market cap.
Scoring: Log scale: 0 at 1%, 10 at 50%.
24h volume / liquidity
24h trading volume divided by liquidity.
Scoring: 9 from 0.1x to 5x, 6 from 5x to 15x, 5 from 0.02x to 0.1x, 3 above 15x (churn), 2 below 0.02x (dead market).
LP locked
Share of liquidity that is locked or burned, weighted across pools (from RugCheck).
Scoring: The locked percentage divided by 10.
Price impact ($1k buy)
Estimated price impact of a $1,000 buy, assuming an even constant-product pool.
Scoring: 10 at no impact; about 3.7 at 10% impact. This is an estimate, not a quote.
Flow (15%)
Who is buying and selling?
Buy/sell flow (1h, 6h fallback)
Buys versus sells by transaction count over the last hour, or the last 6 hours when the hour has fewer than 20 trades.
Scoring: 7 when balanced, 10 when all buys, 0 when all sells. N/A when both windows have fewer than 20 trades.
24h buy/sell flow
Buys versus sells by transaction count over 24 hours.
Scoring: Same scale as above. N/A under 20 trades.
Trading activity (24h)
Total number of trades in 24 hours.
Scoring: 2 under 50 trades, 5 under 300, 8 under 1,500, 10 above.
24h volume / market cap
24h trading volume divided by market cap. A very high ratio can mean churn or wash trading, though it cannot prove it.
Scoring: 10 at 5x or below, 0 at 60x or above, on a log scale between.
24h trades per holder
Total trades in 24 hours (buys plus sells) divided by the number of holders. Many trades from few holders can mean a few wallets trading back and forth.
Scoring: 10 at 10 trades per holder or fewer, 0 at 100 or more, on a log scale between. N/A under 100 trades.
Holders (15%)
Who owns the supply?
Top-holder concentration (excl. pools)
Share of supply held by the largest holder that is not a known pool.
Scoring: 10 at 10% or less, 0 at 50% or more, linear between.
Top 10 non-pool holders
Combined share of supply held by the 10 largest non-pool holders.
Scoring: 10 at 15% or less, 0 at 60% or more, linear between.
Holder count
Number of holders.
Scoring: Log scale: 0 at 10 holders, 10 at about 3,000.
Insider supply
Share of supply held by wallets RugCheck links to insiders.
Scoring: 10 at 0%, 0 at 25% or more.
Creator (10%)
Is the creator a risk?
Rugged flag
Whether RugCheck marks the token as rugged.
Scoring: 0 if rugged, 10 if not.
Creator allocation
Share of supply held by the creator wallet, when it appears among the top holders.
Scoring: 9 when the creator is not among the top holders. Otherwise 10 minus half the percentage held (0 at 20%).
Security (15%)
Can the contract hurt holders?
Mint / freeze authority
Whether the mint authority (can create more supply) and freeze authority (can freeze wallets) are revoked.
Scoring: 10 for each revoked authority, 0 for each still set, averaged.
Transfer fee
Whether the token charges a fee on transfers.
Scoring: 10 for none. Otherwise 10 minus twice the fee percentage.
Jupiter verification
Whether Jupiter lists the token as verified.
Scoring: 9 if verified, 5 if not. This is a listing check, not an endorsement.
Lifecycle (5%)
How mature is the token?
Token age
Time since the token was first detected.
Scoring: 1 under 1 hour, 3 under 6 hours, 5 under 24 hours, 7 under 3 days, 8.5 under 7 days, 10 after that.
Pool age
Time since the trading pool was created.
Scoring: Same scale as token age.
Data sources
Market data comes from DexScreener, chart candles from GeckoTerminal, and holder, lock and contract data from RugCheck. These are third parties. Their data can be late, incomplete or wrong, and HODL cannot verify it independently.
Known limits
Thresholds are provisional and will change as HODL learns from real tokens. Every change raises the version number below.
HODL does not yet see wallet-level activity such as whale sells or sniper clusters. Alerts compare scans taken about every 5 minutes, so fast moves between scans can be missed or reported late.
Version history
health-v0.3.0
Added wash-trading checks, a holder-count trend and RugCheck risk flags. Tape is now direction-aware and age penalties are softer. Young pools use 5-minute (and 1-minute under 2 hours) candles so market checks are not blank. Fresh launches are not treated as drained pools, and pump.fun bonding-curve tokens use curve reserves. A held 24h fall gets a higher ceiling, and higher again when price has steadied. Early-token ceilings are explained in the UI.
health-v0.2.0
Added score caps. A serious red flag now sets a ceiling the score cannot exceed, whatever the average says. Missing security or liquidity data and thin coverage also cap the score. Caps are provisional and are shown next to the score.
health-v0.1.2
Seven domains and 26 checks. Flow falls back to a 6-hour window when the last hour is too thin. Holder checks exclude known pools. Results are labelled Partial when coverage is low or Liquidity or Security was not observed.
health-v0.1.1
Added buy/sell flow from transaction counts, with N/A below 20 trades.
health-v0.1
First version: four groups and seven checks.