逐项拆解 Heat 热度分
Heat 是一个 0 到 100 的有界分数,按一枚迷因币此刻内部发生了多少事来排序,衡量的基准是它自身的规模,而不是市场其余部分。它由服务端的单一函数计算,本页记录了该函数的每一项。
Heat 回答的问题
市值列排出的是最大的币。24 小时成交量列排出的还是最大的币,因为成交量随规模放大:在清淡的一天,榜上最大的池子即便内部毫无动静,成交也会超过一个小池子。
Heat 提出的是另一个问题。相对于资金所在标的的规模,资金在哪里流动;最近一小时是否比之前流动得更猛;推动流动的是买方还是卖方;以及池子是否深到足以让这一切成立。
每一项都是有界的。这正是整个分数围绕构建的设计约束:任何单一输入都无法独占排名。一枚上涨四千个百分点的币,不能仅凭价格就把一枚上涨六十个百分点的币压下去;一个非常大的池子,也不能用它几乎不周转的成交量买到名次。
分数的构成
五个加权分项产生一个 0 到 1 的活跃度分数。该分数再乘以方向门以及适用的惩罚项,经钳制后,以 0 到 100 的标度保留一位小数输出。
activity = SUM( weight[i] * part[i] ) for the five parts below
score = activity * direction * PRODUCT(penalties)
reported = round( clamp(score, 0, 1) * 100, 1 )
权重之和恰好为一,因此在任何东西作用于它之前,活跃度项本身就已被限制在 0 到 1 的区间内。
| 分项 | 权重 | 回答什么 |
|---|---|---|
| Turnover | 0.30 | 成交量相对于币自身的规模 |
| Momentum | 0.22 | 价格实际走到了哪里,经过衰减 |
| Acceleration | 0.20 | 最近一小时是否比最近六小时更热 |
| Buy pressure | 0.14 | 哪一方在交易 |
| Freshness | 0.14 | 池子有多年轻 |
两个有界化函数
这两个函数的作用,是在不做硬性截断的前提下把无界的量变成有界的量。每个函数都接受一个拐点参数,即输出达到一半时的取值。低于拐点时函数接近线性,高于拐点则趋于饱和。
soft(v, mid) = v / (v + mid) for v > 0, else 0
signed(pct, mid) = sign(pct) * soft(|pct|, mid)
拐点的选择正是判断所在之处,也是全篇唯一以主张而非测量确定数值的地方。下面逐一给出取值及其理由。
周转率,权重 0.30
核心信号。最近 24 小时的成交量除以币的规模,因此一个把全部流通量都转了一遍的小池子,得分高于只转了一小片的大池子。
size = max( 1, min( marketCap, liquidity * 40 ) )
turnover = soft( volume24h / size, 0.35 )
分母取申报市值与池子流动性的四十倍之中较小者。这道保护很关键:一个代币可以通过增发无人持有的供应量申报几乎任意的市值,用这个被夸大的数字去除,会让一枚极为活跃的币显得平静。把分母上限定在真实池子的四十倍,既能防止虚构市值掩盖活跃度,也能防止一个薄池子显得比实际更热闹。
拐点 0.35 意味着一天之内周转掉自身规模百分之三十五的币,在这一项拿到一半的分。市值缺失时回退到完全稀释估值。
加速度,权重 0.20
把此刻正在动的币和今早动过的币区分开的,就是这一项。它拿最近一小时和六小时的运行速率相比,并为最近五分钟加上一个短期项。
accel = max(0, h1 - h6/6) + max(0, m5 * 3)
acceleration = soft( accel, 12 )
两个项都以零为下限,因此一枚正在降温的币在这里只是拿不到分,而不会变成负值去和其他分项对抗。把六小时涨跌除以六,就换算成了每小时速率,使比较处于同一量纲。拐点 12 意味着每小时比自身近期节奏快出约十二个百分点的币可拿到一半的分。
动量,权重 0.22
价格实际走到了哪里,跨两个时间窗口,并做了强力衰减,好让旧的抛物线消退,而不是霸占榜首整整一天。
raw = 0.65 * signed(change24h, 45) + 0.35 * signed(change6h, 20)
momentum = clamp(raw, -1, 1) * 0.5 + 0.5
拐点表明,45% 的一天和 20% 的六小时,在各自的窗口上各值一半的分。最后一行把带符号的结果重新映射到 0 到 1,因此走平的币位于 0.5 而不是零,下跌的币则落在中点以下,而不是被排除在外。
买盘压力,权重 0.14
哪一方在交易,并按证据的多寡加权。十一笔交易里九比一的买入比例说明不了什么;两千笔交易里同样的比例则说明很多。
ratio = buys / (buys + sells) 0.5 when there are no trades
confidence = soft( buys + sells, 150 )
buyPressure = 0.5 + (ratio - 0.5) * confidence * 2
关键在于置信系数。交易笔数很少时,无论比例看起来多么悬殊,这一项都会塌回中性的 0.5,因此寥寥几笔交易造不出信号。到 150 笔时,该比例按一半强度计入,并从那里趋近满强度。
新鲜度,权重 0.14
对池子存续时间做指数衰减,时间常数为 96 小时。
freshness = exp( -ageHours / 96 ) 0.25 when the age is unknown
这使得第一天接近满分,三天约 0.47,一周约 0.13,两周之后约 0.03。这是整个分数中最带立场的一项,纳入它只有一个理由:迷因行情压倒性地起于年轻的池子。对于无法确定存续时间的代币,我们给固定的 0.25,而不是零或满分,这样缺失的时间戳既不奖励它,也不摧毁它。
方向门
光有活跃度并不等于热度,而这正是实践中最要紧的一道修正。一枚崩跌七成的币会打出巨量成交、猛烈加速,并在所有人离场时显示很高的成交笔数。单看活跃度各项,它会高居榜首。那是一份没人愿意读的排名。
direction = clamp( 0.55 + 0.45 * signed(change24h, 45)
+ 0.25 * max(0, signed(change1h, 8)),
0.12, 1.15 )
活跃度分数会乘以这道门。一枚当日下跌 70%、最近一小时没有反弹的币,保留约 28% 的活跃度分数。一枚已经下跌但在最近一小时正在反弹的币则保留得多得多,因为砸盘后的反弹确实值得关注。上涨的币则保持原样,或至多被上调百分之十五。
下限取 0.12 而非零是刻意的。剧烈崩塌应当被推到榜单下方,而不是从榜单上抹去:它依然是信息,隐藏它只会让排名更不诚实,而不是更安全。
惩罚项
方向由方向门处理。惩罚项处理的是另一类问题:那些让高分变得毫无意义、而非仅仅偏高的情形。每一项都是乘数,因此会叠乘。
| 条件 | 乘数 | 原因 |
|---|---|---|
| liquidity < $15,000 | liquidity / 15,000, floored at 0.15 | 低于这个深度,上面的各项输入基本都是噪声 |
| liquidity = 0 | 0.15 | 没有可供交易的对手盘 |
| marketCap / liquidity > 5,000 | 0.35 | 估值远远超出支撑它的池子 |
| trades < 10 | 0.4 | 几乎没人在交易它,不论图表怎么显示 |
| price is stale | 0.5 | 我们已不再信任的价格不该领跑实时排名 |
分布实际上是什么样子
下列数字是一份冻结快照,而非实时查询,这样它们始终可以对照本页写作时所依据的同一份文件加以核验。下载它并自行重算。
/data/heat-snapshot.json 采集于 2026-09-09
| 指标 | 数值 |
|---|---|
| 参与评分的代币数 | 336 |
| 最高分 | 59.7 |
| 第 90 百分位 | 23.1 |
| 中位数 | 11.4 |
| 第 10 百分位 | 7.6 |
| 最低分 | 0.2 |
| 达到或超过 45 的热门线 | 5 |
形状才是要点。中位数落在 11 附近,任一次快照中只有寥寥数枚币越过 45。四十几分确实罕见,界面之所以从 45 起把一枚币标记为热门,原因正在于此。90 分并不是这个函数被设计出来产生的结果:那需要所有分项同时逼近各自上限,价格上涨,且没有任何惩罚。
一次完整拆解
同一份快照的榜首部分,每一项都按它进入加权求和时的原值列出。它们由评分函数本身生成,而非由某个重写版本生成,因此这张表不可能与它所记录的代码发生偏离。
| 代币 | Heat | 周转 | 加速 | 动量 | 买盘 | 新鲜度 | 方向 |
|---|---|---|---|---|---|---|---|
| DUO | 59.7 | 0.95 | 0.11 | 0.88 | 0.45 | 0.57 | 0.93 |
| USEFUL | 58.8 | 0.74 | 0.76 | 0.73 | 0.57 | 0.35 | 0.89 |
| PURR | 57.2 | 0.63 | 0.76 | 0.87 | 0.66 | 0.01 | 0.91 |
| Stonks | 46.8 | 0.84 | 0.41 | 0.61 | 0.59 | 0.26 | 0.8 |
| PURPS | 45.6 | 0.93 | 0 | 0.64 | 0.56 | 0.01 | 0.91 |
| BTC | 44.7 | 0.56 | 0 | 0.92 | 0.69 | 0.09 | 0.93 |
从左往右读一行,排名便自行解释。一枚币可以在周转率上领先,却在加速度上一分未得,这说明资金在那里,但走势并未提速。另一枚币可以在周转率平平的情况下靠新鲜度和买盘压力撑起榜单,那是另一种值得关注。
Heat 不是什么
Heat 衡量的是活跃度。它不是安全评级。一枚币可以极热同时又是陷阱,这个分数刻意不假装相反:惩罚项压低的是毫无意义的分数,而不是危险的分数。
它不是预测。函数中没有任何前瞻性成分,也没有任何一项是拟合未来收益得来的。它是对近期过去的概括,并经过有界化处理,使任何单一输入都无法支配结果。
它不是投资建议。迷因币风险很高,多数会失去价值。行动之前请使用安全检查和代币页面,而不是单独一个数字。
如何复现
只有一处定义,且运行在服务端,因此表格、排序和 API 中出现的是同一个分数。客户端从不重新计算。
| 位置 | 内容 |
|---|---|
scripts/token-heat.mjs | 评分函数与权重 |
test/token-heat.test.mjs | 锁定这些数字的行为测试 |
GET /api/tokens | 在每一行返回 heat 与 heatRank |
/data/heat-snapshot.json | 本页所引用的冻结快照 |
有一点值得明确说明。按链列出代币的聚合页使用的是一种更简单的、在构建时计算的排序,即按 24 小时趋势加权的 24 小时成交量,那些页面上正是用这些字眼描述的。该排序不是 Heat 列,也不共享它的边界。
常见问题
- Heat 分数高是买入信号吗?
- 不是。Heat 衡量的是近期过去中,一枚币相对于自身规模的活跃程度。它不含任何前瞻性成分,也没有拟合未来收益。一枚正在崩塌的币仍然可能表现出真实的活跃度,这正是方向门存在的原因,也是该分数不是安全评级的原因。
- 成交量没有上限,为什么分数封顶在 100?
- 每个分项都要经过一个会饱和的有界化函数,因此没有任何输入能独占排名。若非如此,一枚上涨数千个百分点的币,或一个非常大的池子,就会凭单一分项支配榜单,另外四项也就不再重要了。
- 为什么年轻的池子比老的池子分数更高?
- 新鲜度的权重是 0.14,以 96 小时的时间常数指数衰减,因为迷因行情压倒性地起于年轻的池子。这是整个分数中最带立场的一项。它无法独自撑起一枚币:即便满分,在方向门和各项惩罚之前也只贡献 14 分。
- 流动性几乎为零的币会怎样?
- 流动性低于 15,000 美元时,分数要乘以流动性除以 15,000 的结果,下限为 0.15。完全没有流动性时,乘数固定为 0.15。各项输入仍会计算,只是不足以被信任去领跑一份排名。
- Heat 列与按链聚合页的排序一致吗?
- 不一致。链页使用的是一种在构建时计算的更简单排序,即按 24 小时趋势加权的 24 小时成交量,并在页面上写明了这一点。Heat 列则是本文所记录的 0 到 100 有界分数。
Keep reading
Nothing here is financial advice. Meme coins are high risk and most lose value. Read the full risk disclosure before trading.