{ "label_mode": "leg_gt", "train_ratio": 0.7, "holdout_ratio": 0.15, "outcomes_rows": 78041, "walk_forward": [ { "month": "2025-06", "pnl_pct": -16.21, "start_asset_krw": 400000.0, "end_asset_krw": 335174.0 }, { "month": "2025-07", "pnl_pct": 61.9, "start_asset_krw": 335174.0, "end_asset_krw": 542633.0 }, { "month": "2025-08", "pnl_pct": 15.34, "start_asset_krw": 542633.0, "end_asset_krw": 625856.0 }, { "month": "2025-09", "pnl_pct": 61.29, "start_asset_krw": 625856.0, "end_asset_krw": 1009446.0 }, { "month": "2025-10", "pnl_pct": 10.06, "start_asset_krw": 1009446.0, "end_asset_krw": 1111046.0 }, { "month": "2025-11", "pnl_pct": 6.2, "start_asset_krw": 1111046.0, "end_asset_krw": 1179936.0 }, { "month": "2025-12", "pnl_pct": 0.27, "start_asset_krw": 1179936.0, "end_asset_krw": 1183177.0 }, { "month": "2026-01", "pnl_pct": 35.33, "start_asset_krw": 1183177.0, "end_asset_krw": 1601182.0 }, { "month": "2026-02", "pnl_pct": 12.87, "start_asset_krw": 1601182.0, "end_asset_krw": 1807252.0 }, { "month": "2026-03", "pnl_pct": 0.45, "start_asset_krw": 1807252.0, "end_asset_krw": 1815423.0 }, { "month": "2026-04", "pnl_pct": 17.34, "start_asset_krw": 1815423.0, "end_asset_krw": 2130294.0 }, { "month": "2026-05", "pnl_pct": 56.23, "start_asset_krw": 2130294.0, "end_asset_krw": 3328225.0 }, { "month": "2026-06", "pnl_pct": 24.57, "start_asset_krw": 3328225.0, "end_asset_krw": 4145923.0 } ], "walk_forward_summary": { "buy_compound_tight": { "months": 13, "positive_months": 10, "positive_ratio": 0.7692, "mean_ev_pct": 6.4648 }, "buy_compound_top3": { "months": 13, "positive_months": 10, "positive_ratio": 0.7692, "mean_ev_pct": 7.0906 }, "buy_contrast_m10_bb_pos": { "months": 13, "positive_months": 10, "positive_ratio": 0.7692, "mean_ev_pct": 6.8247 }, "buy_mtf_cross_all_tf": { "months": 12, "positive_months": 11, "positive_ratio": 0.9167, "mean_ev_pct": 5.5853 }, "gt_model_buy_trough_local": { "months": 13, "positive_months": 11, "positive_ratio": 0.8462, "mean_ev_pct": 7.2553 }, "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.7586 }, "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.2064 }, "sell_compound_top3": { "months": 13, "positive_months": 13, "positive_ratio": 1.0, "mean_ev_pct": 5.1461 }, "sell_contrast_m10_bb_pos": { "months": 13, "positive_months": 13, "positive_ratio": 1.0, "mean_ev_pct": 4.892 }, "sell_mtf_cross_all_tf": { "months": 13, "positive_months": 13, "positive_ratio": 1.0, "mean_ev_pct": 7.5914 } }, "fee_stress_mult": 2.0, "fee_stress_by_rule": { "buy_compound_top3": { "count": 11568, "ev_pct": 5.289, "win_rate": 0.7139, "profit_factor": 3.4503 }, "buy_compound_tight": { "count": 2461, "ev_pct": 5.3605, "win_rate": 0.6997, "profit_factor": 3.3177 }, "buy_contrast_m10_bb_pos": { "count": 19150, "ev_pct": 5.3936, "win_rate": 0.7152, "profit_factor": 3.6191 }, "buy_mtf_cross_all_tf": { "count": 4248, "ev_pct": 5.386, "win_rate": 0.7342, "profit_factor": 4.2586 }, "sell_compound_top3": { "count": 9903, "ev_pct": 4.71, "win_rate": 0.9452, "profit_factor": 30.52 }, "sell_compound_tight": { "count": 2563, "ev_pct": 4.8479, "win_rate": 0.9454, "profit_factor": 38.5558 }, "sell_contrast_m10_bb_pos": { "count": 16536, "ev_pct": 4.5125, "win_rate": 0.936, "profit_factor": 26.4518 }, "sell_mtf_cross_all_tf": { "count": 3480, "ev_pct": 7.4844, "win_rate": 1.0, "profit_factor": 26045.624 }, "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": 1506, "ev_pct": 6.1247, "win_rate": 0.7377, "profit_factor": 4.7364 }, "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": 6593, "ev_pct": 2.3183, "win_rate": 0.8191, "profit_factor": 4.8358 } }, "live_order_cap_sim": { "assumptions": { "slippage_pct": 0.05, "sizing": "gt_model_compound_no_daily_cap" }, "taken_count": 1002, "total_count": 1002, "rules": { "buy_compound_tight": { "taken_count": 248, "total_count": 248, "metrics": { "count": 248, "ev_pct": 7.2013, "win_rate": 0.7056, "profit_factor": 4.2642 } }, "sell_mtf_cross_all_tf": { "taken_count": 754, "total_count": 754, "metrics": { "count": 754, "ev_pct": 8.0576, "win_rate": 1.0, "profit_factor": 6075.4186 } } }, "portfolio_adj_ev_pct": 7.8456 }, "go_no_go": { "go": true, "checks": [ { "rule_id": "buy_compound_tight", "side": "buy", "pass": true, "holdout_ev": 7.2513, "holdout_pf": 4.3089, "wf_positive_ratio": 0.7692, "fee_stress_ev": 5.3605 }, { "rule_id": "sell_mtf_cross_all_tf", "side": "sell", "pass": true, "holdout_ev": 8.1076, "holdout_pf": 6113.1186, "wf_positive_ratio": 1.0, "fee_stress_ev": 7.4844 } ], "live_cap_taken_ratio": 1.0 }, "go_no_go_hybrid": { "go": false, "primary_sizing": "causal_tier", "checks": [ { "name": "monitor_rules_go", "pass": true }, { "name": "hybrid_holdout_pnl", "pass": true, "value": 96.51 }, { "name": "hybrid_max_mdd", "pass": false, "value": 31.7 }, { "name": "hybrid_fee_stress_pnl", "pass": true, "value": 806.56 }, { "name": "option_c_target_300pct", "pass": true, "value": 936.48, "optional": true } ] }, "go_no_go_option_c_phase2": { "go": false, "gt_capture_ratio": 0.1782, "targets": { "phase2_pnl_pct": 1000.0, "min_gt_capture": 0.23, "portfolio_wf_min_ratio": 0.5 }, "checks": [ { "name": "phase1_hybrid_go", "pass": false }, { "name": "full_pnl_1000pct", "pass": false, "value": 936.48 }, { "name": "gt_capture_23pct", "pass": false, "value": 0.1782 }, { "name": "holdout_pnl_positive", "pass": true, "value": 96.51 }, { "name": "max_mdd", "pass": false, "value": 31.7 }, { "name": "fee_stress_ratio", "pass": false, "value": 806.56, "threshold": 850.0 }, { "name": "slippage_stress_positive", "pass": true, "value": 36.77, "note": "체결가 슬리피지 반영 후에도 흑자" }, { "name": "portfolio_wf_positive_ratio", "pass": true, "value": 0.9231 } ] }, "portfolio_compare": { "ground_truth_chrono": { "initial_cash_krw": 400000, "final_asset_krw": 21418804.0, "pnl_krw": 21018804.0, "pnl_pct": 5254.7, "total_fees_krw": 106989.0, "cash_krw": 21418804.0, "holding_qty": 0.0, "holding_value_krw": 0.0, "mark_price": 769.0, "fee_rate": 0.0005, "trade_count": 475, "max_drawdown_pct": 6.57, "peak_asset_krw": 491720.0, "trough_asset_krw": 459404.0 }, "sim_sized": { "initial_cash_krw": 400000, "final_asset_krw": 406850.0, "pnl_krw": 6850.0, "pnl_pct": 1.71, "total_fees_krw": 13503.0, "cash_krw": 406791.0, "holding_qty": 0.077013, "holding_value_krw": 59.0, "mark_price": 769.0, "fee_rate": 0.0005, "trade_count": 5941, "max_drawdown_pct": 31.68, "peak_asset_krw": 412757.0, "trough_asset_krw": 281982.0, "sizing_mode": "gt_model_compound_causal", "sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)" }, "sim_fixed_order": { "initial_cash_krw": 400000, "final_asset_krw": 16201.0, "pnl_krw": -383799.0, "pnl_pct": -95.95, "total_fees_krw": 12903.0, "cash_krw": 16201.0, "holding_qty": 0.0, "holding_value_krw": 0.0, "mark_price": 769.0, "fee_rate": 0.0005, "order_krw": 40000.0, "sizing_mode": "fixed", "trade_count": 5941 }, "sim_gt_model": { "initial_cash_krw": 400000, "final_asset_krw": 481220.0, "pnl_krw": 81220.0, "pnl_pct": 20.31, "total_fees_krw": 120.0, "cash_krw": 309487.0, "holding_qty": 223.320164, "holding_value_krw": 171733.0, "mark_price": 769.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": 769.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": 4145923.0, "pnl_krw": 3745923.0, "pnl_pct": 936.48, "total_fees_krw": 182631.0, "cash_krw": 4145923.0, "holding_qty": 0.0, "holding_value_krw": 0.0, "mark_price": 769.0, "fee_rate": 0.0005, "trade_count": 5941, "max_drawdown_pct": 31.7, "peak_asset_krw": 412983.0, "trough_asset_krw": 282062.0, "sizing_mode": "monitor_dd_tier", "sizing_note": "monitor buy+sell + drawdown·past-leg tier (미래 미사용)", "alloc_stats": { "buy_executed": 1641, "buy_skipped": 820, "sell_executed": 3480, "sell_skipped": 0, "buy_total_krw": 180666607.0, "large_leg_count": 1631, "large_tier_buy_count": 1631, "buy_amount_avg_krw": 110095.0, "buy_amount_min_krw": 118.0, "buy_amount_max_krw": 2120528.0 }, "input_fires": 5941 }, "hybrid_dd_params": { "dd_large_pct": 5.0, "dd_medium_pct": 2.0 }, "sim_tier_enhanced": { "initial_cash_krw": 400000, "final_asset_krw": 249533.0, "pnl_krw": -150467.0, "pnl_pct": -37.62, "total_fees_krw": 39271.0, "cash_krw": 249530.0, "holding_qty": 0.003368, "holding_value_krw": 3.0, "mark_price": 769.0, "fee_rate": 0.0005, "trade_count": 5941, "max_drawdown_pct": 74.65, "peak_asset_krw": 627420.0, "trough_asset_krw": 159062.0, "sizing_mode": "monitor_tier_enhanced", "sizing_note": "monitor buy+sell + past-leg·drawdown tier + conviction (미래 미사용)", "alloc_stats": { "buy_executed": 142, "buy_skipped": 2319, "sell_executed": 3480, "sell_skipped": 0, "buy_total_krw": 39326201.0, "large_leg_count": 132, "large_tier_buy_count": 132, "buy_amount_avg_krw": 276945.0, "buy_amount_min_krw": 5000, "buy_amount_max_krw": 627090.0 }, "input_fires": 5941 }, "sim_sized_holdout": { "initial_asset_krw": 385338.0, "final_asset_krw": 406851.0, "pnl_krw": 21513.0, "pnl_pct": 5.58, "trade_count": 1002, "note": "전기간 복리(causal tier) 후 holdout 구간 자산 증감" }, "sim_hybrid_holdout": { "initial_asset_krw": 2109733.0, "final_asset_krw": 4145923.0, "pnl_krw": 2036190.0, "pnl_pct": 96.51, "trade_count": 1002, "note": "전기간 복리(hybrid DD tier) 후 holdout 구간 자산 증감" }, "sim_hybrid_fee_stress": { "initial_cash_krw": 400000, "final_asset_krw": 3626229.0, "pnl_krw": 3226229.0, "pnl_pct": 806.56, "total_fees_krw": 335315.0, "cash_krw": 3626226.0, "holding_qty": 0.003685, "holding_value_krw": 3.0, "mark_price": 769.0, "fee_rate": 0.001, "trade_count": 5941, "max_drawdown_pct": 31.7, "peak_asset_krw": 412770.0, "trough_asset_krw": 281917.0 }, "sim_hybrid_slippage_stress": { "initial_cash_krw": 400000, "final_asset_krw": 547080.0, "pnl_krw": 147080.0, "pnl_pct": 36.77, "total_fees_krw": 182631.0, "cash_krw": 547080.0, "holding_qty": 0.0, "holding_value_krw": 0.0, "mark_price": 769.0, "fee_rate": 0.0005, "trade_count": 5941, "max_drawdown_pct": 48.63, "peak_asset_krw": 1058643.0, "trough_asset_krw": 543801.0, "slippage_pct": 0.05, "sizing_mode": "hybrid_slippage_stress" }, "hybrid_portfolio_walk_forward": [ { "month": "2025-06", "pnl_pct": -16.21, "start_asset_krw": 400000.0, "end_asset_krw": 335174.0 }, { "month": "2025-07", "pnl_pct": 61.9, "start_asset_krw": 335174.0, "end_asset_krw": 542633.0 }, { "month": "2025-08", "pnl_pct": 15.34, "start_asset_krw": 542633.0, "end_asset_krw": 625856.0 }, { "month": "2025-09", "pnl_pct": 61.29, "start_asset_krw": 625856.0, "end_asset_krw": 1009446.0 }, { "month": "2025-10", "pnl_pct": 10.06, "start_asset_krw": 1009446.0, "end_asset_krw": 1111046.0 }, { "month": "2025-11", "pnl_pct": 6.2, "start_asset_krw": 1111046.0, "end_asset_krw": 1179936.0 }, { "month": "2025-12", "pnl_pct": 0.27, "start_asset_krw": 1179936.0, "end_asset_krw": 1183177.0 }, { "month": "2026-01", "pnl_pct": 35.33, "start_asset_krw": 1183177.0, "end_asset_krw": 1601182.0 }, { "month": "2026-02", "pnl_pct": 12.87, "start_asset_krw": 1601182.0, "end_asset_krw": 1807252.0 }, { "month": "2026-03", "pnl_pct": 0.45, "start_asset_krw": 1807252.0, "end_asset_krw": 1815423.0 }, { "month": "2026-04", "pnl_pct": 17.34, "start_asset_krw": 1815423.0, "end_asset_krw": 2130294.0 }, { "month": "2026-05", "pnl_pct": 56.23, "start_asset_krw": 2130294.0, "end_asset_krw": 3328225.0 }, { "month": "2026-06", "pnl_pct": 24.57, "start_asset_krw": 3328225.0, "end_asset_krw": 4145923.0 } ], "hybrid_portfolio_wf_summary": { "months": 13, "positive_months": 12, "positive_ratio": 0.9231, "mean_pnl_pct": 21.97 }, "primary_sizing": "causal_tier", "sim_primary": { "initial_cash_krw": 400000, "final_asset_krw": 406850.0, "pnl_krw": 6850.0, "pnl_pct": 1.71, "total_fees_krw": 13503.0, "cash_krw": 406791.0, "holding_qty": 0.077013, "holding_value_krw": 59.0, "mark_price": 769.0, "fee_rate": 0.0005, "trade_count": 5941, "max_drawdown_pct": 31.68, "peak_asset_krw": 412757.0, "trough_asset_krw": 281982.0, "sizing_mode": "gt_model_compound_causal", "sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)" }, "gt_capture_ratio": 0.0003, "gt_pnl_pct": 5254.7, "sim_sized_pnl_pct": 1.71, "gt_model_capture_ratio": 0.0039, "causal_gt_capture_ratio": 0.0027, "sim_causal_gt_pnl_pct": 14.39, "causal_hybrid_capture_ratio": 0.1782, "sim_causal_hybrid_pnl_pct": 936.48, "tier_enhanced_capture_ratio": -0.0072, "sim_tier_enhanced_pnl_pct": -37.62, "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, 72, 74, 76, 78 ], "large_leg_count": 16, "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.0, "sell_sum": 1.0, "n_buy": 7, "n_sell": 2, "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.021172207503886126, "hi": 0.16409846055318933 }, { "col": "m5_bb_pos", "op": "between", "lo": 0.04926406505452075, "hi": 0.17056205475779587 }, { "col": "m10_ga_cci_20", "op": "between", "lo": -176.08366788851922, "hi": -133.4800557108608 } ], "valid_fire_rate": 0.0149, "metrics": { "all": { "count": 2461, "ev_pct": 5.4605, "win_rate": 0.7017, "profit_factor": 3.3918 }, "train": { "count": 1552, "ev_pct": 4.5999, "win_rate": 0.6907, "profit_factor": 3.1874 }, "valid": { "count": 661, "ev_pct": 6.8095, "win_rate": 0.7262, "profit_factor": 3.4851 }, "holdout": { "count": 248, "ev_pct": 7.2513, "win_rate": 0.7056, "profit_factor": 4.3089 } }, "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.6750785337434262, "hi": 0.9593012516978001 }, { "col": "m5_bb_pos", "op": "between", "lo": 0.7821369534082708, "hi": 0.9843377974456614 }, { "col": "m10_bb_pos", "op": "between", "lo": 0.7941295136276819, "hi": 1.0 }, { "col": "m15_bb_pos", "op": "between", "lo": 0.8206164588850927, "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 }, { "col": "w1_ga_three_black_crows", "op": "eq_int", "value": 0 } ], "valid_fire_rate": 0.0151, "metrics": { "all": { "count": 3480, "ev_pct": 7.5844, "win_rate": 1.0, "profit_factor": 26393.624 }, "train": { "count": 2056, "ev_pct": 7.5064, "win_rate": 1.0, "profit_factor": 15433.2445 }, "valid": { "count": 670, "ev_pct": 7.2347, "win_rate": 1.0, "profit_factor": 4847.2609 }, "holdout": { "count": 754, "ev_pct": 8.1076, "win_rate": 1.0, "profit_factor": 6113.1186 } }, "pass_valid": true, "pass_holdout": true } ], "gt_portfolio_calibration": { "portfolio": { "gt_final_asset_krw": 21418804.0, "subset_final_asset_krw": 400000.0, "asset_ratio": 0.0187, "asset_accuracy_pct": 1.87, "target_met_90": false, "legs_total": 79, "legs_covered": 0, "leg_coverage_ratio": 0.0, "full_pnl_pct": 5254.7, "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_phase2_fee_stress_ratio": 0.85, "option_c_min_gt_capture": 0.23 } }