每项取过去 252 个交易日的滚动分位,分位越高=该维度越"热"。迷你图是该项分位的历史走势,中线为 50 分位。 右侧标注该项进入哪个温度:红点=页面顶部那个数、蓝点=六项等权那个数、蓝点闸门=不进温度但参与蓝点判定。
252 日分位数,把绝对值转成相对历史水平的百分位。100 − pct,使其与其他指标方向一致(高值=情绪热)。d = tanh(r₂₀ / 1.5σ);低于常态的部分记为中性 50。TOP2抱团×2 · 杠杆温度×2 · 上涨拥挤度×3 · 站上MA20×1 · 换手率×1 加权合成红点温度(页面顶部显示的就是它,红点据此触发)。顶是慢过程,底是快事件。情绪见顶靠多日堆积,过滤毛刺有价值;恐慌见底常是 1–3 天的插针,平滑和多日确认恰好把尖峰削平。用同一套参数必然顾此失彼。
红点用红点温度 + 连续3日确认;蓝点用蓝点温度的当日口径(换手率、上涨占比、杠杆多空比取当日值不平滑)且当日成立即触发;黑框用 TOP2 抱团分位 + 上涨拥挤度 + 3日确认。页面顶部显示红点温度,蓝点温度并列在它下方。
r₂₀ 为标普500 的 20 日收益,σ 为其滚动 252 日标准差。d ∈ [−1, +1]:强势上涨 → +1(放量=贪婪);急跌 → −1(放量=恐慌);横盘 → ≈0(放量不含方向信息)。
用 tanh 平滑,符号翻转处不产生跳变。只对高于常态的活跃度定向,避免"缩量下跌=偏热"这类反直觉读数。
采用 percentileofscore(mean):分位 = (小于当前值的个数 + 0.5 × 等于当前值的个数) ÷ 窗口长度 × 100。
已用独立实现与 scipy.stats.percentileofscore 逐点交叉验证,最大偏差 7e-15。