看懂數值怎麼讀、避開兩個最常見的誤讀,再放進策略、自己掃門檻。
合約交易員看起來很樂觀,就代表該追多嗎?市場情緒只告訴你「比這個幣平常樂觀多少」,不告訴你樂觀到什麼絕對程度——這是最多人讀錯的地方。
市場情緒(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 是估計值不是勝率——任何門檻都要用你自己的回測驗證。