Drawdown Circuit Breaker
trader-memory-core の状態から口座レベルのドローダウン・サーキットブレーカーを評価し、今日新規リスクを取ってよいかを判定します。実現損益、連敗クールダウン、週次/月次ドローダウン制限を使い、外部APIなしで動作します。
API不要
目次
1. 概要
Drawdown Circuit Breaker は、口座レベルの実現損益と直近の終端トレード結果から、今日の新規トレードリスクを許容できるかを評価します。読み取り対象は trader-memory-core の thesis YAML のみです。市場側ゲートである exposure-coach の exposure_decision と対になる、トレーダー側ゲート circuit_breaker_decision を生成します。
このサーキットブレーカーは推奨と記録のための道具です。人間の判断を置き換えるものではなく、ブローカー側で注文を自動停止するものでもありません。
2. 使うタイミング
- 新しいスイングトレード候補をスクリーニングまたはサイジングする前
- 損切りや部分利確/損切りの後、クールダウンが必要か確認したいとき
- trader-memory-core に直近のクローズ済みまたは部分クローズ済みポジションがある日次計画時
- swing-opportunity-daily の候補生成前ゲートとして使うとき
- 日次、週次、月次の損失制限に到達していないかレビューするとき
3. 前提条件
- Python 3.9+
- 通常は
state/theses/にある trader-memory-core の thesis YAML - 口座サイズ
- APIキーやネットワーク接続は不要
4. クイックスタート
python3 skills/drawdown-circuit-breaker/scripts/check_circuit_breaker.py \
--state-dir state/theses \
--account-size 100000 \
--output-dir reports/
5. ワークフロー
Step 1: Trader Memory State を読む
thesis state directory を指定して実行します。
python3 skills/drawdown-circuit-breaker/scripts/check_circuit_breaker.py \
--state-dir state/theses \
--account-size 100000 \
--output-dir reports/
スクリプトはすべての th_*.yaml を走査し、各 thesis の status_history[] ledger から realized_pnl を読みます。_index.json は P&L 計算に使いません。インデックスは軽量な検索用ファイルであり、部分クローズや日次実現損益に必要な台帳を持たないためです。
state directory が存在しない、または空の場合は、data_quality: EMPTY_STATE とともに TRADING_ALLOWED を返します。履歴がまだない新規ユーザーをブロックしないためです。
Step 2: サーキットブレーカールールを評価する
デフォルトルールは次の通りです。
| ルール | デフォルト | トリップ時の状態 | 解除 |
|---|---|---|---|
| 日次最大損失 | 口座の2.0% | HALTED | 次のET平日 |
| 連敗クールダウン | 終端 thesis 2連敗 | COOLDOWN | 最後の負け exit から24時間 |
| 週次ドローダウン停止 | 口座の5.0% | HALTED | 次の月曜ET |
| 月次ドローダウン停止 | 口座の8.0% | HALTED | 次月1日ET |
日、週、月の境界は America/New_York で判定します。trader-memory-core
が日付のみの入力から生成するtimestampは、指定されたET日付のイベントとして扱います。
テストやサンプル実行を決定論的にしたい場合は --as-of を指定します。日付のみの
--as-of はそのET日付の終日を対象にし、時刻付きの --as-of はその時刻より後の
未来イベントを除外します。
python3 skills/drawdown-circuit-breaker/scripts/check_circuit_breaker.py \
--state-dir state/theses \
--account-size 100000 \
--as-of 2026-07-02T12:00:00-04:00 \
--output-dir reports/
Step 3: 閾値を上書きする
個別のCLI引数で閾値を変更できます。
python3 skills/drawdown-circuit-breaker/scripts/check_circuit_breaker.py \
--account-size 100000 \
--max-daily-loss-pct 1.5 \
--losing-streak-n 3 \
--cooldown-hours 48 \
--weekly-drawdown-pct 4 \
--monthly-drawdown-pct 6
JSON config でもまとめて指定できます。
{
"max_daily_loss_pct": 1.5,
"losing_streak_n": 3,
"cooldown_hours": 48,
"weekly_drawdown_pct": 4.0,
"monthly_drawdown_pct": 6.0
}
CLI引数は config ファイルの値より優先されます。
Step 4: 判定を解釈する
生成された decision を新規トレードリスクのゲートとして使います。
| Recommendation | 意味 |
|---|---|
| TRADING_ALLOWED | 有効なサーキットブレーカールールはなく、次のワークフローに進める |
| COOLDOWN | 新規ポジションは取らず、既存ポジション管理と直近損失のレビューに集中する |
| HALTED | 有効期限まで新規エントリーを停止し、レビューに集中する |
既存ポジションの管理は人間が判断します。このスキルは、実現損失後に新規リスクを積み増すことを防ぐためのゲートです。
6. 出力形式
スクリプトは circuit_breaker_decision_YYYY-MM-DD_HHMMSS.json を出力し、--json-only がない場合は同名の Markdown レポートも出力します。
{
"schema_version": "1.0",
"generated_at": "2026-07-02T16:00:00+00:00",
"as_of_date": "2026-07-02",
"recommendation": "COOLDOWN",
"triggered_rules": [
{
"rule": "losing_streak_cooldown",
"threshold": 2,
"observed": 2,
"active_until": "2026-07-02T15:30:00-04:00",
"detail": "2 consecutive losing closes; last loss exit 2026-07-01T15:30:00-04:00."
}
],
"metrics": {
"realized_pnl_today": 0.0,
"realized_pnl_wtd": -250.0,
"realized_pnl_mtd": -250.0,
"consecutive_losses": 2,
"last_loss_exit_at": "2026-07-01T15:30:00-04:00",
"theses_scanned": 12
},
"account_size": 100000.0,
"config": {
"max_daily_loss_pct": 2.0,
"losing_streak_n": 2,
"cooldown_hours": 24.0,
"weekly_drawdown_pct": 5.0,
"monthly_drawdown_pct": 8.0
},
"data_quality": "OK",
"warnings": [],
"rationale": "Recent losing closes triggered a cooldown. Avoid new entries until the cooldown expires."
}
7. リソース
scripts/check_circuit_breaker.py- メインCLIとルールエンジンreferences/circuit_breaker_framework.md- ルール定義、デフォルト値、データソースの注意点skills/trader-memory-core/schemas/thesis.schema.json- thesis state のソーススキーマ
8. 重要原則
- 実現損益のみを見る - 日次計算には記録済みの
realized_pnlを使い、未実現損益や thesis 単位の累計だけに依存しない。 - 生存を優先する - サーキットブレーカーは損失後のエスカレーションを止めるためにある。
- 助言であり自動執行ではない - 出力は workflow gate に使うが、注文の発注、取消、ブロックは行わない。
- 段階的に劣化する - 空 state は許可し、壊れたローカルファイルは
PARTIALとして記録しつつクラッシュを避ける。