第 12 課:市場状態の認識
目標: システムに「今どの市場にいるか」を認識させ、適切な戦略を選択できるようにする。
典型的なシナリオ(例示)
注: 以下は一般的な現象を説明するための架空の例です。数値は例示的なものであり、特定の機関/商品に対応するものではありません。
2021年初頭、あるクオンツファンドは2つの戦略を同時に運用していました:トレンドフォローイングと平均回帰です。両方の戦略は、それぞれ有利な市場で優れたパフォーマンスを発揮しました。
問題は、固定ウェイト(各50%)を使用していたことです。
結果:
- トレンド市場では、トレンド戦略が20%上昇、平均回帰が15%損失、純利益2.5%
- レンジ市場では、平均回帰が15%上昇、トレンド戦略が20%損失、純損失2.5%
- 年間を通じて、両者が相殺し合い、リターンはほぼゼロに
競合他社は?同じ2つの戦略ですが、Regime Detectionモジュールを追加しました:
- トレンド市場では、トレンド戦略のウェイト80%、平均回帰20%
- レンジ市場では、逆転
結果: 年間リターン18%、シャープレシオ1.6。
**違いは何か?**戦略自体ではなく、いつどの戦略を使うべきかを知っていることです。これがRegime Detectionの価値です - マルチエージェントシステムの「ルーター」です。
12.1 Market Regimeとは
3つの基本状態
市場は常に何らかの「状態」にあります。状態間の境界は明確ではありませんが、大まかに分類できます:
| 状態 | 特徴 | 最適戦略 | 典型的な期間 |
|---|---|---|---|
| Trending | 価格が一方向に持続的に動く、Volatilityが上昇 | Momentum/Trendフォローイング | 数週間から数ヶ月 |
| Mean-Reverting | 価格がレンジ内で振動、平均回帰が機能 | 平均回帰/Grid | 数週間から数ヶ月 |
| Crisis | 激しい変動、相関がスパイク、流動性が枯渇 | リスクコントロール優先/現金が王様 | 数日から数週間 |
なぜRegime Detectionはこんなに難しいのか?
| 課題 | 説明 |
|---|---|
| バックミラー問題 | 状態は後から見ると明確だが、リアルタイムでは曖昧 |
| 曖昧な境界 | TrendとRangingの間に明確な境界線がない |
| 入れ子状態 | 日次レンジ、週次トレンド、月次レンジが同時に存在しうる |
| 検出の遅れ | 状態を確認する頃には、ほぼ終わっている可能性がある |
| 切り替えコスト | 頻繁な戦略切り替え自体がコスト |
紙上演習: 過去の状態を識別する
次のデータを見て、各期間の市場状態を判断してください:
| 期間 | 20日リターン | 20日Volatility | ADX | あなたの判断 |
|---|---|---|---|---|
| A | +12% | 18% | 35 | ? |
| B | -2% | 8% | 15 | ? |
| C | -25% | 45% | 28 | ? |
| D | +3% | 12% | 22 | ? |
クリックして回答を展開
| 期間 | 判断 | 理由 |
|---|---|---|
| A | Trending (上昇) | 高リターン + 中程度のVolatility + 高ADX (>25はstrong trendを示す) |
| B | Ranging | 低リターン + 低Volatility + 低ADX (< 20はトレンドなしを示す) |
| C | Crisis | 大幅下落 + 極めて高いVolatility (>30%の年率は警告レベル) |
| D | Weak trend/Transition | リターンとADXが両方とも中間ゾーン、判断が難しい |
重要な発見: 期間Dが最も判断が難しい - これは実世界で最も一般的な状況です - ほとんどの場合、市場は「グレーゾーン」にあります。
12.2 Regime Detectionの4つの方法
方法の比較
| 方法 | 原理 | 長所 | 短所 | ユースケース |
|---|---|---|---|---|
| ルールベース | 指標の閾値を使用 | シンプル、解釈可能、遅れがない | 閾値の選択が難しい、境界が固定的 | クイックプロトタイプ、ベースライン |
| 統計的 | 統計的検定で構造変化を識別 | 数学的に厳密 | 履歴データが必要、遅れがある | オフライン分析 |
| Machine Learning | MLモデルで分類 | 複雑なパターンを捉えられる | ラベルが必要、過学習リスク | 十分なラベル付きデータがある場合 |
| Hidden Markov | 状態がMarkov連鎖に従うと仮定 | 状態確率を推定できる | 仮定が成立しない可能性 | 状態数が既知の場合 |
方法1: ルールベース(最も実用的)
テクニカル指標の閾値の組み合わせで状態を判断:
紙上演習: ルールを設計する
以下の市場データが与えられた場合、上記のルールを使用して状態を判断してください:
| シナリオ | ADX | 20日Volatility | 20日リターン | 資産相関 | 状態 |
|---|---|---|---|---|---|
| 1 | 32 | 22% | +8% | 0.4 | ? |
| 2 | 18 | 12% | -1% | 0.3 | ? |
| 3 | 25 | 38% | -15% | 0.85 | ? |
| 4 | 23 | 18% | +3% | 0.5 | ? |
クリックして回答を展開
| シナリオ | 状態 | 決定パス |
|---|---|---|
| 1 | Trending | Vol=22% < 30% (Crisisでない) -> ADX=32 > 25 かつ Ret=8% > 5% (Trending) |
| 2 | Ranging | Vol=12% < 30% (Crisisでない) -> ADX=18 < 20 かつ Vol=12% < 15% (Ranging) |
| 3 | Crisis | Vol=38% > 30% かつ Corr=0.85 > 0.8 (Crisisが優先) |
| 4 | Transition | 明確な条件を満たさない (ADX=23は20-25の間) |
方法2: Hidden Markov Model (HMM)
HMMは、市場がいくつかの隠れた状態を切り替えると仮定します - 私たちは価格のみを観察でき、真の状態は観察できません。
HMMの主要な出力:
- 状態確率: 現在各状態にある確率(例: Trending 60%, Ranging 30%, Crisis 10%)
- 遷移確率: ある状態から別の状態に切り替わる確率
紙上演習: 状態確率を理解する
HMMが現在の状態確率を次のように出力: Trending 55%, Ranging 35%, Crisis 10%
| 戦略ウェイトアプローチ | Trend戦略 | 平均回帰 | 防御戦略 | 問題 |
|---|---|---|---|---|
| ハードスイッチ | 100% | 0% | 0% | 35%のRanging確率を無視 |
| 確率ウェイト | 55% | 35% | 10% | より頑健だが、Crisis対応が遅い |
| 調整ウェイト | 50% | 30% | 20% | 保険としてCrisisウェイトを増幅 |
重要な洞察: 状態確率を直接戦略ウェイトとして使うべきではない - リスク選好に基づいて調整が必要です。
コード実装(エンジニア向け)
# Note: This is illustrative code showing basic HMM usage
# Requires hmmlearn: pip install hmmlearn
import numpy as np
from hmmlearn import hmm
class RegimeDetector:
"""HMM-based market regime detector"""
def __init__(self, n_states: int = 3):
self.n_states = n_states
self.model = hmm.GaussianHMM(
n_components=n_states,
covariance_type="full",
n_iter=100
)
def fit(self, features: np.ndarray):
"""
Train HMM model
features: shape (n_samples, n_features)
typically includes: returns, volatility, ADX, etc.
"""
self.model.fit(features)
return self
def predict_proba(self, features: np.ndarray) -> np.ndarray:
"""
Predict current state probability
Returns: shape (n_states,) probability distribution
"""
# Get posterior probabilities
posteriors = self.model.predict_proba(features)
return posteriors[-1] # Latest time point probability
def get_regime(self, features: np.ndarray, threshold: float = 0.5) -> str:
"""
Get current state (with confidence threshold)
"""
probs = self.predict_proba(features)
max_prob = np.max(probs)
max_state = np.argmax(probs)
if max_prob < threshold:
return "uncertain"
state_names = ["trending", "mean_reverting", "crisis"]
return state_names[max_state]方法3: Volatilityクラスタリング(実用的な変種)
簡略化されているが実用的なアプローチは、Volatility状態のみを見ることです:
| Volatility範囲 | 状態 | 戦略推奨 |
|---|---|---|
| < 15% | 低Volatility (Ranging) | 平均回帰、オプション売り |
| 15% - 25% | 通常Volatility | 通常運用 |
| 25% - 35% | 高Volatility (Trending) | Trendフォロー、ポジション削減 |
| > 35% | 極端なVolatility (Crisis) | リスクコントロール優先、大幅なポジション削減 |
なぜVolatilityはこんなに重要なのか?
- Volatilityは市場の「体温」、市場の健全性を素早く反映
- Volatilityにはクラスタリング効果がある(高Volatilityは高Volatilityに続く傾向)
- Volatilityはリターンよりも予測可能
12.3 Regime Detectionの評価
Regime Detectionは目的ではありません - 目的は戦略リターンの改善です。したがって、評価基準は「精度」ではなく「戦略により多くのお金を稼がせたか」です。
評価フレームワーク
紙上演習: Regime Detectionの価値を計算する
シナリオ: あなたのRegime Detectionモジュールの過去1年のパフォーマンス:
| 指標 | 値 |
|---|---|
| 状態切り替え回数 | 24回 |
| 平均状態持続期間 | 15日 |
| 切り替え遅れ | 3日 |
| 誤切り替え率 | 20%(5日以内に切り戻し) |
戦略パフォーマンス比較:
| アプローチ | 年間リターン | 最大ドローダウン | シャープレシオ |
|---|---|---|---|
| Regimeなし(固定50/50) | 8% | 18% | 0.6 |
| Regimeあり(動的切り替え) | 15% | 12% | 1.2 |
| 切り替えコスト(24回 x 0.5%) | -12% | - | - |
質問:
- Regime Detectionの純付加価値は何か?
- 誤切り替え率が10%に低下した場合、期待リターンはどう変化するか?
- 切り替えコストが高すぎる場合、どうすべきか?
クリックして回答を展開
-
純付加価値の計算:
- 総リターン改善 = 15% - 8% = 7%
- 切り替えコスト = 24 x 0.5% = 12%(各切り替えがフルポジション調整を伴うと仮定)
- 純付加価値 = 7% - 12% = -5%(実際には損失!)
問題: 切り替えが頻繁すぎて、コストが利益を食い潰した!
-
誤切り替え率が10%に低下した場合:
- 誤切り替えが4.8から2.4に減少
- 2.4回の無駄な切り替えが減って2.4 x 0.5% = 1.2%節約
- 純付加価値 = -5% + 1.2% = -3.8%(まだマイナス)
-
高い切り替えコストへの対策:
- 段階的切り替え: 0->100%ではなく、50%->70%->90%
- 確認遅延: 状態がN日持続してから切り替え
- ソフト切り替え: ハードスイッチの代わりに確率ウェイトを使用
- 頻度削減: 状態が非常に確実な場合のみ切り替え
重要な教訓: Regime Detectionの価値 = 検出精度 x 戦略差 - 切り替えコスト
切り替え遅れのコスト
| 遅れ日数 | Trending市場での影響 | Crisis市場での影響 |
|---|---|---|
| 1日 | 動きの約5%を逃す | 約3%多く損失 |
| 3日 | 動きの約15%を逃す | 約10%多く損失 |
| 5日 | 動きの約25%を逃す | ストップロスのタイミングを逃す可能性 |
| 10日 | Trendが半分終わっている可能性 | Crisisが終了している可能性 |
結論: 遅れすぎるよりは、多少の誤検出があった方が良い。特にCrisis検出は速くなければならない。
12.4 よくある誤解
誤解1: Regime Detectionの精度が高いほど常に良い
完全には正しくありません。評価基準は「精度」ではなく「戦略により多くのお金を稼がせたか」です。80%の精度でも切り替えコストがリターンを食い潰すなら、切り替え回数が少ない60%の精度より悪いです。
誤解2: Trend/Rangingは二値判断である
実際には、ほとんどの場合、市場は「グレーゾーン」にあります。二値判断を強制すると頻繁な誤切り替えにつながります。正しいアプローチ: 確率ウェイトを使用(Trend 60%/Ranging 40%)または「Transition期間」を認める。
誤解3: 状態変化を検出したら直ちに戦略を切り替える
危険なアプローチです。切り替え自体にコストがあり(取引コスト、スリッページ)、頻繁な切り替えは全ての利益を失う可能性があります。正しいアプローチ: 確認遅延(状態がN日持続)+ 段階的切り替え(50%->70%->90%)。
誤解4: Crisis検出は「確認を待つ」ことができる
Crisis検出は速くなければなりません。確認する頃には、20%を失っている可能性があります。Crisisの誤検出(稼ぎが少ない)の方が、見逃す(大損)よりも良いです。
12.5 Transition期間の処理
実際に最も処理が難しいのは、明確なTrendやRangingではなく、Transition期間です - 状態が変化しているが、まだ確実ではない。
Transition期間の特徴
| 特徴 | 表れ方 |
|---|---|
| 指標の矛盾 | ADXはTrendingを示すが、VolatilityはRangingを示す |
| 曖昧な確率 | HMMが40%/35%/25%を出力、明確な支配的状態がない |
| シグナルの衝突 | TrendとMean Reversion戦略が反対のシグナルを出す |
Transition期間の戦略
推奨: ほとんどの投資家にとって、**戦略3(リスク優先)**が最も安全な選択です。Transition期間は、しばしば最もリスクが高い期間です。
12.5 マルチエージェントの視点
マルチエージェントアーキテクチャでは、Regime DetectionはMeta Agentのコア能力です。
アーキテクチャ設計
Regime Agentの責任
| 責任 | 具体的内容 | トリガー条件 |
|---|---|---|
| 状態検出 | 現在の市場状態を判断 | 日次/時間次 |
| シグナルルーティング | どのエキスパートAgentにタスクを割り当てるかを決定 | 状態変化時 |
| ウェイト配分 | 状態確率に基づいてエキスパートウェイトを配分 | 継続的 |
| 切り替え制御 | 過剰切り替えを防止、Transitionを管理 | 状態が曖昧な時 |
| 遡及的帰属 | 事後分析のために状態判断を記録 | 継続的 |
他のAgentとの協働
| 協働相手 | 協働方法 |
|---|---|
| Signal Agent | Regimeシグナルを受け取り、戦略パラメータを調整 |
| Risk Agent | Crisis状態では、Risk Agentがより大きな拒否権を持つ |
| Execution Agent | 状態切り替え時、Execution Agentがスムーズなリバランスを処理 |
| Evolution Agent | モデル進化のためのRegime検出の歴史的精度を提供 |
受け入れ基準
このレッスンを完了した後、これらの基準で学習を確認してください:
| チェックポイント | 基準 | 自己テスト方法 |
|---|---|---|
| 3つの状態を理解 | Trend/Ranging/Crisisの特徴と最適戦略を説明できる | 自分の言葉で説明 |
| ルールベース方法をマスター | ADX/Volatility/相関を使用して判断ルールを設計できる | 紙上演習を完了 |
| HMMの原理を理解 | 状態確率の意味と使用法を説明できる | なぜ確率を直接ウェイトとして使わないかを説明 |
| 検出価値を評価 | 純付加価値 = リターン改善 - 切り替えコストを計算できる | 評価演習を完了 |
| Transition期間を処理 | 3つのTransition戦略とそのユースケースを挙げられる | あなたの選択と理由を示す |
総合演習
あなたのRegime Detectionシステムを設計する:
- 検出方法を選択(ルールベース/HMM/その他)し、理由を説明
- 入力特徴と閾値を定義
- Transition期間の処理戦略を設計
- 切り替え確認条件を設定(過剰切り替えを防止)
- 評価指標を定義
レッスン成果物
このレッスンを完了すると、次のものが得られます:
- Regime Detection設計フレームワーク - 方法選択から評価指標までの完全な思考
- 実用的なルールベーステンプレート - 直接使用可能なADX/Volatility/相関判断ルール
- Regime Detectionの価値を評価する方法 - 純付加価値 = リターン改善 - 切り替えコスト
- Transition期間の処理戦略 - 3つのアプローチとそのユースケース
レッスンまとめ
- 市場Regimeの概念とそれが戦略選択に与える影響を理解
- 4つのRegime Detection方法をマスター: ルールベース、統計的、ML、HMM
- Regime Detection評価は「精度」ではなく「経済的価値」であることを理解
- Transition期間の処理戦略をマスター
参考資料
- Lesson 05: Classic Strategy Paradigms - 異なる状態の戦略
- Lesson 11: Why Multi-Agent - マルチエージェントにおけるRegime Detectionの役割
- Background: Famous Quant Disasters - Crisis状態の検出に失敗した結果
次回レッスンのプレビュー
Lesson 13: Regime Misjudgment and Systemic Collapse
Regime Detectionはマルチエージェントシステムのコアですが、間違いを犯します - 誤判断、遅れ、境界振動。次のレッスンでは、Regime Detectionの5つの失敗モードを深く掘り下げ、システム崩壊を防ぐための縮退戦略を設計する方法を学びます。