BT→PT パラメータ完全移植 (2026-03-12)¶
重要: BT/PT不一致が-51.71%損失の主因
PT (Paper Trading) が BT (Backtest) と異なるパラメータで稼働していたことが判明。 本ページは発見された全不一致と修正内容を記録する。
背景¶
2026-03-12時点でPT XWシナリオが -51.71% Total ROI を記録。 BT XW_BEST_20260311 は同期間で大幅プラスを達成しているため、パラメータ不一致を疑いゼロベース検証を実施。
根本原因: small_account_mode の二重構造¶
BT側 _MEGA_BASE は small_account_mode=True を設定。
BeatShieldParams の __post_init__ が以下を自動設定:
# beat_shield.py __post_init__
if self.small_account_mode:
self.target_spread_width = 3.0 # $3幅
self.max_spread_width = 3.0
self.split_entry_count = 1 # 一括エントリー
self.per_trade_risk_pct = 0.02 # 2%
self.strategy_risk_cap_pct = 0.08 # 8%
PT側は small_account_mode=False だったため、全てデフォルト値($5幅、4%、3分割)で稼働していた。
発見された不一致一覧¶
BeatShield パラメータ¶
| パラメータ | BT実行値 | PT旧値 | 影響 |
|---|---|---|---|
| target_spread_width | $3.0 | $5.0 | スプレッド幅拡大 → 単価上昇 → 同一資金で少ないポジション |
| max_spread_width | $3.0 | $5.0 | 同上 |
| split_entry_count | 1 (一括) | 3 (分割) | 3分割 → 平均取得コスト変動 → BT未検証のエントリーパターン |
| per_trade_risk_pct | 0.02 (2%) | 0.04 (4%) | リスク2倍 → ポジションサイズ2倍 → DD拡大 |
| strategy_risk_cap_pct | 0.08 (8%) | 0.10 (10%) | 戦略リスク上限緩い → 集中度上昇 |
Conviction Allocator (PT専用)¶
| パラメータ | BT | PT旧値 | 影響 |
|---|---|---|---|
| r_per_trade_pct | N/A (未使用) | 0.08 (8%) | Allocatorが8%リスクで計算 → beat_params.per_trade_riskの4倍 |
Conviction Allocator はBTに存在しない
BTはConvictionAllocatorを一切使用しない。PTのみの機能であり、
max_allocation_pct >= 0.90 の条件で r_per_trade_pct=0.08 がフォールバック適用されていた。
Spear戦略¶
| パラメータ | BT実行結果 | PT実行結果 | 影響 |
|---|---|---|---|
| spear_enabled | エントリー0件 (全219ラン) | 14回発火、-$2,584損失 | BT未検証の戦略がライブで暴走 |
修正内容¶
方針: small_account_mode 廃止 → 明示パラメータ¶
small_account_mode は __post_init__ 内部で暗黙的にパラメータを上書きするため、
BT/PT間の不一致が発見困難だった。明示パラメータに段階的に移行する。
PT側修正 (run_paper_trading_v3.py)¶
# XW ScenarioConfig に明示値を追加
beat_target_spread_width=3.0, # BT: SMALL_ACCOUNT_SPREAD_WIDTH
beat_max_spread_width=3.0,
beat_split_entry_count=1, # BT: 一括エントリー
beat_per_trade_risk_pct=0.02, # BT: 2%
beat_strategy_risk_cap_pct=0.08, # BT: 8%
spear_enabled=False, # BT: 0件のため無効化
BT側修正 (run_backtest_multiple_scenarios.py)¶
# _MEGA_BASE に明示値を追加(small_account_modeと併存)
beat_target_spread_width=3.0,
beat_split_entry_count=1,
beat_per_trade_risk_pct=0.02,
beat_strategy_risk_cap_pct=0.08,
Conviction Allocator修正¶
# shield_risk_per_trade=None の場合、beat_per_trade_risk_pct を優先参照
override_r_per_trade = (
config.shield_risk_per_trade if config.shield_risk_per_trade is not None
else _explicit_risk if _explicit_risk is not None # beat_per_trade_risk_pct
else 0.08 # PlanO等のフォールバック
)
XW: beat_per_trade_risk_pct=0.02 → Allocatorも2%で計算(旧: 8%)
BT XW_BEST_20260311 コードパストレース¶
XW_BEST_20260311 シナリオ定義
↓ _mb() で _MEGA_BASE とマージ
↓ small_account_mode=True, use_apas_v3=True, use_apas=False
↓
run_single_scenario()
↓ scenario.use_apas = False → else分岐(固定パラメータ, L13227)
↓ beat_spread_width = 5.0 (デフォルト、liquidity_config なし)
↓
BeatShieldParams(small_account_mode=True, target_spread_width=5.0, ...)
↓ __post_init__ 発火:
│ target_spread_width = 3.0 (5.0を上書き)
│ max_spread_width = 3.0
│ split_entry_count = 1
│ per_trade_risk_pct = 0.02
│ strategy_risk_cap_pct = 0.08
↓
シナリオオーバーライド適用:
│ profit_take_pct = 0.41
│ stop_loss_pct = 0.80
│ max_hold_days = 28
│ min_credit_ratio = 0.275
│ cr_sizing_mode = "tiered"
│ min_dte = 10, max_dte = 30
↓
shield_risk_per_trade = None → per_trade_risk_pct 変更なし (0.02維持)
現在の XW 確定パラメータ一覧¶
BT/PT完全一致 (2026-03-12以降)
| カテゴリ | パラメータ | 値 | 備考 |
|---|---|---|---|
| エントリー | スプレッド幅 | $3.0 | 旧: PT=$5.0 |
| 分割エントリー | 1 (一括) | 旧: PT=3分割 | |
| DTE範囲 | 10-30 | Ablation Phase 2 | |
| 最小CR | 0.275 (27.5%) | CR Sweep最適 | |
| CR Sizing | S2 Tiered | BT検証済み | |
| 反転シグナル | 0 (撤廃) | BT同条件 | |
| リスク | 1トレードリスク | 2% | 旧: PT=4% (Allocator=8%) |
| 戦略リスク上限 | 8% | 旧: PT=10% | |
| 最大同時ポジション | Cap 50 | Capital Scaling | |
| セクター上限 | 30 (実質無制限) | ||
| イグジット | 利確 (TP) | 41% | |
| 損切 (SL) | 80% | ||
| 最大保有日数 | 28日 | ||
| VIXストップ | 30 | COVID生存唯一の条件 | |
| 戦略 | Spear | 無効化 | BT 0件 / PT損失 |
| CrisisAlpha | 有効 | Plan S | |
| 資本 | 初期資本 | $32,000 | |
| Scaling Base | $32,000 | ||
| Scaling Power | 1.0 (linear) | ||
| Max Contracts | 20 (ベース) |
教訓¶
__post_init__の暗黙変換は危険: BT/PT間でフラグ値が異なると、全パラメータがサイレントに分岐する- Conviction AllocatorはBTに存在しない: PT専用コンポーネントのフォールバック値がBTと乖離していた
- Spear戦略のBT/PT挙動差異: 日足BTではROC/RSI momentum+gex_valley二重ゲートを通過不可能だが、PT(OHLCV mode+リアルタイムデータ)では通過し損失を発生
- 明示パラメータが安全: フラグ→暗黙変換ではなく、各パラメータを直接設定すべき
関連ページ¶
- XW_CR25_DTE10-30: 現行戦略パラメータ
- XW_CR25_M98: 親戦略
- Beat Shield: BeatShieldParams 詳細