{
  "label_mode": "leg_gt",
  "train_ratio": 0.7,
  "holdout_ratio": 0.15,
  "outcomes_rows": 86924,
  "walk_forward": [
    {
      "month": "2025-06",
      "pnl_pct": 10.39,
      "start_asset_krw": 1000000.0,
      "end_asset_krw": 1103874.0
    },
    {
      "month": "2025-07",
      "pnl_pct": 60.89,
      "start_asset_krw": 1103874.0,
      "end_asset_krw": 1776051.0
    },
    {
      "month": "2025-08",
      "pnl_pct": 22.9,
      "start_asset_krw": 1776051.0,
      "end_asset_krw": 2182728.0
    },
    {
      "month": "2025-09",
      "pnl_pct": 57.63,
      "start_asset_krw": 2182728.0,
      "end_asset_krw": 3440648.0
    },
    {
      "month": "2025-10",
      "pnl_pct": 9.29,
      "start_asset_krw": 3440648.0,
      "end_asset_krw": 3760442.0
    },
    {
      "month": "2025-11",
      "pnl_pct": 11.24,
      "start_asset_krw": 3760442.0,
      "end_asset_krw": 4183047.0
    },
    {
      "month": "2025-12",
      "pnl_pct": -0.87,
      "start_asset_krw": 4183047.0,
      "end_asset_krw": 4146498.0
    },
    {
      "month": "2026-01",
      "pnl_pct": 33.77,
      "start_asset_krw": 4146498.0,
      "end_asset_krw": 5546639.0
    },
    {
      "month": "2026-02",
      "pnl_pct": 15.61,
      "start_asset_krw": 5546639.0,
      "end_asset_krw": 6412274.0
    },
    {
      "month": "2026-03",
      "pnl_pct": 9.12,
      "start_asset_krw": 6412274.0,
      "end_asset_krw": 6996857.0
    },
    {
      "month": "2026-04",
      "pnl_pct": 22.86,
      "start_asset_krw": 6996857.0,
      "end_asset_krw": 8596129.0
    },
    {
      "month": "2026-05",
      "pnl_pct": 47.58,
      "start_asset_krw": 8596129.0,
      "end_asset_krw": 12686054.0
    }
  ],
  "walk_forward_summary": {
    "buy_compound_tight": {
      "months": 12,
      "positive_months": 9,
      "positive_ratio": 0.75,
      "mean_ev_pct": 5.7974
    },
    "buy_compound_top3": {
      "months": 12,
      "positive_months": 9,
      "positive_ratio": 0.75,
      "mean_ev_pct": 5.5076
    },
    "buy_contrast_m10_bb_pos": {
      "months": 12,
      "positive_months": 9,
      "positive_ratio": 0.75,
      "mean_ev_pct": 5.4605
    },
    "buy_mtf_cross_all_tf": {
      "months": 12,
      "positive_months": 11,
      "positive_ratio": 0.9167,
      "mean_ev_pct": 6.007
    },
    "gt_model_buy_trough_local": {
      "months": 12,
      "positive_months": 10,
      "positive_ratio": 0.8333,
      "mean_ev_pct": 6.2957
    },
    "gt_model_buy_zigzag_bb": {
      "months": 8,
      "positive_months": 8,
      "positive_ratio": 1.0,
      "mean_ev_pct": 10.2649
    },
    "gt_model_sell_peak_local": {
      "months": 12,
      "positive_months": 12,
      "positive_ratio": 1.0,
      "mean_ev_pct": 2.6379
    },
    "gt_model_sell_zigzag_peak": {
      "months": 2,
      "positive_months": 2,
      "positive_ratio": 1.0,
      "mean_ev_pct": 11.6154
    },
    "sell_compound_tight": {
      "months": 12,
      "positive_months": 12,
      "positive_ratio": 1.0,
      "mean_ev_pct": 4.7678
    },
    "sell_compound_top3": {
      "months": 12,
      "positive_months": 12,
      "positive_ratio": 1.0,
      "mean_ev_pct": 4.6836
    },
    "sell_contrast_m10_bb_pos": {
      "months": 12,
      "positive_months": 12,
      "positive_ratio": 1.0,
      "mean_ev_pct": 4.5331
    },
    "sell_mtf_cross_all_tf": {
      "months": 12,
      "positive_months": 12,
      "positive_ratio": 1.0,
      "mean_ev_pct": 6.9987
    }
  },
  "fee_stress_mult": 2.0,
  "fee_stress_by_rule": {
    "buy_compound_top3": {
      "count": 17631,
      "ev_pct": 5.2063,
      "win_rate": 0.7138,
      "profit_factor": 3.4418
    },
    "buy_compound_tight": {
      "count": 2287,
      "ev_pct": 4.9966,
      "win_rate": 0.6874,
      "profit_factor": 3.0632
    },
    "buy_contrast_m10_bb_pos": {
      "count": 17993,
      "ev_pct": 5.2294,
      "win_rate": 0.7098,
      "profit_factor": 3.4977
    },
    "buy_mtf_cross_all_tf": {
      "count": 3533,
      "ev_pct": 5.3986,
      "win_rate": 0.7085,
      "profit_factor": 3.899
    },
    "sell_compound_top3": {
      "count": 15799,
      "ev_pct": 4.5906,
      "win_rate": 0.9455,
      "profit_factor": 29.2716
    },
    "sell_compound_tight": {
      "count": 2547,
      "ev_pct": 4.7878,
      "win_rate": 0.9458,
      "profit_factor": 38.8127
    },
    "sell_contrast_m10_bb_pos": {
      "count": 16104,
      "ev_pct": 4.4385,
      "win_rate": 0.9343,
      "profit_factor": 25.8628
    },
    "sell_mtf_cross_all_tf": {
      "count": 2938,
      "ev_pct": 7.1232,
      "win_rate": 1.0,
      "profit_factor": 20927.8254
    },
    "gt_model_buy_zigzag_bb": {
      "count": 25,
      "ev_pct": 8.5824,
      "win_rate": 0.84,
      "profit_factor": 41.1466
    },
    "gt_model_buy_trough_local": {
      "count": 1505,
      "ev_pct": 5.9624,
      "win_rate": 0.7302,
      "profit_factor": 4.588
    },
    "gt_model_sell_zigzag_peak": {
      "count": 8,
      "ev_pct": 11.7981,
      "win_rate": 1.0,
      "profit_factor": 94.3851
    },
    "gt_model_sell_peak_local": {
      "count": 6554,
      "ev_pct": 2.3084,
      "win_rate": 0.8184,
      "profit_factor": 4.8039
    }
  },
  "live_order_cap_sim": {
    "assumptions": {
      "slippage_pct": 0.05,
      "sizing": "hybrid_dd_tier_compound"
    },
    "taken_count": 787,
    "total_count": 845,
    "rules": {
      "buy_compound_tight": {
        "taken_count": 163,
        "total_count": 221,
        "metrics": {
          "count": 163,
          "ev_pct": 3.5096,
          "win_rate": 0.5828,
          "profit_factor": 2.0105
        }
      },
      "sell_mtf_cross_all_tf": {
        "taken_count": 624,
        "total_count": 624,
        "metrics": {
          "count": 624,
          "ev_pct": 7.0822,
          "win_rate": 1.0,
          "profit_factor": 4419.2872
        }
      }
    },
    "portfolio_adj_ev_pct": 6.3423
  },
  "go_no_go": {
    "go": true,
    "checks": [
      {
        "rule_id": "buy_compound_tight",
        "side": "buy",
        "pass": true,
        "holdout_ev": 5.6633,
        "holdout_pf": 3.1592,
        "wf_positive_ratio": 0.75,
        "fee_stress_ev": 4.9966
      },
      {
        "rule_id": "sell_mtf_cross_all_tf",
        "side": "sell",
        "pass": true,
        "holdout_ev": 7.1322,
        "holdout_pf": 4450.4872,
        "wf_positive_ratio": 1.0,
        "fee_stress_ev": 7.1232
      }
    ],
    "live_cap_taken_ratio": 1.0
  },
  "go_no_go_hybrid": {
    "go": true,
    "primary_sizing": "hybrid",
    "checks": [
      {
        "name": "monitor_rules_go",
        "pass": true
      },
      {
        "name": "hybrid_holdout_pnl",
        "pass": true,
        "value": 62.36
      },
      {
        "name": "hybrid_max_mdd",
        "pass": true,
        "value": 19.22
      },
      {
        "name": "hybrid_fee_stress_pnl",
        "pass": true,
        "value": 952.77
      },
      {
        "name": "option_c_target_300pct",
        "pass": true,
        "value": 1120.97,
        "optional": true
      }
    ]
  },
  "go_no_go_option_c_phase2": {
    "go": true,
    "gt_capture_ratio": 0.2612,
    "targets": {
      "phase2_pnl_pct": 1000.0,
      "min_gt_capture": 0.23,
      "portfolio_wf_min_ratio": 0.5
    },
    "checks": [
      {
        "name": "phase1_hybrid_go",
        "pass": true
      },
      {
        "name": "full_pnl_1000pct",
        "pass": true,
        "value": 1120.97
      },
      {
        "name": "gt_capture_23pct",
        "pass": true,
        "value": 0.2612
      },
      {
        "name": "holdout_pnl_positive",
        "pass": true,
        "value": 62.36
      },
      {
        "name": "max_mdd",
        "pass": true,
        "value": 19.22
      },
      {
        "name": "fee_stress_ratio",
        "pass": true,
        "value": 952.77,
        "threshold": 850.0
      },
      {
        "name": "slippage_stress_positive",
        "pass": true,
        "value": 27.66,
        "note": "체결가 슬리피지 반영 후에도 흑자"
      },
      {
        "name": "portfolio_wf_positive_ratio",
        "pass": true,
        "value": 0.9167
      }
    ]
  },
  "portfolio_compare": {
    "ground_truth_chrono": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 43913514.0,
      "pnl_krw": 42913514.0,
      "pnl_pct": 4291.35,
      "total_fees_krw": 240578.0,
      "cash_krw": 43913514.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 456,
      "max_drawdown_pct": 6.17,
      "peak_asset_krw": 1234838.0,
      "trough_asset_krw": 1158619.0
    },
    "sim_sized": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 1746868.0,
      "pnl_krw": 746868.0,
      "pnl_pct": 74.69,
      "total_fees_krw": 29780.0,
      "cash_krw": 1509979.0,
      "holding_qty": 486.425998,
      "holding_value_krw": 236889.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 5225,
      "max_drawdown_pct": 9.53,
      "peak_asset_krw": 1023021.0,
      "trough_asset_krw": 925549.0,
      "sizing_mode": "gt_model_compound_causal",
      "sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)"
    },
    "sim_fixed_order": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 58389.0,
      "pnl_krw": -941611.0,
      "pnl_pct": -94.16,
      "total_fees_krw": 43869.0,
      "cash_krw": -0.0,
      "holding_qty": 119.896264,
      "holding_value_krw": 58389.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "order_krw": 100000.0,
      "sizing_mode": "fixed",
      "trade_count": 5225
    },
    "sim_gt_model": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 1081984.0,
      "pnl_krw": 81984.0,
      "pnl_pct": 8.2,
      "total_fees_krw": 240.0,
      "cash_krw": 881042.0,
      "holding_qty": 412.612808,
      "holding_value_krw": 200942.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 33,
      "max_drawdown_pct": 4.38,
      "peak_asset_krw": 1072413.0,
      "trough_asset_krw": 1025457.0,
      "sizing_mode": "gt_model_compound_causal",
      "sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)"
    },
    "sim_causal_gt": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 1146560.0,
      "pnl_krw": 146560.0,
      "pnl_pct": 14.66,
      "total_fees_krw": 2101.0,
      "cash_krw": 1146560.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 134,
      "max_drawdown_pct": 0.96,
      "peak_asset_krw": 1117188.0,
      "trough_asset_krw": 1106457.0,
      "leg_count": 17,
      "sizing_mode": "causal_gt_leg_engine",
      "sizing_note": "인과 GT leg: split_buy + peak_sell, causal tier 복리 (미래 미사용)",
      "causal_gt_params": {
        "peak_mode": "local",
        "pivot_order": 8,
        "buy_swing_pct": 2.0,
        "sell_swing_pct": 3.0,
        "bb_max": 0.55,
        "min_leg_pct": 8.0,
        "min_bars_between_legs": 60,
        "use_local_trough": false
      },
      "alloc_stats": {
        "buy_executed": 101,
        "buy_skipped": 0,
        "sell_executed": 33,
        "sell_skipped": 0,
        "buy_total_krw": 2026492.0,
        "large_leg_count": 0,
        "large_tier_buy_count": 0,
        "buy_amount_avg_krw": 20064.0,
        "buy_amount_min_krw": 5000,
        "buy_amount_max_krw": 57147.0
      }
    },
    "sim_causal_hybrid": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 12209700.0,
      "pnl_krw": 11209700.0,
      "pnl_pct": 1120.97,
      "total_fees_krw": 695439.0,
      "cash_krw": 0.0,
      "holding_qty": 25071.252612,
      "holding_value_krw": 12209700.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 5225,
      "max_drawdown_pct": 19.22,
      "peak_asset_krw": 1149472.0,
      "trough_asset_krw": 928596.0,
      "sizing_mode": "monitor_dd_tier",
      "sizing_note": "monitor buy+sell + drawdown·past-leg tier (미래 미사용)",
      "alloc_stats": {
        "buy_executed": 1608,
        "buy_skipped": 679,
        "sell_executed": 2938,
        "sell_skipped": 0,
        "buy_total_krw": 695591657.0,
        "large_leg_count": 1598,
        "large_tier_buy_count": 1598,
        "buy_amount_avg_krw": 432582.0,
        "buy_amount_min_krw": 814.0,
        "buy_amount_max_krw": 8437092.0
      },
      "input_fires": 5225
    },
    "hybrid_dd_params": {
      "dd_large_pct": 5.0,
      "dd_medium_pct": 2.0
    },
    "sim_tier_enhanced": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 485326.0,
      "pnl_krw": -514674.0,
      "pnl_pct": -51.47,
      "total_fees_krw": 111808.0,
      "cash_krw": 0.0,
      "holding_qty": 996.562036,
      "holding_value_krw": 485326.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 5225,
      "max_drawdown_pct": 74.08,
      "peak_asset_krw": 1534299.0,
      "trough_asset_krw": 397703.0,
      "sizing_mode": "monitor_tier_enhanced",
      "sizing_note": "monitor buy+sell + past-leg·drawdown tier + conviction (미래 미사용)",
      "alloc_stats": {
        "buy_executed": 183,
        "buy_skipped": 2104,
        "sell_executed": 2938,
        "sell_skipped": 0,
        "buy_total_krw": 112251943.0,
        "large_leg_count": 144,
        "large_tier_buy_count": 144,
        "buy_amount_avg_krw": 613399.0,
        "buy_amount_min_krw": 5000,
        "buy_amount_max_krw": 1533530.0
      },
      "input_fires": 5225
    },
    "sim_sized_holdout": {
      "initial_asset_krw": 1605322.0,
      "final_asset_krw": 1751246.0,
      "pnl_krw": 145924.0,
      "pnl_pct": 9.09,
      "trade_count": 845,
      "note": "전기간 복리(causal tier) 후 holdout 구간 자산 증감"
    },
    "sim_hybrid_holdout": {
      "initial_asset_krw": 7813594.0,
      "final_asset_krw": 12686054.0,
      "pnl_krw": 4872460.0,
      "pnl_pct": 62.36,
      "trade_count": 845,
      "note": "전기간 복리(hybrid DD tier) 후 holdout 구간 자산 증감"
    },
    "sim_hybrid_fee_stress": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 10527724.0,
      "pnl_krw": 9527724.0,
      "pnl_pct": 952.77,
      "total_fees_krw": 1261948.0,
      "cash_krw": -0.0,
      "holding_qty": 21617.503526,
      "holding_value_krw": 10527724.0,
      "mark_price": 487.0,
      "fee_rate": 0.001,
      "trade_count": 5225,
      "max_drawdown_pct": 19.37,
      "peak_asset_krw": 4363286.0,
      "trough_asset_krw": 3518190.0
    },
    "sim_hybrid_slippage_stress": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 1276559.0,
      "pnl_krw": 276559.0,
      "pnl_pct": 27.66,
      "total_fees_krw": 695439.0,
      "cash_krw": 0.0,
      "holding_qty": 2621.271075,
      "holding_value_krw": 1276559.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 5225,
      "max_drawdown_pct": 59.37,
      "peak_asset_krw": 3404596.0,
      "trough_asset_krw": 1383204.0,
      "slippage_pct": 0.05,
      "sizing_mode": "hybrid_slippage_stress"
    },
    "hybrid_portfolio_walk_forward": [
      {
        "month": "2025-06",
        "pnl_pct": 10.39,
        "start_asset_krw": 1000000.0,
        "end_asset_krw": 1103874.0
      },
      {
        "month": "2025-07",
        "pnl_pct": 60.89,
        "start_asset_krw": 1103874.0,
        "end_asset_krw": 1776051.0
      },
      {
        "month": "2025-08",
        "pnl_pct": 22.9,
        "start_asset_krw": 1776051.0,
        "end_asset_krw": 2182728.0
      },
      {
        "month": "2025-09",
        "pnl_pct": 57.63,
        "start_asset_krw": 2182728.0,
        "end_asset_krw": 3440648.0
      },
      {
        "month": "2025-10",
        "pnl_pct": 9.29,
        "start_asset_krw": 3440648.0,
        "end_asset_krw": 3760442.0
      },
      {
        "month": "2025-11",
        "pnl_pct": 11.24,
        "start_asset_krw": 3760442.0,
        "end_asset_krw": 4183047.0
      },
      {
        "month": "2025-12",
        "pnl_pct": -0.87,
        "start_asset_krw": 4183047.0,
        "end_asset_krw": 4146498.0
      },
      {
        "month": "2026-01",
        "pnl_pct": 33.77,
        "start_asset_krw": 4146498.0,
        "end_asset_krw": 5546639.0
      },
      {
        "month": "2026-02",
        "pnl_pct": 15.61,
        "start_asset_krw": 5546639.0,
        "end_asset_krw": 6412274.0
      },
      {
        "month": "2026-03",
        "pnl_pct": 9.12,
        "start_asset_krw": 6412274.0,
        "end_asset_krw": 6996857.0
      },
      {
        "month": "2026-04",
        "pnl_pct": 22.86,
        "start_asset_krw": 6996857.0,
        "end_asset_krw": 8596129.0
      },
      {
        "month": "2026-05",
        "pnl_pct": 47.58,
        "start_asset_krw": 8596129.0,
        "end_asset_krw": 12686054.0
      }
    ],
    "hybrid_portfolio_wf_summary": {
      "months": 12,
      "positive_months": 11,
      "positive_ratio": 0.9167,
      "mean_pnl_pct": 25.03
    },
    "primary_sizing": "hybrid",
    "sim_primary": {
      "initial_cash_krw": 1000000,
      "final_asset_krw": 12209700.0,
      "pnl_krw": 11209700.0,
      "pnl_pct": 1120.97,
      "total_fees_krw": 695439.0,
      "cash_krw": 0.0,
      "holding_qty": 25071.252612,
      "holding_value_krw": 12209700.0,
      "mark_price": 487.0,
      "fee_rate": 0.0005,
      "trade_count": 5225,
      "max_drawdown_pct": 19.22,
      "peak_asset_krw": 1149472.0,
      "trough_asset_krw": 928596.0,
      "sizing_mode": "primary_hybrid_dd_tier",
      "sizing_note": "권장: monitor + past-leg·drawdown tier (검증 통과, 미래 미사용)",
      "alloc_stats": {
        "buy_executed": 1608,
        "buy_skipped": 679,
        "sell_executed": 2938,
        "sell_skipped": 0,
        "buy_total_krw": 695591657.0,
        "large_leg_count": 1598,
        "large_tier_buy_count": 1598,
        "buy_amount_avg_krw": 432582.0,
        "buy_amount_min_krw": 814.0,
        "buy_amount_max_krw": 8437092.0
      },
      "input_fires": 5225
    },
    "gt_capture_ratio": 0.0174,
    "gt_pnl_pct": 4291.35,
    "sim_sized_pnl_pct": 74.69,
    "gt_model_capture_ratio": 0.0019,
    "causal_gt_capture_ratio": 0.0034,
    "sim_causal_gt_pnl_pct": 14.66,
    "causal_hybrid_capture_ratio": 0.2612,
    "sim_causal_hybrid_pnl_pct": 1120.97,
    "tier_enhanced_capture_ratio": -0.012,
    "sim_tier_enhanced_pnl_pct": -51.47,
    "causal_gt_params": {
      "peak_mode": "local",
      "pivot_order": 8,
      "buy_swing_pct": 2.0,
      "sell_swing_pct": 3.0,
      "bb_max": 0.55,
      "min_leg_pct": 8.0,
      "min_bars_between_legs": 60,
      "use_local_trough": false
    },
    "gt_allocation_analysis": {
      "large_leg_ids": [
        3,
        5,
        14,
        18,
        19,
        20,
        21,
        22,
        33,
        40,
        46,
        49,
        52,
        53,
        72,
        74
      ],
      "large_leg_count": 16,
      "config_pct_large": 1.0,
      "config_pct_small": 0.05,
      "observed_implied_scale": {
        "all": {
          "count": 18,
          "mean": 0.1106,
          "median": 0.0527,
          "p25": 0.051,
          "p75": 0.054
        },
        "large_leg": {
          "count": 1,
          "mean": 1.0812,
          "median": 1.0812,
          "p25": 1.0812,
          "p75": 1.0812
        },
        "small_leg": {
          "count": 17,
          "mean": 0.0535,
          "median": 0.051,
          "p25": 0.051,
          "p75": 0.0539
        }
      },
      "recommended_pct_large_leg": 1.0812,
      "recommended_pct_small_leg": 0.051,
      "note": "implied_scale = amount / (pre_buy_total_asset × weight_share); 시뮬 tier는 GT 분석 median 사용"
    },
    "causal_mode": {
      "gt_signal_causal": true,
      "sim_causal_tier": true,
      "note": "인과적: t 시점까지 데이터만 사용 (운영 정합)"
    }
  },
  "gt_model": {
    "selection_mode": "split_buy_peak_sell",
    "leg_definition": "이전 고점 매도 ~ 다음 고점 매도 구간 = leg_id; 기간말 잔여 구간은 마지막 leg",
    "entry": {
      "pivot": "trough",
      "price": "Low",
      "weight_rule": "inverse_price_normalized",
      "weight_formula": "w_i = (1/price_i) / sum(1/price_j)",
      "max_buys_per_leg": 12,
      "min_bars_between_buys": 24,
      "bb_filter": "bb_pos <= 0.45"
    },
    "exit": {
      "pivot": "peak",
      "price": "High",
      "weight_rule": "fixed_split_or_full",
      "weights_split": [
        0.65,
        0.35
      ],
      "split_gap_pct": 2.5,
      "max_sells_per_leg": 2
    },
    "capital": {
      "buy": "target = total_asset * (weight/remaining_weights) * tier_scale; amount = min(target, available_cash/(1+fee))",
      "optimal_buy_rate": "weight / sum(remaining_buy_weights_in_leg)",
      "large_leg_top_pct": 0.2,
      "pct_large_leg": 1.0,
      "pct_small_leg": 0.05,
      "min_order_krw": 5000.0,
      "sell": "sell_base_qty * sell_weight * price (last sell = full leg_qty)"
    },
    "execution": {
      "chrono": "amount_krw 배분·summary.pnl_pct = 시각순 체결(매도 후 현금 → 다음 매수 반영)",
      "leg_block_json": "JSON 저장 순서 = leg별 매수 전량 → 매도 전량 (차트·테이블 leg 정합)"
    }
  },
  "gt_weight_policy": {
    "entry_weight_rule": "inverse_price_normalized",
    "exit_split_weights": [
      0.65,
      0.35
    ],
    "capital_large_pct": 1.0,
    "capital_small_pct": 0.05,
    "large_leg_top_pct": 0.2
  },
  "gt_leg_weight_validation": {
    "legs": {
      "0": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "1": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 12,
        "n_sell": 2,
        "valid": true
      },
      "2": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "3": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "4": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "5": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "6": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "7": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "8": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "9": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "10": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "11": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "12": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "13": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 7,
        "n_sell": 2,
        "valid": true
      },
      "14": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "15": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "16": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 7,
        "n_sell": 2,
        "valid": true
      },
      "17": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "18": {
        "buy_sum": 0.999,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "19": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "20": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "21": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "22": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "23": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "24": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "25": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "26": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "27": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 1,
        "valid": true
      },
      "28": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "29": {
        "buy_sum": 0.999,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "30": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "31": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "32": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "33": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "34": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "35": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 7,
        "n_sell": 2,
        "valid": true
      },
      "36": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "37": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "38": {
        "buy_sum": 0.999,
        "sell_sum": 1.0,
        "n_buy": 7,
        "n_sell": 2,
        "valid": true
      },
      "39": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "40": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "41": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 12,
        "n_sell": 2,
        "valid": true
      },
      "42": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 11,
        "n_sell": 2,
        "valid": true
      },
      "43": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "44": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "45": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 7,
        "n_sell": 2,
        "valid": true
      },
      "46": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "47": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "48": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 8,
        "n_sell": 2,
        "valid": true
      },
      "49": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 10,
        "n_sell": 2,
        "valid": true
      },
      "50": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "51": {
        "buy_sum": 0.999,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "52": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "53": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "54": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "55": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "56": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "57": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "58": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "59": {
        "buy_sum": 0.999,
        "sell_sum": 1.0,
        "n_buy": 9,
        "n_sell": 2,
        "valid": true
      },
      "60": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 5,
        "n_sell": 2,
        "valid": true
      },
      "61": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "62": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "63": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "64": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 7,
        "n_sell": 2,
        "valid": true
      },
      "65": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "66": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "67": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "68": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "69": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 1,
        "n_sell": 2,
        "valid": true
      },
      "70": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "71": {
        "buy_sum": 0.999,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "72": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "73": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "74": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 4,
        "n_sell": 2,
        "valid": true
      },
      "75": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 1,
        "valid": true
      }
    },
    "invalid_leg_ids": [],
    "all_valid": true
  },
  "monitor_rules": [
    {
      "rule_id": "buy_compound_tight",
      "side": "buy",
      "kind": "compound_tight",
      "conditions": [
        {
          "col": "m10_bb_pos",
          "op": "between",
          "lo": 0.020269805294580265,
          "hi": 0.1573047482613718
        },
        {
          "col": "m10_ga_cci_20",
          "op": "between",
          "lo": -176.0610418573743,
          "hi": -134.25322440673844
        },
        {
          "col": "m5_bb_pos",
          "op": "between",
          "lo": 0.04935035261803711,
          "hi": 0.1678449416858898
        }
      ],
      "valid_fire_rate": 0.0143,
      "metrics": {
        "all": {
          "count": 2287,
          "ev_pct": 5.0966,
          "win_rate": 0.6891,
          "profit_factor": 3.1319
        },
        "train": {
          "count": 1446,
          "ev_pct": 4.3319,
          "win_rate": 0.6812,
          "profit_factor": 3.0046
        },
        "valid": {
          "count": 620,
          "ev_pct": 6.6782,
          "win_rate": 0.7226,
          "profit_factor": 3.3483
        },
        "holdout": {
          "count": 221,
          "ev_pct": 5.6633,
          "win_rate": 0.6471,
          "profit_factor": 3.1592
        }
      },
      "pass_valid": true,
      "pass_holdout": true
    },
    {
      "rule_id": "sell_mtf_cross_all_tf",
      "side": "sell",
      "kind": "mtf_cross",
      "conditions": [
        {
          "col": "m3_ga_cci_20",
          "op": "between",
          "lo": 71.08020816708225,
          "hi": 152.0239279574577
        },
        {
          "col": "m5_bb_pos",
          "op": "between",
          "lo": 0.7812942210429725,
          "hi": 0.979827466617936
        },
        {
          "col": "m10_bb_pos",
          "op": "between",
          "lo": 0.8052954063070535,
          "hi": 1.0
        },
        {
          "col": "m15_bb_pos",
          "op": "between",
          "lo": 0.8266597207479214,
          "hi": 1.0
        },
        {
          "col": "m30_ga_ha_bull",
          "op": "eq_int",
          "value": 1
        },
        {
          "col": "m60_ga_ha_bull",
          "op": "eq_int",
          "value": 1
        },
        {
          "col": "m240_ga_ha_bull",
          "op": "eq_int",
          "value": 1
        },
        {
          "col": "d1_ga_ha_bull",
          "op": "eq_int",
          "value": 1
        }
      ],
      "valid_fire_rate": 0.013,
      "metrics": {
        "all": {
          "count": 2938,
          "ev_pct": 7.2232,
          "win_rate": 1.0,
          "profit_factor": 21221.6254
        },
        "train": {
          "count": 1749,
          "ev_pct": 7.1667,
          "win_rate": 1.0,
          "profit_factor": 12534.5465
        },
        "valid": {
          "count": 565,
          "ev_pct": 7.4984,
          "win_rate": 1.0,
          "profit_factor": 4236.5917
        },
        "holdout": {
          "count": 624,
          "ev_pct": 7.1322,
          "win_rate": 1.0,
          "profit_factor": 4450.4872
        }
      },
      "pass_valid": true,
      "pass_holdout": true
    }
  ],
  "gt_portfolio_calibration": {
    "portfolio": {
      "gt_final_asset_krw": 43913513.0,
      "subset_final_asset_krw": 1000000.0,
      "asset_ratio": 0.0228,
      "asset_accuracy_pct": 2.28,
      "target_met_90": false,
      "legs_total": 76,
      "legs_covered": 0,
      "leg_coverage_ratio": 0.0,
      "full_pnl_pct": 4291.35,
      "subset_pnl_pct": 0.0
    },
    "note": "캘리브레이션 미실행 — scripts/04_calibrate_gt_assets.py"
  },
  "criteria": {
    "min_holdout_ev": 0.0,
    "min_holdout_pf": 1.0,
    "wf_positive_ratio": 0.5,
    "wf_min_months": 3,
    "hybrid_min_holdout_pnl_pct": 0.0,
    "hybrid_max_mdd_pct": 30.0,
    "option_c_target_pnl_pct": 300.0,
    "option_c_phase2_target_pnl_pct": 1000.0,
    "option_c_min_gt_capture": 0.23
  }
}