{ "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 } }