コンテンツにスキップ

Market Snapshot キャッシュ設計(2025-12-05)

ドキュメント情報

  • 最終更新: 2025-12-05 23:50 JST
  • AEGISバージョン: v2.6.8(★tech-stack.md 2025-12-05 04:30 JST基準)
  • 対象範囲: バックテスト/ペーパートレード用 MarketSnapshot キャッシュ
  • 期間: 2019-08-01 〜 2025-11-21(最新ビルド)

目的

  • 1営業日・1銘柄の市場状態(株価/IV/GEX/オプションチェーン)を事前計算してキャッシュし、再現性と速度を確保する。
  • GEX計算やAPI呼び出しを毎日行わずに済ませ、メモリ安全に並列化したバックテストを実現する。

データ構造(core/models.py::MarketSnapshot

  • 株価: price/open/high/low/volume(分割補正後)
  • テクニカル: sma_short(20), sma_long(100), atr(20)
  • IV Rank: iv_rank(Barchart由来、取得不可時は None
  • オプション: option_chain (OptionContract[]) — bid/ask/delta/gamma/volume/open_interest/dte/expiration を保持
  • GEX: index_gamma_profile(SPX/QQQなど), symbol_gamma_profile, gex_98d_profile
  • メタ: regime, is_realtime, option_data_date, fallback_reason, data_freshness_warning

データソースとキャッシュ

  • 株価: Polygon株価キャッシュ(バックテストではAPI未呼び出し)
  • オプション: Parquet data/cache/polygon_options_with_greeks(遅延ロード + LRUでメモリ節約)
  • IV Rank: Barchartキャッシュ
  • 保存形式: data/cache/market_snapshots/{symbol}/{YYYY-MM-DD}.pkl(pickle, DataCache)
  • 生成スクリプト: scripts/build_market_snapshot_cache.py

生成フロー(scripts/build_market_snapshot_cache.py

  1. 週末を除いた営業日リストを構築。
  2. HybridDataProvider(skip_theta_check=True) で日次 MarketSnapshot を取得。
  3. 株価取得 → 分割補正
  4. オプションチェーン取得(Parquet遅延ロード, DTE 5-90)
  5. テクニカル計算(150日履歴)
  6. IV Rank取得(Barchart)
  7. GEXプロファイル計算(index + symbol + 98D)
  8. DataCacheにpickle保存。
  9. ログ: 日次DEBUG、progress_stepごとINFO、完了サマリを記録。

最新ビルド結果(2025-12-05 23:37 JST, workers=4)

  • ログ: /Users/ryo/Library/CloudStorage/Dropbox/Cursol_development/AEGIS/logs/build_cache_lazy_w4_20251205_175230.log
  • 成功: 289,040 / 326,106 営業日(88.6%)
  • エラー: 37,066 件(データ欠損/取得失敗日)
  • 例: [GLD] success=1588/1647日 (96.4%), errors=59

BT前のチェックリスト(GEX/MTFの健全性)

  • オプションキャッシュ検証: scripts/validate_option_cache.py で OI/日付カバレッジを確認。
  • ビルドログ確認: 上記ログを grep "errors=" で多発銘柄を洗い出し、補完方針を決定。
  • GEXスポット確認: 任意銘柄/日付で HybridDataProvider.get_option_chain_from_cache() → GEX計算を実行し、OIゼロや極端な偏りがないか確認。
  • MTF分布確認: core/mtf_analyzer.py の判定分布を数日サンプル出力し、NEUTRAL過多/片寄りがないかチェック。
  • スモークBT: 5銘柄×短期間(例: 2023-01〜03)で速度・ポジションカウント一致・CrisisAlpha/Spear発火を確認。

部分/再実行の例

cd /Users/ryo/Library/CloudStorage/Dropbox/Cursol_development/AEGIS
./venv/bin/python scripts/build_market_snapshot_cache.py \
  --start 2023-01-01 --end 2023-03-31 \
  --symbols AAPL MSFT NVDA \
  --workers 2 --progress-step 5 \
  --console-level INFO \
  --log-prefix build_cache_partial

既知の課題・TODO

  • OIの完全補完が未完了(Polygon Snapshot APIでのヒストリカルOI取得を実装予定)。
  • 37,066件の欠損日はログ確認のうえ補完/除外方針を決める。
  • データ鮮度メタ (option_data_date, fallback_reason) をBTロジックで監視し、前日データ混入を検知する。