Learn how to read the value, avoid the two most common misreads, then put it into a strategy and scan your own thresholds.
Futures traders look very optimistic. Does that mean you should chase the long? Market Sentiment only tells you how much more optimistic than usual traders are on this coin, not how optimistic they are in absolute terms. That is where most people misread it.
Market Sentiment (MS) is a Blave proprietary sentiment indicator. It measures whether futures traders lean optimistic or pessimistic, compared with the coin's own usual level.
No upper or lower bound: around 0 is the normal level, and the larger the absolute value, the more unusual. Beyond ±2 is rare and beyond ±3 extreme, on the same scale for every coin. Scan your thresholds with a backtest. Data Studio's status badges use these thresholds:
| Value | Data Studio badge | Meaning |
|---|---|---|
| ≥ +3 | Over Optimistic | Far more optimistic than usual, an extreme reading |
| +2 ~ +3 | Highly Optimistic | Clearly more optimistic than usual |
| +0.5 ~ +2 | Optimistic | More optimistic than usual |
| −0.5 ~ +0.5 | Neutral | About the same as usual |
| ≤ −0.5 | Pessimistic / Highly Pessimistic / Over Pessimistic | Mirror of the positive side at −0.5, −2 and −3: more pessimistic than usual |
The actual distribution is lopsided: the upper tail runs deeper than the lower one. These are Blave's measured quantiles on 1-hour bars, from 2024-09-15 to 2026-09-14, one value per hour (n = 17,520):
| Coin | p1 | p50 | p99 | Share of time above 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% |
All four coins spend more than half the time above 0, DOGE as much as 60.3%; p99 is above +3.6 for every coin, while p1 only reaches −2.0 to −3.0. Do not use one absolute value for both long and short thresholds, and recalculate when you switch coins.
Market Sentiment compares a coin with its own usual level. For a coin that has long leaned optimistic, optimism is its usual, and the value returns to near 0. Here 0 means "about the same as usual", not "nobody is bullish or bearish".
The reverse also happens: when a coin falls back from very optimistic to merely optimistic, the value can turn negative while traders still lean long. The same +2 on different coins or in different periods can also reflect very different actual sentiment.
Market Sentiment describes how unusual sentiment is right now; it is not a price forecast. After extreme optimism the price may keep rising or may reverse, and Blave has not verified which happens more often.
After a sharp rise or drop in a coin's price over a short time, the value also tends to run high or low. Part of the unusual reading then comes from the price itself, so do not use it alone as a reason to enter.
No official strategy uses Market Sentiment today, so all three uses below are sketches, not backtested. The ±0.5 and 3 in the code borrow Data Studio's badge thresholds as a starting point; they did not come from a parameter scan. For how to scan, see How to scan thresholds.
The most direct version: go long when Market Sentiment rises above an entry threshold, and go flat when it falls below an exit threshold. The buffer between the two keeps the strategy from flipping in and out when the value hovers around a single level.
ENTRY_TH = 0.5 # sketch: the Optimistic badge threshold
EXIT_TH = -0.5 # sketch: the Pessimistic badge threshold
def compute_signals(df, entry_th=ENTRY_TH, exit_th=EXIT_TH):
# df['MS'] = the coin's Market Sentiment value
signal = pd.Series(np.nan, index=df.index)
signal[df['MS'] > entry_th] = 1.0 # more optimistic than usual -> go long
signal[df['MS'] < exit_th] = 0.0 # more pessimistic than usual -> go flat
return signalMarket Sentiment moves slowly and does not react to price moves within minutes. It has no backtest; scan and verify both the threshold and the direction (trend-following or contrarian) yourself.
A value of ±3 means sentiment is already very extreme. A conservative use is not to treat it as an entry signal but to add it to an existing strategy's entry conditions, skipping new positions while it is extreme:
# sketch: no entry while |MS| >= 3 (Over Optimistic or Over Pessimistic)
too_hot = df['MS'].abs() >= 3
entry = compute_entry(df) & ~too_hotThis is not a reversal signal, and it is not backtested: Blave has not verified that price reverses after a ±3 reading, or that skipping extreme readings improves performance. ±3 is relative to the coin's usual level; on a coin that is usually very calm, a small move can reach ±3. Replace compute_entry with your own strategy's entry condition.
Market Sentiment moves slowly, which suits a background filter: accept long signals from a short-window indicator (such as Taker Intensity) only while it is above 0, and go flat once Market Sentiment drops back below 0. Below is a structural sketch; replace compute_fast_entry with your own condition:
ms = fetch_market_sentiment(SYMBOL, INTERVAL, START, END, hdrs)
df['MS'] = ms['alpha']
regime_long = df['MS'] > 0 # sketch: long only while more optimistic than usual
fast_entry = compute_fast_entry(df) # e.g. a short-window Taker Intensity condition
signal = pd.Series(np.nan, index=df.index)
signal[regime_long & fast_entry] = 1.0
signal[~regime_long] = 0.0This combination is not backtested and the threshold of 0 is only illustrative. Scan the parameters and check performance after fees before you use it.
Market Sentiment has one setting: the bar interval (period), one of 5min, 15min, 1h, 4h, 8h or 1d, with 5 minutes the shortest. It has no time-window parameter like Whale Hunter's; the interval only sets how often a value is taken and does not make the value move faster, so at 5min you still see slow-moving sentiment.
| Interval | Data Studio default range | Notes |
|---|---|---|
5min / 15min | 5min: 3 days; 15min: 7 days | Densest plot, but the value itself moves slowly; not for short-term timing |
1h / 4h | 1h: 14 days; 4h: 30 days | For strategies that check every few hours |
8h / 1d | 8h: 60 days; 1d: 180 days | For reading the sentiment trend over a longer stretch |
Pick the interval by how often your strategy checks; do not expect a short interval to catch short-term moves. Data starts on 2020-01-01 (or the listing date for coins listed later). When a newly listed coin first has data, its usual level has not formed yet, so early values are less reliable.
The ±0.5, 3 and 0 above are only starting points. A sturdier approach is to list a row of candidate values for the entry and exit thresholds, backtest each pair, and pick an area where results are all decent, not the single best cell.
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))) # replace backtest with your own backtest function; compare each pair after feesScan thresholds separately for each coin and each bar interval; do not reuse another setup's values. For why to pick a flat area instead of the peak, see Avoiding Overfitting.
| Page | What it shows |
|---|---|
| Overview | An overall sentiment gauge plus optimistic and pessimistic rankings, with columns for coin, 24-hour change, index and status. |
| Sectors | Market Sentiment ranked by sector. |
| History | Market Sentiment bars for one coin over price, with 5min to 1d intervals and the stat field. For non-Pro users, the most recent 7 days are delayed. |
These are ideas for combining signals, not verified results:
| Pairing | Purpose |
|---|---|
| MS + Whale Hunter | When sentiment rises, check Whale Hunter for an unusual rise in open interest at the same time, to help judge whether new positions sit behind the optimism. |
| MS + Taker Intensity | Market Sentiment reacts slowly; use Taker Intensity to see aggressive buying and selling over a short window and fill in the short-term moves it cannot see. |
The API endpoint is GET /market_sentiment/get_alpha with symbol, period and start/end dates (start_date, end_date); in Blave Agent the helper is fetch_market_sentiment. Pass the USDT perpetual symbol as symbol (for example BTCUSDT). Only closed bars are returned, with timestamp, alpha and stat and no price. Without a start date you get the last 365 days, and ranges longer than 365 days are truncated.
The stat object describes the latest value:
| Field | Meaning |
|---|---|
up_prob | The model's estimated probability of a rise 24 hours later. It is an estimate, not a guaranteed win rate. |
avg_up_return /avg_down_return | The average gain when the price was up 24 hours later, and the average loss when it was down, regardless of the Market Sentiment level. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, as a decimal, not a percentage. |
is_data_sufficient | Whether there is enough history; when false, treat these numbers as reference only. |
stat is an estimate, not a win rate. Validate any threshold with your own backtest.