数値の読み方を押さえ、よくある二つの誤読を避けたうえで、戦略に組み込み、しきい値を自分でスキャンします。
先物トレーダーがとても楽観的に見えるなら、ロングを追うべきでしょうか。市場センチメントが教えてくれるのは「この銘柄の普段よりどれだけ楽観的か」だけで、絶対的にどの程度楽観的かではありません。ここが最も誤読されやすいところです。
市場センチメント(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 時間足、期間 2024-09-15〜2026-09-14、1 時間ごとに 1 つの値(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% |
4 銘柄とも 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 は例示にすぎません。実際に使う前にパラメータをスキャンし、手数料控除後の成績を確認してください。
市場センチメントの設定は一つだけで、足の周期(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 は自分のバックテスト関数に置き換え、どの組み合わせも手数料を引いてから比べるしきい値は銘柄ごと、足の周期ごとにスキャンし直し、別の設定の値を流用しないでください。最高点ではなく平坦な一帯を選ぶ理由は過剰最適化を避けるを参照してください。
| ページ | 表示内容 |
|---|---|
| 概要 | 全体センチメントの半円ゲージと、楽観・悲観の二つのランキング。列は銘柄、24 時間騰落、指数、ステータスです。 |
| セクター | セクター別の市場センチメントランキング。 |
| 履歴 | 単一銘柄の市場センチメントの棒グラフを価格に重ねて表示し、5min~1d の期間を選べ、stat 欄も付きます。Pro 以外のユーザーは直近 7 日分のデータが遅れて表示されます。 |
以下は組み合わせの考え方で、検証済みの結論ではありません。
| 組み合わせ | 目的 |
|---|---|
| MS + ホエールハンター | センチメントが高まったとき、ホエールハンターで未決済建玉が同時に異常に増えていないかを確認し、楽観の裏に新規建玉が伴っているかを判断する助けにします。 |
| MS + テイカー強度 | 市場センチメントは反応が遅いので、テイカー強度で短い窓の積極的な売買を見て、それでは見えない短期の動きを補います。 |
API エンドポイントは GET /market_sentiment/get_alpha で、パラメータは symbol、period と開始・終了日(start_date、end_date)です。Blave Agent では fetch_market_sentiment が対応します。symbol には USDT 無期限先物のシンボル(例:BTCUSDT)を指定します。返されるのは確定済みの足だけで、項目は 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 は推定値であって勝率ではありません。どのしきい値も、自分のバックテストで検証してください。