看懂数值怎么读、避开两个最常见的误读,再放进策略、自己扫阈值。
合约交易员看起来很乐观,就代表该追多吗?市场情绪只告诉你「比这个币平常乐观多少」,不告诉你乐观到什么绝对程度——这是最多人读错的地方。
市场情绪(Market Sentiment,MS)是 Blave 自制的情绪指标,衡量合约交易员偏乐观还是悲观,而且是跟这个币自己的平常水准比。
数值没有上下限,0 附近是平常水准,绝对值越大越反常;±2 以上少见、±3 以上极端,各币用同一把尺;阈值请用回测自己扫。数据工作室的状态徽章用以下阈值分级:
| 数值 | 数据工作室徽章 | 意思 |
|---|---|---|
| ≥ +3 | 过度乐观 | 比平常乐观得多,属极端值 |
| +2 ~ +3 | 高度乐观 | 明显比平常乐观 |
| +0.5 ~ +2 | 乐观 | 比平常乐观 |
| −0.5 ~ +0.5 | 中立 | 跟平常差不多 |
| ≤ −0.5 | 悲观/高度悲观/过度悲观 | 与正值对称,阈值是 −0.5、−2、−3:比平常悲观 |
实际分布不对称,上缘比下缘深。以下是 Blave 实测的分位数,1 小时 K 线,期间 2024-09-15~2026-09-14,每小时取一个值(n = 17,520):
| 币种 | p1 | p50 | p99 | 大于 0 的时间比例 |
|---|---|---|---|---|
| BTC | −2.84 | +0.03 | +4.00 | 51.0% |
| ETH | −2.98 | +0.18 | +3.64 | 55.1% |
| SOL | −2.59 | +0.13 | +3.79 | 54.1% |
| DOGE | −2.04 | +0.34 | +4.02 | 60.3% |
四个币大于 0 的时间都超过一半,DOGE 达 60.3%;p99 都在 +3.6 以上,p1 只到 −2.0~−3.0。做多、做空的阈值不要用同一个绝对值,换币也要重算。
市场情绪比的是这个币自己的平常水准。一个长期偏乐观的币,乐观就是它的平常,数值会回到 0 附近——这时 0 的意思是「跟平常差不多」,不是「没人看多也没人看空」。
反过来,一个币从非常乐观退回普通乐观,数值可能转成负的,但交易员其实仍然偏多。同样是 +2,放在不同币、不同时期,背后的实际情绪也可能差很多。
市场情绪描述的是现在的情绪有多反常,不是对价格的预测。极端乐观之后可能继续涨,也可能反转;Blave 没有验证过哪一种比较常发生。
币价短时间大涨或大跌之后,数值也容易跟着偏高或偏低。这时看到的反常有一部分来自价格本身,别单独拿它当进场理由。
目前没有任何官方策略使用市场情绪,以下三种用法都是示意、未回测。代码里的 ±0.5 与 3 是借用数据工作室徽章阈值当起点,不是参数扫描的结果;怎么扫见阈值怎么扫。
最直接的写法:市场情绪高于进场门槛时做多,跌破离场门槛就空仓。两个门槛中间留一段缓冲,避免数值在单一门槛附近来回时频繁进出。
ENTRY_TH = 0.5 # 示意:借用「乐观」徽章门槛
EXIT_TH = -0.5 # 示意:借用「悲观」徽章门槛
def compute_signals(df, entry_th=ENTRY_TH, exit_th=EXIT_TH):
# df['MS'] = 该币的市场情绪数值
signal = pd.Series(np.nan, index=df.index)
signal[df['MS'] > entry_th] = 1.0 # 比平常乐观 → 做多
signal[df['MS'] < exit_th] = 0.0 # 比平常悲观 → 空手
return signal市场情绪变化偏慢,不会对几分钟内的价格跳动反应。它没有回测;阈值与方向(顺势或反向)都要自己扫描验证。
数值到 ±3,代表情绪已经非常极端。一种保守的用法是不把它当进场信号,而是加在既有策略的进场条件上,极端时先不开新仓:
# 示意:|MS| ≥ 3(过度乐观或过度悲观)时不进场
too_hot = df['MS'].abs() >= 3
entry = compute_entry(df) & ~too_hot这不是反转信号,也没有回测:Blave 没有验证过数值到 ±3 之后价格会反转,也没有验证过避开极端值能改善绩效。±3 是相对这个币的平常水准,平常很稳的币,小变动也可能到 ±3。compute_entry 换成你原本策略的进场条件。
市场情绪变化偏慢,适合当背景过滤器:只在它大于 0 时,才接受短窗口指标(例如多空力道)给出的做多信号;市场情绪回到 0 以下就空手。以下是结构示意,compute_fast_entry 换成你自己的条件:
ms = fetch_market_sentiment(SYMBOL, INTERVAL, START, END, hdrs)
df['MS'] = ms['alpha']
regime_long = df['MS'] > 0 # 示意:比平常乐观才做多
fast_entry = compute_fast_entry(df) # 例如短窗口的多空力道条件
signal = pd.Series(np.nan, index=df.index)
signal[regime_long & fast_entry] = 1.0
signal[~regime_long] = 0.0这个组合没有回测,门槛 0 只是示意;实际使用前要扫描参数、看扣掉手续费后的表现。
市场情绪只有一个设定:K 线周期(period),可选 5min、15min、1h、4h、8h、1d,最短 5 分钟。它没有巨鲸警报那种时间窗口参数;周期只决定多久取一次值,不会让数值变快,选 5min 看到的仍是变化偏慢的情绪。
| 周期 | 数据工作室默认显示范围 | 注意 |
|---|---|---|
5min / 15min | 5min:3 天;15min:7 天 | 画得最密,但数值本身变化慢,不适合拿来抓短线 |
1h / 4h | 1h:14 天;4h:30 天 | 策略想每几小时检查一次时使用 |
8h / 1d | 8h:60 天;1d:180 天 | 适合看一段期间的情绪走向 |
选周期的依据是策略多久检查一次,不要期待短周期能抓到短线。数据从 2020-01-01 起(晚上市的币从上市日起);新上市的币刚有数据时,平常水准还没成形,前一段数值参考性较低。
上面的 ±0.5、3、0 都只是起点。比较稳的做法是把进场、出场阈值各列一排候选值,逐组回测,挑一片表现都不差的区域,而不是挑最高的那一格。
results = []
for entry_th in [0.5, 1.0, 1.5, 2.0, 2.5]:
for exit_th in [-1.0, -0.5, 0.0]:
signal = compute_signals(df, entry_th, exit_th)
results.append((entry_th, exit_th, backtest(signal))) # backtest 换成你自己的回测函数,每组都扣手续费后再比阈值要按币种、K 线周期各扫一次,不能沿用别的设定;为什么挑平坦区而不挑最高点,见避免过拟合。
| 页面 | 看什么 |
|---|---|
| 总览 | 整体情绪半圆仪表+乐观、悲观两张排行,字段有币别、24 小时涨跌、指数与状态。 |
| 板块 | 各板块的市场情绪排行。 |
| 历史 | 单一币种的市场情绪柱状图叠上价格,可选 5min~1d 周期,并附 stat 字段;非 Pro 用户最近 7 天的数据延后显示。 |
以下是组合思路,不是验证过的结论:
| 组合 | 用途 |
|---|---|
| 市场情绪 + 巨鲸警报 | 情绪升高时,用巨鲸警报看未平仓量有没有同时反常增加,协助判断乐观背后是否伴随新开仓。 |
| 市场情绪 + 多空力道 | 市场情绪反应慢,用多空力道看短窗口的积极买卖,补上它看不到的短期动态。 |
API 端点是 GET /market_sentiment/get_alpha,参数有 symbol、period 与起止日期(start_date、end_date);Blave Agent 里对应 fetch_market_sentiment。symbol 填 USDT 永续代号(例 BTCUSDT)。只回传已收盘的 K 线,字段是 timestamp、alpha 与 stat,不含价格;没给起始日时默认抓最近 365 天,区间超过 365 天会自动截短。
stat 对象描述最新一笔数值:
| 字段 | 意思 |
|---|---|
up_prob | 模型估计 24 小时后上涨的概率,是估计值,不是保证的胜率。 |
avg_up_return /avg_down_return | 24 小时后上涨时的平均涨幅、下跌时的平均跌幅,不分市场情绪高低。 |
exp_value | up_prob × avg_up_return +(1 − up_prob)× avg_down_return,是小数,不是百分比。 |
is_data_sufficient | 历史数据是否足够;false 时这几个数字仅供参考。 |
stat 是估计值不是胜率——任何阈值都要用你自己的回测验证。