コンテンツにスキップ

AntiGravity Low-Vol Range Mode

モード概要

低ボラティリティ・レンジ相場専用のショートボラティリティ戦略

Beat Shield / Sunacchan Spear がトレンド・方向性に集中する間、
市場が静かなときに θ回収で安定的なリターン を積み上げる第3のモード。


1. 目的と役割

1.1 コンセプト

┌─────────────────────────────────────────────────────────────────┐
│                    AEGIS 4モード体制                              │
├─────────────────────────────────────────────────────────────────┤
│  Beat Shield      │ 守備的・反転型       │ 高ボラ・逆張り        │
│  Sunacchan Spear  │ 攻撃的・モメンタム型  │ トレンドフォロー       │
│  Crisis Alpha     │ 暴落対策型          │ テールリスクヘッジ      │
│  AntiGravity-LV   │ 低ボラ・レンジ型     │ ショートボラ・θ回収    │ ← NEW
└─────────────────────────────────────────────────────────────────┘

1.2 期待される効果

指標 目標
最大DD 5〜7%
Per-position リスク 口座残高の 0.3〜0.5%
レンジ相場での収益 月利 1〜3%(θ回収)

1.3 他モードとの連携

graph LR
    A[市場レジーム] --> B{ボラティリティ}
    B -->|高ボラ| C[Crisis Alpha]
    B -->|中ボラ| D[Beat Shield / Spear]
    B -->|低ボラ + レンジ| E[AntiGravity-LV]

    E -->|異常フロー検知| F[即時撤退]
    F --> C

2. レジーム判定ロジック

2.1 判定条件

SPY / QQQ の両方が以下を全て満たす場合に「Low-Vol Range」判定:

条件 閾値 説明
20日実現ボラ (RV20) < 12% 年率換算、低ボラ環境
IV30 パーセンタイル 40% 過去1年の下位40%
SMA100 からの乖離 ±5%以内 価格がレンジ内
20日レンジ幅 10% 高値-安値が狭い

2.2 ヒステリシス

# レジームON条件
if consecutive_days_on >= 5:
    mode = ON

# レジームOFF時
if regime_off:
    winddown_days = 5  # 5日かけてポジション縮小

2.3 判定クラス

class LowVolRangeRegimeDetector:
    def compute_daily_flag(self, date) -> bool:
        """SPY/QQQの4条件をチェック"""
        spy_flag = self._check_symbol_conditions("SPY", date)
        qqq_flag = self._check_symbol_conditions("QQQ", date)
        return spy_flag and qqq_flag

    def is_regime_on(self) -> bool:
        """連続5日以上でTrue"""
        return self._consecutive_days_on >= 5

3. ポジション構造

3.1 グループ分類

グループ 銘柄 構造 最大リスク/ポジション
A: インデックス SPY, QQQ, IWM アイアンコンドル 0.3〜0.5%
B: メガキャップ AAPL, MSFT, GOOGL 等 ストラングル/IC 0.2〜0.3%
C: ハイベータ TSLA, NVDA, AMD 等 定義済みスプレッド 0.1〜0.2%
D: メメ株 GME, AMC 等 ショートボラ禁止 -

3.2 グループA: インデックス・アイアンコンドル

           Long Call (+5pt)
        Short Call (15-20Δ)
     ━━━━━━━━━━━━━━━━━━━━  ← 現在価格
        Short Put (15-20Δ)
           Long Put (-5pt)
パラメータ
DTE 21〜45日
ショートデルタ 15〜20Δ
ウイング幅 5ポイント
最大損失 口座残高の 0.5%以下

3.3 グループB: メガキャップ銘柄

対象銘柄(18銘柄):

AAPL, MSFT, GOOGL, META, JPM, BAC, JNJ, ABBV,
PEP, KO, PG, PFE, WMT, MCD, HD, LOW, UNH, IBM

フィルタ条件:

  • 決算10営業日以内 → NG
  • 60日実現ボラ順位 > 50% → NG
  • Unusual Whales フロースコア > 2.0 → NG

3.4 グループC: ハイベータ銘柄

対象銘柄(13銘柄):

TSLA, NVDA, AMD, COIN, MSTR, MARA, RIOT, SMCI,
AFRM, AI, SHOP, UPST, RBLX

重要ルール

裸ストラングル / 裸ショートは完全禁止

使用可能な構造:

  • クレジットスプレッド(Vertical Spread)
  • デビットスプレッド
  • バタフライ / コンドル(両サイドウイング付き)

4. Unusual Whales 連携

4.1 シグナルインターフェース

# 銘柄レベル
uw.get_flow_score(symbol, date, window_days=5) -> float
uw.get_darkpool_bias(symbol, date, window_days=5) -> float

