TL;DR: 投票エンジンは v3.85.0 以降に追加された「ノンパラメトリック・コンセンサスエンジン」。リスク面 8 群 + クオンツ面 5 群 + メタ投票 2 群(計 11 群)の判断を数十の独立手法票に分解し、期間別に加重集約して verdict に統合。設計鉄則:常態 VaR 禁止、√t スケーリング禁止、単一手法の独占禁止 — 乖離は Rule B 期間別フラグで直接開示。
コンセプト
なぜ投票エンジン?
従来のやり方:1 つの VaR / Beta / Sharpe 公式を選んで、数値を出してリスク評価として使う。
問題点:どの単一公式にも前提がある。常態 VaR は収益が正規分布と仮定(実際は違う);√t ルールは収益が i.i.d. と仮定(実際は自己相関あり);GARCH は条件分散に特定構造を仮定。公式が 1 つ間違えば、結論も間違える。
新しいやり方:同じ horizon を 4 つの異なる手法で VaR 計算、4 票でコンセンサス。1 手法の前提が失効しても、残り 3 票で支える。4 票全て間違える → モデル信頼性メタ投票で検出。
11 群の役割分担
| パネル | 群 | 測定対象 |
|---|---|---|
| リスク | G1 ドローダウン | MDD / CDaR / 平均 DD / 復元日数 |
| G2 多期間 VaR 行列 | 4 手法 × 6 期間 = 24 票/銘柄(履歴 / ブロック Bootstrap / FHS / EVT POT) | |
| G3 下方リスク | Sortino / 下方偏差 / Omega | |
| G4 システマティック | Beta_60 / Beta_250 / 相関 / R² | |
| G5 リワード-リスク | Sharpe / Calmar / M² | |
| G6 定常性 | Hurst / ADF / KPSS | |
| G7 テール依存 | 指数左尾 5% / 1% tail β / 非対称 β | |
| G8 ボラ regime | σ_20 z-score / vol-of-vol / クラスタリング | |
| クオンツ | Q1 トレンド | MA 5/20 / 20/60 / 60/200 / Donchian |
| Q2 モメンタム | RSI / MACD / Stoch K | |
| Q3 ボラ forward | EWMA / GARCH σ_{t+1} / 実現 σ | |
| Q4 季節性 | 同月 / 同曜日 / 月初効果 | |
| Q6 期待リターン | FHS Monte Carlo 5d / 20d / 60d μ | |
| メタ | G9 リスクモデル信頼性 | Kupiec POF / Christoffersen / Basel(日曜夜実行) |
| Q5 予測モデル信頼性 | rolling backtest hit-rate(日曜夜実行) |
4 つのノンパラ VaR
G2(多期間行列)はエンジンの中核。期間毎(5/10/20/60/120/220d)に 4 手法が投票:
| 手法 | 仮定数 | 計算法 |
|---|---|---|
| M-A 直接履歴 | 0 | overlapping h 日累積リターンから 5% 分位 |
| M-B ブロック Bootstrap | 2 | 連続ブロック再抽出でボラクラスタリング保持、n_sims=5000 |
| M-C FHS | 2 | GARCH(1,1) フィルタ + 標準化残差再抽出 |
| M-D EVT POT | 2 | GPD で閾値超過部分をフィット、深尾外挿 |
仮定重み:0 仮定 ×1.0、2 仮定 ×0.8、3 仮定 ×0.6、4+ 仮定(常態 / √t)×0(完全除外)。
期間スライス
各群の結果を 4 期間にスライス:
- 極短期:H1=5d
- 短期:H2=10d, H3=20d
- 中期:H4=60d
- 長期:H5=120d, H6=220d
スライス後 horizon 毎に集約 → 「参考サマリー」カード内の「リスク面 / クオンツ面」ブロックへ供給。
Rule B 期間別乖離
同じ期間で同時に:
- リスク面コンセンサス = high(リスク高)
- クオンツ面コンセンサス = bull(強気)
→ バックエンド cross_panel_divergence API でフラグ立て。フロントエンドはカードヘッダーに「⚠ 乖離」表示。
設計思想:この乖離を加重平均で平準化すべきではない、ユーザーは「シグナルが矛盾している」事実自体を知るべき。
操作ガイド
ページでの確認方法
銘柄を開く → 総評 → シグナル → 「参考サマリー」の下へスクロール → ▶ 投票エンジン詳細 — リスク面 × クオンツ面 11 群 を展開。
各群をクリックで:
- overall 全体コンセンサス方向 + 信頼性
- per_horizon 4 期間コンセンサス(極短/短/中/長)
- 18 票細目テーブル:手法 × 期間 × 方向 × 値 × 信頼性
シグナル階層
粗いから細かい順に:
- 参考サマリー 4 カードの verdict チップ(強気/やや強気/中立/様子見/やや弱気/弱気)
- カード内「リスク面 / クオンツ面」ブロック(該期コンセンサス、4-5 行の核心指標)
- 底部 11 群パネル(「どの手法がどう投票したか」を見たい時)
モデル信頼性(G9 / Q5)
毎週日曜深夜に 250 日 backtest 実行:
- G9 Kupiec POF:VaR 違反率が公称 α(5%)と一致するか?
- G9 Christoffersen:違反はクラスター化しているか?(GARCH がボラクラスタリングを見落とし → 赤)
- G9 Basel Traffic Light:赤/黄/緑信号
- Q5:ARIMA-MC 予測 hit-rate
赤信号 → その手法の翌週票重みを 40% に減らす(自己補正)。
FAQ
Q1:なぜ常態 VaR を禁止?
正規分布はテールが薄すぎる。実証では株式リターンに fat tail(尖度 > 3)があり、常態 VaR は系統的に極端リスクを過小評価。除外は規格の鉄則であり、調整可能パラメータではない。
Q2:なぜ √t を禁止?
√t ルール(1 日 σ × √h → h 日 VaR)は収益の i.i.d. を要求。実証では自己相関(短期モメンタム、長期平均回帰)。各 horizon を独立推定 → スケーリング近道は使わない。
Q3:毎日再計算?
Daily 短窓群(G2 5-20d / G8 σ_20 / Q1-Q3 / Q6)、約 30 分/日。 Weekly 長窓群(G1 / G3-G7 / Q4)+ メタ投票 G9 / Q5、約 5 時間/週、日曜深夜スケジュール。
これで日次キーシグナル(短期)は最新を保ちつつ、長期スロー指標は無駄な CPU を消費しない。
Q4:「データなし」と表示される時は?
新規上場(<260 日履歴)はスキップ。メタ投票群(G9/Q5)は weekly cron 完了後にのみデータ反映。