{
  "label_mode": "leg_gt",
  "train_ratio": 0.7,
  "holdout_ratio": 0.15,
  "outcomes_rows": 77184,
  "walk_forward": [
    {
      "month": "2025-06",
      "pnl_pct": 15.0,
      "start_asset_krw": 400000.0,
      "end_asset_krw": 459985.0
    },
    {
      "month": "2025-07",
      "pnl_pct": 57.74,
      "start_asset_krw": 459985.0,
      "end_asset_krw": 725559.0
    },
    {
      "month": "2025-08",
      "pnl_pct": 21.52,
      "start_asset_krw": 725559.0,
      "end_asset_krw": 881721.0
    },
    {
      "month": "2025-09",
      "pnl_pct": 42.03,
      "start_asset_krw": 881721.0,
      "end_asset_krw": 1252333.0
    },
    {
      "month": "2025-10",
      "pnl_pct": 8.51,
      "start_asset_krw": 1252333.0,
      "end_asset_krw": 1358874.0
    },
    {
      "month": "2025-11",
      "pnl_pct": 8.1,
      "start_asset_krw": 1358874.0,
      "end_asset_krw": 1468941.0
    },
    {
      "month": "2025-12",
      "pnl_pct": -3.67,
      "start_asset_krw": 1468941.0,
      "end_asset_krw": 1415055.0
    },
    {
      "month": "2026-01",
      "pnl_pct": 34.57,
      "start_asset_krw": 1415055.0,
      "end_asset_krw": 1904276.0
    },
    {
      "month": "2026-02",
      "pnl_pct": 21.04,
      "start_asset_krw": 1904276.0,
      "end_asset_krw": 2304943.0
    },
    {
      "month": "2026-03",
      "pnl_pct": 1.08,
      "start_asset_krw": 2304943.0,
      "end_asset_krw": 2329782.0
    },
    {
      "month": "2026-04",
      "pnl_pct": 21.17,
      "start_asset_krw": 2329782.0,
      "end_asset_krw": 2822903.0
    },
    {
      "month": "2026-05",
      "pnl_pct": 41.14,
      "start_asset_krw": 2822903.0,
      "end_asset_krw": 3984211.0
    },
    {
      "month": "2026-06",
      "pnl_pct": 32.08,
      "start_asset_krw": 3984211.0,
      "end_asset_krw": 5262393.0
    }
  ],
  "walk_forward_summary": {
    "buy_compound_tight": {
      "months": 13,
      "positive_months": 10,
      "positive_ratio": 0.7692,
      "mean_ev_pct": 7.0206
    },
    "buy_compound_top3": {
      "months": 13,
      "positive_months": 11,
      "positive_ratio": 0.8462,
      "mean_ev_pct": 6.8063
    },
    "buy_contrast_m10_bb_pos": {
      "months": 13,
      "positive_months": 10,
      "positive_ratio": 0.7692,
      "mean_ev_pct": 6.6378
    },
    "buy_mtf_cross_all_tf": {
      "months": 12,
      "positive_months": 11,
      "positive_ratio": 0.9167,
      "mean_ev_pct": 5.7691
    },
    "gt_model_buy_trough_local": {
      "months": 13,
      "positive_months": 11,
      "positive_ratio": 0.8462,
      "mean_ev_pct": 6.9544
    },
    "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": 13,
      "positive_months": 13,
      "positive_ratio": 1.0,
      "mean_ev_pct": 2.6722
    },
    "gt_model_sell_zigzag_peak": {
      "months": 2,
      "positive_months": 2,
      "positive_ratio": 1.0,
      "mean_ev_pct": 11.6154
    },
    "sell_compound_tight": {
      "months": 13,
      "positive_months": 13,
      "positive_ratio": 1.0,
      "mean_ev_pct": 5.3948
    },
    "sell_compound_top3": {
      "months": 13,
      "positive_months": 13,
      "positive_ratio": 1.0,
      "mean_ev_pct": 5.0831
    },
    "sell_contrast_m10_bb_pos": {
      "months": 13,
      "positive_months": 13,
      "positive_ratio": 1.0,
      "mean_ev_pct": 4.8883
    },
    "sell_mtf_cross_all_tf": {
      "months": 13,
      "positive_months": 13,
      "positive_ratio": 1.0,
      "mean_ev_pct": 7.4322
    }
  },
  "fee_stress_mult": 2.0,
  "fee_stress_by_rule": {
    "buy_compound_top3": {
      "count": 9989,
      "ev_pct": 5.3657,
      "win_rate": 0.7162,
      "profit_factor": 3.6056
    },
    "buy_compound_tight": {
      "count": 1029,
      "ev_pct": 5.4293,
      "win_rate": 0.6842,
      "profit_factor": 3.3529
    },
    "buy_contrast_m10_bb_pos": {
      "count": 19029,
      "ev_pct": 5.3862,
      "win_rate": 0.7152,
      "profit_factor": 3.6162
    },
    "buy_mtf_cross_all_tf": {
      "count": 5244,
      "ev_pct": 5.3262,
      "win_rate": 0.7061,
      "profit_factor": 3.809
    },
    "sell_compound_top3": {
      "count": 11480,
      "ev_pct": 4.6861,
      "win_rate": 0.9444,
      "profit_factor": 30.4894
    },
    "sell_compound_tight": {
      "count": 1394,
      "ev_pct": 5.0381,
      "win_rate": 0.9505,
      "profit_factor": 48.4627
    },
    "sell_contrast_m10_bb_pos": {
      "count": 16859,
      "ev_pct": 4.506,
      "win_rate": 0.9361,
      "profit_factor": 26.6487
    },
    "sell_mtf_cross_all_tf": {
      "count": 4019,
      "ev_pct": 7.2121,
      "win_rate": 1.0,
      "profit_factor": 28985.5736
    },
    "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": 1508,
      "ev_pct": 6.1193,
      "win_rate": 0.7381,
      "profit_factor": 4.738
    },
    "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": 6600,
      "ev_pct": 2.3127,
      "win_rate": 0.8191,
      "profit_factor": 4.83
    }
  },
  "live_order_cap_sim": {
    "assumptions": {
      "slippage_pct": 0.05,
      "sizing": "hybrid_dd_tier_compound"
    },
    "taken_count": 890,
    "total_count": 913,
    "rules": {
      "buy_compound_tight": {
        "taken_count": 77,
        "total_count": 100,
        "metrics": {
          "count": 77,
          "ev_pct": 8.9083,
          "win_rate": 0.7013,
          "profit_factor": 6.6417
        }
      },
      "sell_mtf_cross_all_tf": {
        "taken_count": 813,
        "total_count": 813,
        "metrics": {
          "count": 813,
          "ev_pct": 7.7543,
          "win_rate": 1.0,
          "profit_factor": 6304.2446
        }
      }
    },
    "portfolio_adj_ev_pct": 7.8541
  },
  "go_no_go": {
    "go": true,
    "checks": [
      {
        "rule_id": "buy_compound_tight",
        "side": "buy",
        "pass": true,
        "holdout_ev": 10.8775,
        "holdout_pf": 9.8832,
        "wf_positive_ratio": 0.7692,
        "fee_stress_ev": 5.4293
      },
      {
        "rule_id": "sell_mtf_cross_all_tf",
        "side": "sell",
        "pass": true,
        "holdout_ev": 7.8043,
        "holdout_pf": 6344.8946,
        "wf_positive_ratio": 1.0,
        "fee_stress_ev": 7.2121
      }
    ],
    "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": 101.42
      },
      {
        "name": "hybrid_max_mdd",
        "pass": true,
        "value": 19.76
      },
      {
        "name": "hybrid_fee_stress_pnl",
        "pass": true,
        "value": 1065.77
      },
      {
        "name": "option_c_target_300pct",
        "pass": true,
        "value": 1215.6,
        "optional": true
      }
    ]
  },
  "go_no_go_option_c_phase2": {
    "go": false,
    "gt_capture_ratio": 0.2019,
    "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": 1215.6
      },
      {
        "name": "gt_capture_23pct",
        "pass": false,
        "value": 0.2019
      },
      {
        "name": "holdout_pnl_positive",
        "pass": true,
        "value": 101.42
      },
      {
        "name": "max_mdd",
        "pass": true,
        "value": 19.76
      },
      {
        "name": "fee_stress_ratio",
        "pass": true,
        "value": 1065.77,
        "threshold": 850.0
      },
      {
        "name": "slippage_stress_positive",
        "pass": true,
        "value": 91.16,
        "note": "체결가 슬리피지 반영 후에도 흑자"
      },
      {
        "name": "portfolio_wf_positive_ratio",
        "pass": true,
        "value": 0.9231
      }
    ]
  },
  "portfolio_compare": {
    "ground_truth_chrono": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 24488124.0,
      "pnl_krw": 24088124.0,
      "pnl_pct": 6022.03,
      "total_fees_krw": 127822.0,
      "cash_krw": 24488124.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 485,
      "max_drawdown_pct": 6.57,
      "peak_asset_krw": 491720.0,
      "trough_asset_krw": 459404.0
    },
    "sim_sized": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 632469.0,
      "pnl_krw": 232469.0,
      "pnl_pct": 58.12,
      "total_fees_krw": 8806.0,
      "cash_krw": 632400.0,
      "holding_qty": 0.087967,
      "holding_value_krw": 69.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 5048,
      "max_drawdown_pct": 9.61,
      "peak_asset_krw": 408681.0,
      "trough_asset_krw": 369398.0,
      "sizing_mode": "gt_model_compound_causal",
      "sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)"
    },
    "sim_fixed_order": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 26802.0,
      "pnl_krw": -373198.0,
      "pnl_pct": -93.3,
      "total_fees_krw": 14326.0,
      "cash_krw": 26802.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "order_krw": 40000.0,
      "sizing_mode": "fixed",
      "trade_count": 5048
    },
    "sim_gt_model": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 485017.0,
      "pnl_krw": 85017.0,
      "pnl_pct": 21.25,
      "total_fees_krw": 120.0,
      "cash_krw": 309487.0,
      "holding_qty": 223.320164,
      "holding_value_krw": 175530.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 33,
      "max_drawdown_pct": 9.79,
      "peak_asset_krw": 429734.0,
      "trough_asset_krw": 387649.0,
      "sizing_mode": "gt_model_compound_causal",
      "sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)"
    },
    "sim_causal_gt": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 457564.0,
      "pnl_krw": 57564.0,
      "pnl_pct": 14.39,
      "total_fees_krw": 920.0,
      "cash_krw": 457564.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 134,
      "max_drawdown_pct": 1.52,
      "peak_asset_krw": 446670.0,
      "trough_asset_krw": 439902.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": 891175.0,
        "large_leg_count": 0,
        "large_tier_buy_count": 0,
        "buy_amount_avg_krw": 8824.0,
        "buy_amount_min_krw": 5000,
        "buy_amount_max_krw": 22806.0
      }
    },
    "sim_causal_hybrid": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 5262393.0,
      "pnl_krw": 4862393.0,
      "pnl_pct": 1215.6,
      "total_fees_krw": 197687.0,
      "cash_krw": 5262393.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 5048,
      "max_drawdown_pct": 19.76,
      "peak_asset_krw": 2685460.0,
      "trough_asset_krw": 2154801.0,
      "sizing_mode": "monitor_dd_tier",
      "sizing_note": "monitor buy+sell + drawdown·past-leg tier (미래 미사용)",
      "alloc_stats": {
        "buy_executed": 761,
        "buy_skipped": 268,
        "sell_executed": 4019,
        "sell_skipped": 0,
        "buy_total_krw": 195156416.0,
        "large_leg_count": 750,
        "large_tier_buy_count": 750,
        "buy_amount_avg_krw": 256447.0,
        "buy_amount_min_krw": 5000,
        "buy_amount_max_krw": 3067511.0
      },
      "input_fires": 5048
    },
    "hybrid_dd_params": {
      "dd_large_pct": 5.0,
      "dd_medium_pct": 2.0
    },
    "sim_tier_enhanced": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 542410.0,
      "pnl_krw": 142410.0,
      "pnl_pct": 35.6,
      "total_fees_krw": 58472.0,
      "cash_krw": 542395.0,
      "holding_qty": 0.019611,
      "holding_value_krw": 15.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 5048,
      "max_drawdown_pct": 60.86,
      "peak_asset_krw": 844144.0,
      "trough_asset_krw": 330412.0,
      "sizing_mode": "monitor_tier_enhanced",
      "sizing_note": "monitor buy+sell + past-leg·drawdown tier + conviction (미래 미사용)",
      "alloc_stats": {
        "buy_executed": 150,
        "buy_skipped": 879,
        "sell_executed": 4019,
        "sell_skipped": 0,
        "buy_total_krw": 58371500.0,
        "large_leg_count": 113,
        "large_tier_buy_count": 113,
        "buy_amount_avg_krw": 389143.0,
        "buy_amount_min_krw": 5000,
        "buy_amount_max_krw": 843688.0
      },
      "input_fires": 5048
    },
    "sim_sized_holdout": {
      "initial_asset_krw": 559081.0,
      "final_asset_krw": 632472.0,
      "pnl_krw": 73391.0,
      "pnl_pct": 13.13,
      "trade_count": 913,
      "note": "전기간 복리(causal tier) 후 holdout 구간 자산 증감"
    },
    "sim_hybrid_holdout": {
      "initial_asset_krw": 2612582.0,
      "final_asset_krw": 5262393.0,
      "pnl_krw": 2649811.0,
      "pnl_pct": 101.42,
      "trade_count": 913,
      "note": "전기간 복리(hybrid DD tier) 후 holdout 구간 자산 증감"
    },
    "sim_hybrid_fee_stress": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 4663063.0,
      "pnl_krw": 4263063.0,
      "pnl_pct": 1065.77,
      "total_fees_krw": 365943.0,
      "cash_krw": 4663059.0,
      "holding_qty": 0.005146,
      "holding_value_krw": 4.0,
      "mark_price": 786.0,
      "fee_rate": 0.001,
      "trade_count": 5048,
      "max_drawdown_pct": 20.13,
      "peak_asset_krw": 2445202.0,
      "trough_asset_krw": 1953065.0
    },
    "sim_hybrid_slippage_stress": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 764640.0,
      "pnl_krw": 364640.0,
      "pnl_pct": 91.16,
      "total_fees_krw": 197687.0,
      "cash_krw": 764640.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 5048,
      "max_drawdown_pct": 46.47,
      "peak_asset_krw": 1421723.0,
      "trough_asset_krw": 761079.0,
      "slippage_pct": 0.05,
      "sizing_mode": "hybrid_slippage_stress"
    },
    "hybrid_portfolio_walk_forward": [
      {
        "month": "2025-06",
        "pnl_pct": 15.0,
        "start_asset_krw": 400000.0,
        "end_asset_krw": 459985.0
      },
      {
        "month": "2025-07",
        "pnl_pct": 57.74,
        "start_asset_krw": 459985.0,
        "end_asset_krw": 725559.0
      },
      {
        "month": "2025-08",
        "pnl_pct": 21.52,
        "start_asset_krw": 725559.0,
        "end_asset_krw": 881721.0
      },
      {
        "month": "2025-09",
        "pnl_pct": 42.03,
        "start_asset_krw": 881721.0,
        "end_asset_krw": 1252333.0
      },
      {
        "month": "2025-10",
        "pnl_pct": 8.51,
        "start_asset_krw": 1252333.0,
        "end_asset_krw": 1358874.0
      },
      {
        "month": "2025-11",
        "pnl_pct": 8.1,
        "start_asset_krw": 1358874.0,
        "end_asset_krw": 1468941.0
      },
      {
        "month": "2025-12",
        "pnl_pct": -3.67,
        "start_asset_krw": 1468941.0,
        "end_asset_krw": 1415055.0
      },
      {
        "month": "2026-01",
        "pnl_pct": 34.57,
        "start_asset_krw": 1415055.0,
        "end_asset_krw": 1904276.0
      },
      {
        "month": "2026-02",
        "pnl_pct": 21.04,
        "start_asset_krw": 1904276.0,
        "end_asset_krw": 2304943.0
      },
      {
        "month": "2026-03",
        "pnl_pct": 1.08,
        "start_asset_krw": 2304943.0,
        "end_asset_krw": 2329782.0
      },
      {
        "month": "2026-04",
        "pnl_pct": 21.17,
        "start_asset_krw": 2329782.0,
        "end_asset_krw": 2822903.0
      },
      {
        "month": "2026-05",
        "pnl_pct": 41.14,
        "start_asset_krw": 2822903.0,
        "end_asset_krw": 3984211.0
      },
      {
        "month": "2026-06",
        "pnl_pct": 32.08,
        "start_asset_krw": 3984211.0,
        "end_asset_krw": 5262393.0
      }
    ],
    "hybrid_portfolio_wf_summary": {
      "months": 13,
      "positive_months": 12,
      "positive_ratio": 0.9231,
      "mean_pnl_pct": 23.1
    },
    "primary_sizing": "hybrid",
    "sim_primary": {
      "initial_cash_krw": 400000,
      "final_asset_krw": 5262393.0,
      "pnl_krw": 4862393.0,
      "pnl_pct": 1215.6,
      "total_fees_krw": 197687.0,
      "cash_krw": 5262393.0,
      "holding_qty": 0.0,
      "holding_value_krw": 0.0,
      "mark_price": 786.0,
      "fee_rate": 0.0005,
      "trade_count": 5048,
      "max_drawdown_pct": 19.76,
      "peak_asset_krw": 2685460.0,
      "trough_asset_krw": 2154801.0,
      "sizing_mode": "primary_hybrid_dd_tier",
      "sizing_note": "권장: monitor + past-leg·drawdown tier (검증 통과, 미래 미사용)",
      "alloc_stats": {
        "buy_executed": 761,
        "buy_skipped": 268,
        "sell_executed": 4019,
        "sell_skipped": 0,
        "buy_total_krw": 195156416.0,
        "large_leg_count": 750,
        "large_tier_buy_count": 750,
        "buy_amount_avg_krw": 256447.0,
        "buy_amount_min_krw": 5000,
        "buy_amount_max_krw": 3067511.0
      },
      "input_fires": 5048
    },
    "gt_capture_ratio": 0.0097,
    "gt_pnl_pct": 6022.03,
    "sim_sized_pnl_pct": 58.12,
    "gt_model_capture_ratio": 0.0035,
    "causal_gt_capture_ratio": 0.0024,
    "sim_causal_gt_pnl_pct": 14.39,
    "causal_hybrid_capture_ratio": 0.2019,
    "sim_causal_hybrid_pnl_pct": 1215.6,
    "tier_enhanced_capture_ratio": 0.0059,
    "sim_tier_enhanced_pnl_pct": 35.6,
    "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,
        18,
        19,
        20,
        21,
        22,
        33,
        40,
        46,
        49,
        52,
        53,
        72,
        74,
        76,
        78
      ],
      "large_leg_count": 17,
      "config_pct_large": 1.0,
      "config_pct_small": 0.05,
      "observed_implied_scale": {
        "all": {
          "count": 18,
          "mean": 0.1404,
          "median": 0.0667,
          "p25": 0.0539,
          "p75": 0.1318
        },
        "large_leg": {
          "count": 1,
          "mean": 1.1008,
          "median": 1.1008,
          "p25": 1.1008,
          "p75": 1.1008
        },
        "small_leg": {
          "count": 17,
          "mean": 0.0839,
          "median": 0.0583,
          "p25": 0.0539,
          "p75": 0.119
        }
      },
      "recommended_pct_large_leg": 1.1008,
      "recommended_pct_small_leg": 0.0583,
      "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": 2,
        "valid": true
      },
      "76": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "n_sell": 2,
        "valid": true
      },
      "77": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 3,
        "n_sell": 2,
        "valid": true
      },
      "78": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "79": {
        "buy_sum": 1.001,
        "sell_sum": 1.0,
        "n_buy": 6,
        "n_sell": 2,
        "valid": true
      },
      "80": {
        "buy_sum": 1.0,
        "sell_sum": 1.0,
        "n_buy": 2,
        "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.02269722528896669,
          "hi": 0.16417141470116056
        },
        {
          "col": "m5_bb_pos",
          "op": "between",
          "lo": 0.050986874829589954,
          "hi": 0.17673357601131273
        },
        {
          "col": "m5_ga_cci_20",
          "op": "between",
          "lo": -169.2052113398648,
          "hi": -124.73123841544977
        },
        {
          "col": "m10_ga_cci_20",
          "op": "between",
          "lo": -175.7862791639258,
          "hi": -132.6451584428887
        }
      ],
      "valid_fire_rate": 0.0055,
      "metrics": {
        "all": {
          "count": 1029,
          "ev_pct": 5.5293,
          "win_rate": 0.688,
          "profit_factor": 3.4292
        },
        "train": {
          "count": 686,
          "ev_pct": 4.4243,
          "win_rate": 0.6706,
          "profit_factor": 3.0189
        },
        "valid": {
          "count": 243,
          "ev_pct": 6.448,
          "win_rate": 0.7119,
          "profit_factor": 3.187
        },
        "holdout": {
          "count": 100,
          "ev_pct": 10.8775,
          "win_rate": 0.75,
          "profit_factor": 9.8832
        }
      },
      "pass_valid": true,
      "pass_holdout": true
    },
    {
      "rule_id": "sell_mtf_cross_all_tf",
      "side": "sell",
      "kind": "mtf_cross",
      "conditions": [
        {
          "col": "m3_bb_pos",
          "op": "between",
          "lo": 0.6734769690278859,
          "hi": 0.9584317797555851
        },
        {
          "col": "m5_bb_pos",
          "op": "between",
          "lo": 0.776608631452867,
          "hi": 0.9797670778565873
        },
        {
          "col": "m10_bb_pos",
          "op": "between",
          "lo": 0.7897850598593097,
          "hi": 1.0
        },
        {
          "col": "m15_bb_pos",
          "op": "between",
          "lo": 0.8094990667113329,
          "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.0182,
      "metrics": {
        "all": {
          "count": 4019,
          "ev_pct": 7.3121,
          "win_rate": 1.0,
          "profit_factor": 29387.4736
        },
        "train": {
          "count": 2397,
          "ev_pct": 7.1764,
          "win_rate": 1.0,
          "profit_factor": 17201.897
        },
        "valid": {
          "count": 809,
          "ev_pct": 7.2196,
          "win_rate": 1.0,
          "profit_factor": 5840.682
        },
        "holdout": {
          "count": 813,
          "ev_pct": 7.8043,
          "win_rate": 1.0,
          "profit_factor": 6344.8946
        }
      },
      "pass_valid": true,
      "pass_holdout": true
    }
  ],
  "gt_portfolio_calibration": {},
  "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_phase2_fee_stress_ratio": 0.85,
    "option_c_min_gt_capture": 0.23
  }
}