{ "label_mode": "leg_gt", "train_ratio": 0.7, "holdout_ratio": 0.15, "outcomes_rows": 86924, "walk_forward": [ { "month": "2025-06", "pnl_pct": 10.02, "start_asset_krw": 400000.0, "end_asset_krw": 440064.0 }, { "month": "2025-07", "pnl_pct": 60.89, "start_asset_krw": 440064.0, "end_asset_krw": 708031.0 }, { "month": "2025-08", "pnl_pct": 22.9, "start_asset_krw": 708031.0, "end_asset_krw": 870154.0 }, { "month": "2025-09", "pnl_pct": 58.24, "start_asset_krw": 870154.0, "end_asset_krw": 1376957.0 }, { "month": "2025-10", "pnl_pct": 1.41, "start_asset_krw": 1376957.0, "end_asset_krw": 1396376.0 }, { "month": "2025-11", "pnl_pct": 19.55, "start_asset_krw": 1396376.0, "end_asset_krw": 1669367.0 }, { "month": "2025-12", "pnl_pct": -1.53, "start_asset_krw": 1669367.0, "end_asset_krw": 1643749.0 }, { "month": "2026-01", "pnl_pct": 28.68, "start_asset_krw": 1643749.0, "end_asset_krw": 2115197.0 }, { "month": "2026-02", "pnl_pct": 20.21, "start_asset_krw": 2115197.0, "end_asset_krw": 2542690.0 }, { "month": "2026-03", "pnl_pct": 9.7, "start_asset_krw": 2542690.0, "end_asset_krw": 2789334.0 }, { "month": "2026-04", "pnl_pct": 22.86, "start_asset_krw": 2789334.0, "end_asset_krw": 3426893.0 }, { "month": "2026-05", "pnl_pct": 44.66, "start_asset_krw": 3426893.0, "end_asset_krw": 4957419.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": 59.15 }, { "name": "hybrid_max_mdd", "pass": true, "value": 19.89 }, { "name": "hybrid_fee_stress_pnl", "pass": true, "value": 947.42 }, { "name": "option_c_target_300pct", "pass": true, "value": 1116.87, "optional": true } ] }, "go_no_go_option_c_phase2": { "go": false, "gt_capture_ratio": 0.1587, "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": 1116.87 }, { "name": "gt_capture_23pct", "pass": false, "value": 0.1587 }, { "name": "holdout_pnl_positive", "pass": true, "value": 59.15 }, { "name": "max_mdd", "pass": true, "value": 19.89 }, { "name": "fee_stress_ratio", "pass": true, "value": 947.42, "threshold": 850.0 }, { "name": "slippage_stress_positive", "pass": true, "value": 28.14, "note": "체결가 슬리피지 반영 후에도 흑자" }, { "name": "portfolio_wf_positive_ratio", "pass": true, "value": 0.9167 } ] }, "portfolio_compare": { "ground_truth_chrono": { "initial_cash_krw": 400000, "final_asset_krw": 28554960.0, "pnl_krw": 28154960.0, "pnl_pct": 7038.74, "total_fees_krw": 240578.0, "cash_krw": 28554960.0, "holding_qty": 0.0, "holding_value_krw": 0.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 456, "max_drawdown_pct": 8.34, "peak_asset_krw": 9032973.0, "trough_asset_krw": 8279398.0 }, "sim_sized": { "initial_cash_krw": 400000, "final_asset_krw": 546248.0, "pnl_krw": 146248.0, "pnl_pct": 36.56, "total_fees_krw": 15161.0, "cash_krw": 467164.0, "holding_qty": 162.389581, "holding_value_krw": 79084.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 20.54, "peak_asset_krw": 412326.0, "trough_asset_krw": 327644.0, "sizing_mode": "gt_model_compound_causal", "sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)" }, "sim_fixed_order": { "initial_cash_krw": 400000, "final_asset_krw": 23356.0, "pnl_krw": -376644.0, "pnl_pct": -94.16, "total_fees_krw": 17548.0, "cash_krw": 0.0, "holding_qty": 47.958506, "holding_value_krw": 23356.0, "mark_price": 487.0, "fee_rate": 0.0005, "order_krw": 40000.0, "sizing_mode": "fixed", "trade_count": 5225 }, "sim_gt_model": { "initial_cash_krw": 400000, "final_asset_krw": 418244.0, "pnl_krw": 18244.0, "pnl_pct": 4.56, "total_fees_krw": 120.0, "cash_krw": 309487.0, "holding_qty": 223.320164, "holding_value_krw": 108757.0, "mark_price": 487.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": 459948.0, "pnl_krw": 59948.0, "pnl_pct": 14.99, "total_fees_krw": 900.0, "cash_krw": 459948.0, "holding_qty": 0.0, "holding_value_krw": 0.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 129, "max_drawdown_pct": 1.51, "peak_asset_krw": 448991.0, "trough_asset_krw": 442216.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": 96, "buy_skipped": 0, "sell_executed": 33, "sell_skipped": 0, "buy_total_krw": 870005.0, "large_leg_count": 0, "large_tier_buy_count": 0, "buy_amount_avg_krw": 9063.0, "buy_amount_min_krw": 5000, "buy_amount_max_krw": 22925.0 } }, "sim_causal_hybrid": { "initial_cash_krw": 400000, "final_asset_krw": 4867465.0, "pnl_krw": 4467465.0, "pnl_pct": 1116.87, "total_fees_krw": 277183.0, "cash_krw": 3.0, "holding_qty": 9994.789459, "holding_value_krw": 4867462.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 19.89, "peak_asset_krw": 3104956.0, "trough_asset_krw": 2487267.0, "sizing_mode": "monitor_dd_tier", "sizing_note": "monitor buy+sell + drawdown·past-leg tier (미래 미사용)", "alloc_stats": { "buy_executed": 1628, "buy_skipped": 659, "sell_executed": 2938, "sell_skipped": 0, "buy_total_krw": 277244801.0, "large_leg_count": 1532, "large_tier_buy_count": 1532, "buy_amount_avg_krw": 170298.0, "buy_amount_min_krw": 323.0, "buy_amount_max_krw": 3363487.0 }, "input_fires": 5225 }, "hybrid_dd_params": { "dd_large_pct": 5.0, "dd_medium_pct": 2.0 }, "sim_tier_enhanced": { "initial_cash_krw": 400000, "final_asset_krw": 232667.0, "pnl_krw": -167333.0, "pnl_pct": -41.83, "total_fees_krw": 51034.0, "cash_krw": -0.0, "holding_qty": 477.75476, "holding_value_krw": 232667.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 73.4, "peak_asset_krw": 735586.0, "trough_asset_krw": 195638.0, "sizing_mode": "monitor_tier_enhanced", "sizing_note": "monitor buy+sell + past-leg·drawdown tier + conviction (미래 미사용)", "alloc_stats": { "buy_executed": 241, "buy_skipped": 2046, "sell_executed": 2938, "sell_skipped": 0, "buy_total_krw": 51208940.0, "large_leg_count": 143, "large_tier_buy_count": 143, "buy_amount_avg_krw": 212485.0, "buy_amount_min_krw": 5000, "buy_amount_max_krw": 735224.0 }, "input_fires": 5225 }, "sim_sized_holdout": { "initial_asset_krw": 515736.0, "final_asset_krw": 547709.0, "pnl_krw": 31973.0, "pnl_pct": 6.2, "trade_count": 845, "note": "전기간 복리(causal tier) 후 holdout 구간 자산 증감" }, "sim_hybrid_holdout": { "initial_asset_krw": 3114931.0, "final_asset_krw": 4957419.0, "pnl_krw": 1842488.0, "pnl_pct": 59.15, "trade_count": 845, "note": "전기간 복리(hybrid DD tier) 후 holdout 구간 자산 증감" }, "sim_hybrid_fee_stress": { "initial_cash_krw": 400000, "final_asset_krw": 4189669.0, "pnl_krw": 3789669.0, "pnl_pct": 947.42, "total_fees_krw": 502923.0, "cash_krw": -0.0, "holding_qty": 8603.015894, "holding_value_krw": 4189669.0, "mark_price": 487.0, "fee_rate": 0.001, "trade_count": 5225, "max_drawdown_pct": 20.18, "peak_asset_krw": 460724.0, "trough_asset_krw": 367741.0 }, "sim_hybrid_slippage_stress": { "initial_cash_krw": 400000, "final_asset_krw": 512580.0, "pnl_krw": 112580.0, "pnl_pct": 28.14, "total_fees_krw": 277183.0, "cash_krw": -0.0, "holding_qty": 1052.52527, "holding_value_krw": 512580.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 59.13, "peak_asset_krw": 1358898.0, "trough_asset_krw": 555385.0, "slippage_pct": 0.05, "sizing_mode": "hybrid_slippage_stress" }, "hybrid_portfolio_walk_forward": [ { "month": "2025-06", "pnl_pct": 10.02, "start_asset_krw": 400000.0, "end_asset_krw": 440064.0 }, { "month": "2025-07", "pnl_pct": 60.89, "start_asset_krw": 440064.0, "end_asset_krw": 708031.0 }, { "month": "2025-08", "pnl_pct": 22.9, "start_asset_krw": 708031.0, "end_asset_krw": 870154.0 }, { "month": "2025-09", "pnl_pct": 58.24, "start_asset_krw": 870154.0, "end_asset_krw": 1376957.0 }, { "month": "2025-10", "pnl_pct": 1.41, "start_asset_krw": 1376957.0, "end_asset_krw": 1396376.0 }, { "month": "2025-11", "pnl_pct": 19.55, "start_asset_krw": 1396376.0, "end_asset_krw": 1669367.0 }, { "month": "2025-12", "pnl_pct": -1.53, "start_asset_krw": 1669367.0, "end_asset_krw": 1643749.0 }, { "month": "2026-01", "pnl_pct": 28.68, "start_asset_krw": 1643749.0, "end_asset_krw": 2115197.0 }, { "month": "2026-02", "pnl_pct": 20.21, "start_asset_krw": 2115197.0, "end_asset_krw": 2542690.0 }, { "month": "2026-03", "pnl_pct": 9.7, "start_asset_krw": 2542690.0, "end_asset_krw": 2789334.0 }, { "month": "2026-04", "pnl_pct": 22.86, "start_asset_krw": 2789334.0, "end_asset_krw": 3426893.0 }, { "month": "2026-05", "pnl_pct": 44.66, "start_asset_krw": 3426893.0, "end_asset_krw": 4957419.0 } ], "hybrid_portfolio_wf_summary": { "months": 12, "positive_months": 11, "positive_ratio": 0.9167, "mean_pnl_pct": 24.8 }, "primary_sizing": "hybrid", "sim_primary": { "initial_cash_krw": 400000, "final_asset_krw": 4867465.0, "pnl_krw": 4467465.0, "pnl_pct": 1116.87, "total_fees_krw": 277183.0, "cash_krw": 3.0, "holding_qty": 9994.789459, "holding_value_krw": 4867462.0, "mark_price": 487.0, "fee_rate": 0.0005, "trade_count": 5225, "max_drawdown_pct": 19.89, "peak_asset_krw": 3104956.0, "trough_asset_krw": 2487267.0, "sizing_mode": "primary_hybrid_dd_tier", "sizing_note": "권장: monitor + past-leg·drawdown tier (검증 통과, 미래 미사용)", "alloc_stats": { "buy_executed": 1628, "buy_skipped": 659, "sell_executed": 2938, "sell_skipped": 0, "buy_total_krw": 277244801.0, "large_leg_count": 1532, "large_tier_buy_count": 1532, "buy_amount_avg_krw": 170298.0, "buy_amount_min_krw": 323.0, "buy_amount_max_krw": 3363487.0 }, "input_fires": 5225 }, "gt_capture_ratio": 0.0052, "gt_pnl_pct": 7038.74, "sim_sized_pnl_pct": 36.56, "gt_model_capture_ratio": 0.0006, "causal_gt_capture_ratio": 0.0021, "sim_causal_gt_pnl_pct": 14.99, "causal_hybrid_capture_ratio": 0.1587, "sim_causal_hybrid_pnl_pct": 1116.87, "tier_enhanced_capture_ratio": -0.0059, "sim_tier_enhanced_pnl_pct": -41.83, "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.3111, "median": 0.1346, "p25": 0.1309, "p75": 0.1509 }, "large_leg": { "count": 1, "mean": 3.2206, "median": 3.2206, "p25": 3.2206, "p75": 3.2206 }, "small_leg": { "count": 17, "mean": 0.14, "median": 0.1323, "p25": 0.1309, "p75": 0.1502 } }, "recommended_pct_large_leg": 3.2206, "recommended_pct_small_leg": 0.1323, "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": 28785435.0, "subset_final_asset_krw": 400000.0, "asset_ratio": 0.0139, "asset_accuracy_pct": 1.39, "target_met_90": false, "legs_total": 76, "legs_covered": 0, "leg_coverage_ratio": 0.0, "full_pnl_pct": 7096.36, "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 } }