{ "label_mode": "leg_gt", "train_ratio": 0.7, "holdout_ratio": 0.15, "outcomes_rows": 86924, "walk_forward": [ { "month": "2025-06", "pnl_pct": 12.78, "start_asset_krw": 1000000.0, "end_asset_krw": 1127825.0 }, { "month": "2025-07", "pnl_pct": 60.89, "start_asset_krw": 1127825.0, "end_asset_krw": 1814584.0 }, { "month": "2025-08", "pnl_pct": 22.9, "start_asset_krw": 1814584.0, "end_asset_krw": 2230083.0 }, { "month": "2025-09", "pnl_pct": 57.63, "start_asset_krw": 2230083.0, "end_asset_krw": 3515283.0 }, { "month": "2025-10", "pnl_pct": 9.29, "start_asset_krw": 3515283.0, "end_asset_krw": 3842010.0 }, { "month": "2025-11", "pnl_pct": 11.24, "start_asset_krw": 3842010.0, "end_asset_krw": 4273771.0 }, { "month": "2025-12", "pnl_pct": -0.87, "start_asset_krw": 4273771.0, "end_asset_krw": 4236421.0 }, { "month": "2026-01", "pnl_pct": 33.77, "start_asset_krw": 4236421.0, "end_asset_krw": 5666889.0 }, { "month": "2026-02", "pnl_pct": 15.61, "start_asset_krw": 5666889.0, "end_asset_krw": 6551242.0 }, { "month": "2026-03", "pnl_pct": 9.12, "start_asset_krw": 6551242.0, "end_asset_krw": 7148390.0 }, { "month": "2026-04", "pnl_pct": 22.85, "start_asset_krw": 7148390.0, "end_asset_krw": 8782116.0 }, { "month": "2026-05", "pnl_pct": 47.57, "start_asset_krw": 8782116.0, "end_asset_krw": 12959660.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.35 }, { "name": "hybrid_max_mdd", "pass": true, "value": 19.22 }, { "name": "hybrid_fee_stress_pnl", "pass": true, "value": 975.74 }, { "name": "option_c_target_300pct", "pass": true, "value": 1147.3, "optional": true } ] }, "go_no_go_option_c_phase2": { "go": true, "gt_capture_ratio": 0.2674, "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": 1147.3 }, { "name": "gt_capture_23pct", "pass": true, "value": 0.2674 }, { "name": "holdout_pnl_positive", "pass": true, "value": 62.35 }, { "name": "max_mdd", "pass": true, "value": 19.22 }, { "name": "fee_stress_ratio", "pass": true, "value": 975.74, "threshold": 850.0 }, { "name": "slippage_stress_positive", "pass": true, "value": 31.58, "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": 1147944.0, "pnl_krw": 147944.0, "pnl_pct": 14.79, "total_fees_krw": 2025.0, "cash_krw": 1147944.0, "holding_qty": 0.0, "holding_value_krw": 0.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 124, "max_drawdown_pct": 0.96, "peak_asset_krw": 1118535.0, "trough_asset_krw": 1107793.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": 91, "buy_skipped": 0, "sell_executed": 33, "sell_skipped": 0, "buy_total_krw": 1950020.0, "large_leg_count": 0, "large_tier_buy_count": 0, "buy_amount_avg_krw": 21429.0, "buy_amount_min_krw": 5000, "buy_amount_max_krw": 57216.0 } }, "sim_causal_hybrid": { "initial_cash_krw": 1000000, "final_asset_krw": 12473032.0, "pnl_krw": 11473032.0, "pnl_pct": 1147.3, "total_fees_krw": 710297.0, "cash_krw": 0.0, "holding_qty": 25611.975633, "holding_value_krw": 12473032.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 19.22, "peak_asset_krw": 1174413.0, "trough_asset_krw": 948744.0, "sizing_mode": "monitor_dd_tier", "sizing_note": "monitor buy+sell + drawdown·past-leg tier (미래 미사용)", "alloc_stats": { "buy_executed": 1632, "buy_skipped": 655, "sell_executed": 2938, "sell_skipped": 0, "buy_total_krw": 710442254.0, "large_leg_count": 1535, "large_tier_buy_count": 1535, "buy_amount_avg_krw": 435320.0, "buy_amount_min_krw": 828.0, "buy_amount_max_krw": 8620153.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": 487437.0, "pnl_krw": -512563.0, "pnl_pct": -51.26, "total_fees_krw": 107068.0, "cash_krw": 1.0, "holding_qty": 1000.895401, "holding_value_krw": 487436.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 74.08, "peak_asset_krw": 1540984.0, "trough_asset_krw": 399432.0, "sizing_mode": "monitor_tier_enhanced", "sizing_note": "monitor buy+sell + past-leg·drawdown tier + conviction (미래 미사용)", "alloc_stats": { "buy_executed": 279, "buy_skipped": 2008, "sell_executed": 2938, "sell_skipped": 0, "buy_total_krw": 107514607.0, "large_leg_count": 136, "large_tier_buy_count": 136, "buy_amount_avg_krw": 385357.0, "buy_amount_min_krw": 5000, "buy_amount_max_krw": 1540213.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": 7982769.0, "final_asset_krw": 12959660.0, "pnl_krw": 4976891.0, "pnl_pct": 62.35, "trade_count": 845, "note": "전기간 복리(hybrid DD tier) 후 holdout 구간 자산 증감" }, "sim_hybrid_fee_stress": { "initial_cash_krw": 1000000, "final_asset_krw": 10757384.0, "pnl_krw": 9757384.0, "pnl_pct": 975.74, "total_fees_krw": 1289111.0, "cash_krw": -0.0, "holding_qty": 22089.084224, "holding_value_krw": 10757384.0, "mark_price": 487.0, "fee_rate": 0.001, "trade_count": 5225, "max_drawdown_pct": 16.02, "peak_asset_krw": 7104706.0, "trough_asset_krw": 5966238.0 }, "sim_hybrid_slippage_stress": { "initial_cash_krw": 1000000, "final_asset_krw": 1315755.0, "pnl_krw": 315755.0, "pnl_pct": 31.58, "total_fees_krw": 710297.0, "cash_krw": -0.0, "holding_qty": 2701.755603, "holding_value_krw": 1315755.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 59.08, "peak_asset_krw": 3483599.0, "trough_asset_krw": 1425625.0, "slippage_pct": 0.05, "sizing_mode": "hybrid_slippage_stress" }, "hybrid_portfolio_walk_forward": [ { "month": "2025-06", "pnl_pct": 12.78, "start_asset_krw": 1000000.0, "end_asset_krw": 1127825.0 }, { "month": "2025-07", "pnl_pct": 60.89, "start_asset_krw": 1127825.0, "end_asset_krw": 1814584.0 }, { "month": "2025-08", "pnl_pct": 22.9, "start_asset_krw": 1814584.0, "end_asset_krw": 2230083.0 }, { "month": "2025-09", "pnl_pct": 57.63, "start_asset_krw": 2230083.0, "end_asset_krw": 3515283.0 }, { "month": "2025-10", "pnl_pct": 9.29, "start_asset_krw": 3515283.0, "end_asset_krw": 3842010.0 }, { "month": "2025-11", "pnl_pct": 11.24, "start_asset_krw": 3842010.0, "end_asset_krw": 4273771.0 }, { "month": "2025-12", "pnl_pct": -0.87, "start_asset_krw": 4273771.0, "end_asset_krw": 4236421.0 }, { "month": "2026-01", "pnl_pct": 33.77, "start_asset_krw": 4236421.0, "end_asset_krw": 5666889.0 }, { "month": "2026-02", "pnl_pct": 15.61, "start_asset_krw": 5666889.0, "end_asset_krw": 6551242.0 }, { "month": "2026-03", "pnl_pct": 9.12, "start_asset_krw": 6551242.0, "end_asset_krw": 7148390.0 }, { "month": "2026-04", "pnl_pct": 22.85, "start_asset_krw": 7148390.0, "end_asset_krw": 8782116.0 }, { "month": "2026-05", "pnl_pct": 47.57, "start_asset_krw": 8782116.0, "end_asset_krw": 12959660.0 } ], "hybrid_portfolio_wf_summary": { "months": 12, "positive_months": 11, "positive_ratio": 0.9167, "mean_pnl_pct": 25.23 }, "primary_sizing": "hybrid", "sim_primary": { "initial_cash_krw": 1000000, "final_asset_krw": 12473032.0, "pnl_krw": 11473032.0, "pnl_pct": 1147.3, "total_fees_krw": 710297.0, "cash_krw": 0.0, "holding_qty": 25611.975633, "holding_value_krw": 12473032.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 19.22, "peak_asset_krw": 1174413.0, "trough_asset_krw": 948744.0, "sizing_mode": "primary_hybrid_dd_tier", "sizing_note": "권장: monitor + past-leg·drawdown tier (검증 통과, 미래 미사용)", "alloc_stats": { "buy_executed": 1632, "buy_skipped": 655, "sell_executed": 2938, "sell_skipped": 0, "buy_total_krw": 710442254.0, "large_leg_count": 1535, "large_tier_buy_count": 1535, "buy_amount_avg_krw": 435320.0, "buy_amount_min_krw": 828.0, "buy_amount_max_krw": 8620153.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.79, "causal_hybrid_capture_ratio": 0.2674, "sim_causal_hybrid_pnl_pct": 1147.3, "tier_enhanced_capture_ratio": -0.0119, "sim_tier_enhanced_pnl_pct": -51.26, "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_phase2_fee_stress_ratio": 0.85, "option_c_min_gt_capture": 0.23 } }