# インデックスレベル
uw.get_index_breakout_score(index_symbol, date) -> float

4.2 閾値とアクション

シグナル 閾値 アクション
flow_score > 2.0 銘柄レベル 新規ショートボラ禁止
index_breakout_score > 2.5 SPY/QQQ 新規エントリー停止
index_breakout_score > 3.0 SPY/QQQ 既存50〜100%クローズ
flowchart TD
    A[Unusual Whales シグナル] --> B{breakout_score?}
    B -->|≤ 2.5| C[通常運転]
    B -->|> 2.5| D[新規停止]
    B -->|> 3.0| E[即時縮小]
    E --> F[Crisis Alphaへバトンタッチ]

5. リスク管理

5.1 ポジション単位

@dataclass
class LowVolRangeModeConfig:
    max_risk_per_position: float = 0.005      # 0.5%
    max_risk_per_position_highbeta: float = 0.002  # 0.2%

5.2 ポートフォリオ単位

制約
最大ポジション数 40
インデックス枠 10
メガキャップ枠 20
ハイベータ枠 10

5.3 ドローダウン管理

class ModeDrawdownManager:
    def get_mode_drawdown(mode_id, date) -> float:
        """モード単体のDDを計算"""

    def is_max_dd_exceeded(mode_id, date) -> bool:
        """7%超過でTrue"""
DD閾値 アクション
5% 新規エントリー半減
7% 新規停止 + 既存縮小

6. エグジット条件

6.1 利確

# 最大利益の50%到達で早期クローズ
if current_profit >= entry_credit * 0.50:
    close_position()

6.2 損切り

# 受取クレジットの2倍で損切り
if current_loss >= entry_credit * 2.0:
    close_position()

6.3 時間経過

# DTE 3日以下で強制クローズ
if dte <= 3:
    close_position()

6.4 緊急時

# DD 7%超過 or breakout_score > 3.0
if emergency:
    reduce_all_positions(aggressive=True)

7. 実装クラス構成

strategies/
└── low_vol_range_mode.py
    ├── LowVolRangeModeConfig      # 設定クラス
    ├── LowVolRangeRegimeDetector  # レジーム判定
    └── AntiGravityLowVolRangeMode # メイン戦略
        ├── on_daily_close()
        ├── on_new_entries()
        ├── on_existing_positions()
        ├── _open_index_iron_condor()
        ├── _open_megacap_position()
        ├── _open_highbeta_position()
        ├── _manage_single_position()
        ├── _reduce_all_positions()
        └── _winddown_positions()

7.1 StrategyManager統合

class StrategyMode(str, Enum):
    BEAT_SHIELD = "beat_shield"
    SUNACCHAN_SPEAR = "spear"
    CRISIS_ALPHA = "crisis_alpha"
    ANTI_GRAVITY_LV = "anti_gravity_lv"  # ← 追加
    NEUTRAL = "neutral"

8. バックテスト計画

8.1 重点評価期間

期間 特徴
2019-10〜2019-12 低ボラ・レンジ
2021-03〜2021-11 長期低ボラ
2023-03〜2023-06 レンジ相場
2025-07〜2025-09 アウト・オブ・サンプル

8.2 評価指標

  • 最大DDが 5〜7% 以内
  • 1イベント時の一日DD
  • グループA/B/C別のPnL寄与
  • Sharpe Ratio

9. 設定パラメータ一覧

@dataclass
class LowVolRangeModeConfig:
    # DD制約
    max_dd_mode: float = 0.07           # 7%

    # ポジション単位リスク
    max_risk_per_position: float = 0.005
    max_risk_per_position_highbeta: float = 0.002

    # ポジション数制限
    max_positions_total: int = 40
    max_positions_index: int = 10
    max_positions_megacap: int = 20
    max_positions_highbeta: int = 10

    # レジーム判定
    min_regime_days_on: int = 5
    days_to_winddown: int = 5
    rv20_threshold: float = 0.12
    iv_percentile_threshold: float = 0.4
    ma_band_pct: float = 0.05
    range_width_pct: float = 0.10

    # DTE設定
    index_dte_min: int = 21
    index_dte_max: int = 45

    # デルタ設定
    index_short_delta_min: float = 0.15
    index_short_delta_max: float = 0.20

    # 利確/損切り
    profit_take_pct: float = 0.50

10. 今後の改善ポイント

実装済み

  • レジーム判定ロジック
  • インデックスIC構築
  • プットクレジットスプレッド
  • モード別DD管理
  • Unusual Whalesモック連携

未実装・要改善

  • Unusual Whales実API連携
  • 決算カレンダー連携
  • コールクレジットスプレッド
  • ストラングル構築
  • デルタ接近時のロールオーバー
  • 上位アロケーション層との統合