コンテンツにスキップ

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_BASEsmall_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 (ベース)

教訓

  1. __post_init__ の暗黙変換は危険: BT/PT間でフラグ値が異なると、全パラメータがサイレントに分岐する
  2. Conviction AllocatorはBTに存在しない: PT専用コンポーネントのフォールバック値がBTと乖離していた
  3. Spear戦略のBT/PT挙動差異: 日足BTではROC/RSI momentum+gex_valley二重ゲートを通過不可能だが、PT(OHLCV mode+リアルタイムデータ)では通過し損失を発生
  4. 明示パラメータが安全: フラグ→暗黙変換ではなく、各パラメータを直接設定すべき

関連ページ