Filter Tracker¶
概要¶
Filter Trackerは、AEGIS v2.5で導入されたロジック段階毎の振り落とし報告機構です。 取引が発生しない理由を可視化し、戦略改善のためのインサイトを提供します。
目的¶
- 透明性: なぜ取引が発生しなかったかを明確化
- デバッグ: 問題のあるフィルタ段階を特定
- 最適化: 通過率の低い段階のパラメータ調整
- LLM分析: 外部AIによる事後分析のためのデータ出力
アーキテクチャ¶
┌─────────────────────────────────────────────────────────────┐
│ Filter Tracker │
│ (Singleton Pattern) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Entry Stage │ │ Exit Stats │ │ Debug │ │
│ │ Tracker │ │ Tracker │ │ Records │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Unified Summary API │ │
│ │ (Dashboard / Backtest Report) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
フィルタ段階¶
エントリーフィルタ¶
| 段階 | 定数名 | 説明 |
|---|---|---|
| 1 | UW_SWEEP |
Unusual Whalesでのスイープ検知 |
| 2 | GEX_MATCH |
GEXレジームとの整合性チェック |
| 3 | IV_RANK |
IV Rankが適正範囲内かチェック |
| 4 | MOMENTUM |
モメンタムスコア条件チェック |
| 5 | RISK_BUDGET |
リスク枠(RiskGuardian)チェック |
| 6 | OPTION_CHAIN |
オプションチェーン利用可能チェック |
| 7 | SPREAD_BUILD |
スプレッド構築成功チェック |
レジーム判定¶
| 段階 | 定数名 | 説明 |
|---|---|---|
| - | REGIME_SPEAR |
Spear戦略条件チェック |
| - | REGIME_BEAT |
Beat戦略条件チェック |
イグジット理由¶
| 理由 | 定数名 | 説明 |
|---|---|---|
| 利確 | PROFIT_TAKE |
目標利益(50%)到達 |
| 損切り | STOP_LOSS |
ストップロス(-35%)発動 |
| 時間切れ | TIME_DECAY |
最大保有日数超過 |
| 満期接近 | EXPIRY |
DTE閾値到達 |
| GEX変化 | GEX_CHANGE |
レジーム変化による撤退 |
| 反転 | MOMENTUM_REVERSAL |
モメンタム反転検知 |
| 手動 | MANUAL |
手動決済 |
使用方法¶
基本的な使い方¶
from core.filter_tracker import FilterTracker, FilterStageType, ExitReasonType
# シングルトンインスタンス取得
tracker = FilterTracker.instance()
# フィルタ結果を記録
tracker.record_filter_result(
trade_id="abc123",
symbol="NVDA",
target_date=date.today(),
stage=FilterStageType.MOMENTUM,
passed=False,
reason="score=0.35 < 0.50",
snapshot=market_snapshot # Debugモード時のみ保存
)
# イグジット結果を記録
tracker.record_exit(
trade_id="abc123",
symbol="NVDA",
target_date=date.today(),
reason=ExitReasonType.STOP_LOSS,
pnl=-450.0,
pnl_pct=-30.0
)
Debugモード¶
# Debugモード有効化(詳細記録を保存)
tracker = FilterTracker.instance(debug_mode=True)
# 詳細CSVエクスポート
tracker.export_debug_csv(Path("./debug_output"))
サマリー取得¶
# ダッシュボード用サマリー
stats = tracker.get_summary()
print(f"Total evaluated: {stats['total_scanned']}")
print(f"Total passed: {stats['total_entered']}")
print(f"Pass rate: {stats['total_entered'] / stats['total_scanned'] * 100:.1f}%")
# 取引IDのフィルタ履歴(LLM分析用)
history = tracker.get_filter_history("abc123")
ダッシュボード統合¶
表示セクション¶
- エントリーファネル(円グラフ)
- 各段階での通過件数を視覚化
-
通過率をツールチップで表示
-
イグジット理由分布(円グラフ)
- 利確/損切り等の割合を視覚化
-
Win Rateを計算して表示
-
直近トレード履歴(テーブル)
- 最新10件のクローズ済みトレード
- PnL、イグジット理由を一覧表示
APIエンドポイント¶
レスポンス例:
{
"filter_stages": {
"UW_SWEEP": {"passed": 150, "rejected": 50},
"GEX_MATCH": {"passed": 120, "rejected": 30},
"MOMENTUM": {"passed": 80, "rejected": 40}
},
"exit_reasons": {
"PROFIT_TAKE": 25,
"STOP_LOSS": 15,
"TIME_DECAY": 5
},
"total_evaluated": 200,
"total_passed": 45,
"recent_trades": [...]
}
バックテスト統合¶
バックテスト実行時もFilter Trackerを使用して統計を収集します。
# バックテスト開始時
tracker = FilterTracker.instance(debug_mode=True)
# バックテスト終了時
stats = tracker.get_summary()
print(f"Filter Statistics: {json.dumps(stats, indent=2)}")
# 詳細デバッグ出力
tracker.export_debug_csv(Path("./backtest_debug"))
設計原則¶
- シングルトンパターン: アプリケーション全体で1つのインスタンス
- スレッドセーフ: 複数スレッドからの同時アクセスに対応
- メモリ効率: Debugモード以外では詳細記録を保存しない
- 拡張性: 新しいフィルタ段階やイグジット理由を容易に追加可能
関連ファイル¶
| ファイル | 説明 |
|---|---|
core/filter_tracker.py |
Filter Trackerコアモジュール |
strategies/sunacchan_spear.py |
Spear戦略でのTracker使用 |
strategies/beat_shield.py |
Beat戦略でのTracker使用 |
strategies/strategy_manager.py |
レジーム判定でのTracker使用 |
scripts/dashboard_web_v2.py |
ダッシュボードUI統合 |
scripts/run_beat_sunacchan_backtest.py |
バックテスト統合 |