{ "experiment": "factor_weight_optimization", "generated_at": "2026-05-18T02:58:13.313346+00:00", "stocks": [ "2330" ], "factors": { "bull_column": "oldwang_bull_score", "bear_column": "oldwang_bear_score", "exclude_factor_columns_from_model": false }, "validation_design": { "mode": "walk_forward_probabilities_then_time_split_grid_search", "objective": "precision-first", "max_buy_count_ratio": 1.3, "label_horizon": 5, "train_end": "cutoff - LABEL_HORIZON", "step": 21, "min_train": 240, "leakage_guard": "model predictions are generated with train_end before each test slice; weights are selected on earlier prediction events and validated on later events." }, "result": { "split": { "optimize_ratio": 0.6, "tune_events": 126, "validation_events": 84, "tune_date_range": [ "2025-06-18", "2025-12-17" ], "validation_date_range": [ "2025-12-18", "2026-04-30" ] }, "grid_size": 576, "min_signal_ratio": 0.7, "objective": "precision-first", "max_buy_count_ratio": 1.3, "best_config": { "buy_bull_weight": 0.01, "buy_bear_weight": -0.08, "sell_bear_weight": 0.0, "sell_bull_weight": -0.02, "buy_bear_gate": null, "sell_bull_gate": null, "hold_bias": 0.0 }, "top_candidates": [ { "config": { "buy_bull_weight": 0.01, "buy_bear_weight": -0.08, "sell_bear_weight": 0.0, "sell_bull_weight": -0.02, "buy_bear_gate": null, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.7193, "buy_precision": 47.8873, "sell_precision": 20.9302, "signal_count": 114, "buy_count": 71, "sell_count": 43, "coverage": 0.9048, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 5.2407, "buy_precision_delta_pp": 1.4587, "sell_precision_delta_pp": 1.2581, "signal_count_delta": -3, "coverage_delta": -0.0238 }, "objective": [ 3.9682, 1.4587, 5.2407, -0.2678571428571428, 47.8873 ] }, { "config": { "buy_bull_weight": 0.01, "buy_bear_weight": 0.0, "sell_bear_weight": 0.08, "sell_bull_weight": -0.02, "buy_bear_gate": null, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.069, "buy_precision": 47.8873, "sell_precision": 20.0, "signal_count": 116, "buy_count": 71, "sell_count": 45, "coverage": 0.9206, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 4.5904, "buy_precision_delta_pp": 1.4587, "sell_precision_delta_pp": 0.3279, "signal_count_delta": -1, "coverage_delta": -0.008 }, "objective": [ 3.9682, 1.4587, 4.5904, -0.2678571428571428, 47.8873 ] }, { "config": { "buy_bull_weight": 0.01, "buy_bear_weight": -0.03, "sell_bear_weight": 0.05, "sell_bull_weight": -0.02, "buy_bear_gate": null, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.069, "buy_precision": 47.8873, "sell_precision": 20.0, "signal_count": 116, "buy_count": 71, "sell_count": 45, "coverage": 0.9206, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 4.5904, "buy_precision_delta_pp": 1.4587, "sell_precision_delta_pp": 0.3279, "signal_count_delta": -1, "coverage_delta": -0.008 }, "objective": [ 3.9682, 1.4587, 4.5904, -0.2678571428571428, 47.8873 ] }, { "config": { "buy_bull_weight": 0.01, "buy_bear_weight": -0.05, "sell_bear_weight": 0.03, "sell_bull_weight": -0.02, "buy_bear_gate": null, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.069, "buy_precision": 47.8873, "sell_precision": 20.0, "signal_count": 116, "buy_count": 71, "sell_count": 45, "coverage": 0.9206, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 4.5904, "buy_precision_delta_pp": 1.4587, "sell_precision_delta_pp": 0.3279, "signal_count_delta": -1, "coverage_delta": -0.008 }, "objective": [ 3.9682, 1.4587, 4.5904, -0.2678571428571428, 47.8873 ] }, { "config": { "buy_bull_weight": 0.01, "buy_bear_weight": -0.05, "sell_bear_weight": 0.05, "sell_bull_weight": -0.02, "buy_bear_gate": null, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.069, "buy_precision": 47.8261, "sell_precision": 21.2766, "signal_count": 116, "buy_count": 69, "sell_count": 47, "coverage": 0.9206, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 4.5904, "buy_precision_delta_pp": 1.3975, "sell_precision_delta_pp": 1.6045, "signal_count_delta": -1, "coverage_delta": -0.008 }, "objective": [ 3.9682, 1.3975, 4.5904, -0.2321428571428572, 47.8261 ] }, { "config": { "buy_bull_weight": 0.0, "buy_bear_weight": -0.08, "sell_bear_weight": 0.08, "sell_bull_weight": -0.05, "buy_bear_gate": null, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.1681, "buy_precision": 47.2222, "sell_precision": 19.5122, "signal_count": 113, "buy_count": 72, "sell_count": 41, "coverage": 0.8968, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 4.6895, "buy_precision_delta_pp": 0.7936, "sell_precision_delta_pp": -0.1599, "signal_count_delta": -4, "coverage_delta": -0.0318 }, "objective": [ 3.9682, 0.7936, 4.6895, -0.2857142857142858, 47.2222 ] }, { "config": { "buy_bull_weight": 0.0, "buy_bear_weight": -0.08, "sell_bear_weight": 0.08, "sell_bull_weight": -0.05, "buy_bear_gate": 2.0, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.1681, "buy_precision": 47.2222, "sell_precision": 19.5122, "signal_count": 113, "buy_count": 72, "sell_count": 41, "coverage": 0.8968, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 4.6895, "buy_precision_delta_pp": 0.7936, "sell_precision_delta_pp": -0.1599, "signal_count_delta": -4, "coverage_delta": -0.0318 }, "objective": [ 3.9682, 0.7936, 4.6895, -0.2857142857142858, 47.2222 ] }, { "config": { "buy_bull_weight": 0.0, "buy_bear_weight": -0.08, "sell_bear_weight": 0.08, "sell_bull_weight": -0.05, "buy_bear_gate": 3.0, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.9206, "direction_accuracy": 37.1681, "buy_precision": 47.2222, "sell_precision": 19.5122, "signal_count": 113, "buy_count": 72, "sell_count": 41, "coverage": 0.8968, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 4.6895, "buy_precision_delta_pp": 0.7936, "sell_precision_delta_pp": -0.1599, "signal_count_delta": -4, "coverage_delta": -0.0318 }, "objective": [ 3.9682, 0.7936, 4.6895, -0.2857142857142858, 47.2222 ] }, { "config": { "buy_bull_weight": 0.01, "buy_bear_weight": -0.03, "sell_bear_weight": 0.03, "sell_bull_weight": -0.02, "buy_bear_gate": 2.0, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.127, "direction_accuracy": 36.2069, "buy_precision": 47.2222, "sell_precision": 18.1818, "signal_count": 116, "buy_count": 72, "sell_count": 44, "coverage": 0.9206, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.1746, "direction_accuracy_delta_pp": 3.7283, "buy_precision_delta_pp": 0.7936, "sell_precision_delta_pp": -1.4903, "signal_count_delta": -1, "coverage_delta": -0.008 }, "objective": [ 3.1746, 0.7936, 3.7283, -0.2857142857142858, 47.2222 ] }, { "config": { "buy_bull_weight": 0.01, "buy_bear_weight": -0.03, "sell_bear_weight": 0.03, "sell_bull_weight": -0.02, "buy_bear_gate": 3.0, "sell_bull_gate": null, "hold_bias": 0.0 }, "tune_metrics": { "accuracy": 34.127, "direction_accuracy": 36.2069, "buy_precision": 47.2222, "sell_precision": 18.1818, "signal_count": 116, "buy_count": 72, "sell_count": 44, "coverage": 0.9206, "n_predictions": 126 }, "tune_deltas": { "accuracy_delta_pp": 3.1746, "direction_accuracy_delta_pp": 3.7283, "buy_precision_delta_pp": 0.7936, "sell_precision_delta_pp": -1.4903, "signal_count_delta": -1, "coverage_delta": -0.008 }, "objective": [ 3.1746, 0.7936, 3.7283, -0.2857142857142858, 47.2222 ] } ], "tune": { "baseline": { "accuracy": 30.9524, "direction_accuracy": 32.4786, "buy_precision": 46.4286, "sell_precision": 19.6721, "signal_count": 117, "buy_count": 56, "sell_count": 61, "coverage": 0.9286, "n_predictions": 126 }, "candidate": { "accuracy": 34.9206, "direction_accuracy": 37.7193, "buy_precision": 47.8873, "sell_precision": 20.9302, "signal_count": 114, "buy_count": 71, "sell_count": 43, "coverage": 0.9048, "n_predictions": 126 }, "deltas": { "accuracy_delta_pp": 3.9682, "direction_accuracy_delta_pp": 5.2407, "buy_precision_delta_pp": 1.4587, "sell_precision_delta_pp": 1.2581, "signal_count_delta": -3, "coverage_delta": -0.0238 } }, "validation": { "baseline": { "accuracy": 46.4286, "direction_accuracy": 57.6271, "buy_precision": 79.3103, "sell_precision": 36.6667, "signal_count": 59, "buy_count": 29, "sell_count": 30, "coverage": 0.7024, "n_predictions": 84 }, "candidate": { "accuracy": 46.4286, "direction_accuracy": 58.6207, "buy_precision": 71.1111, "sell_precision": 15.3846, "signal_count": 58, "buy_count": 45, "sell_count": 13, "coverage": 0.6905, "n_predictions": 84 }, "deltas": { "accuracy_delta_pp": 0.0, "direction_accuracy_delta_pp": 0.9936, "buy_precision_delta_pp": -8.1992, "sell_precision_delta_pp": -21.2821, "signal_count_delta": -1, "coverage_delta": -0.0119 } }, "all_events": { "baseline": { "accuracy": 37.1429, "direction_accuracy": 40.9091, "buy_precision": 57.6471, "sell_precision": 25.2747, "signal_count": 176, "buy_count": 85, "sell_count": 91, "coverage": 0.8381, "n_predictions": 210 }, "candidate": { "accuracy": 39.5238, "direction_accuracy": 44.7674, "buy_precision": 56.8966, "sell_precision": 19.6429, "signal_count": 172, "buy_count": 116, "sell_count": 56, "coverage": 0.819, "n_predictions": 210 }, "deltas": { "accuracy_delta_pp": 2.3809, "direction_accuracy_delta_pp": 3.8583, "buy_precision_delta_pp": -0.7505, "sell_precision_delta_pp": -5.6318, "signal_count_delta": -4, "coverage_delta": -0.0191 } }, "per_stock_validation": { "2330": { "baseline": { "accuracy": 46.4286, "direction_accuracy": 57.6271, "buy_precision": 79.3103, "sell_precision": 36.6667, "signal_count": 59, "buy_count": 29, "sell_count": 30, "coverage": 0.7024, "n_predictions": 84 }, "candidate": { "accuracy": 46.4286, "direction_accuracy": 58.6207, "buy_precision": 71.1111, "sell_precision": 15.3846, "signal_count": 58, "buy_count": 45, "sell_count": 13, "coverage": 0.6905, "n_predictions": 84 }, "deltas": { "accuracy_delta_pp": 0.0, "direction_accuracy_delta_pp": 0.9936, "buy_precision_delta_pp": -8.1992, "sell_precision_delta_pp": -21.2821, "signal_count_delta": -1, "coverage_delta": -0.0119 } } } }, "promotion_decision": { "passed": false, "checks": { "validation_accuracy_delta": false, "buy_precision_not_down": false, "signal_ratio": true, "buy_count_ratio": false }, "signal_ratio": 0.9831, "buy_count_ratio": 1.5517, "thresholds": { "min_accuracy_delta_pp": 2.0, "min_signal_ratio": 0.7, "min_buy_precision_delta_pp": 0.0, "max_buy_count_ratio": 1.3 } }, "popular_stocks": { "source": "manual --stocks override", "url": "", "count": 1, "fallback_used": false }, "data_mining_roadmap": [ { "phase": "C22", "method": "Candlestick sequence + shadow/gap/MA20/volume spike", "reason": "低成本、可解釋,直接對應技術線型與老王策略語意。", "runtime": "Fast; suitable for Mac precompute and HF fallback." }, { "phase": "C23", "method": "SAX bag-of-patterns", "reason": "把近期報酬線型轉成 symbol token,再用歷史 win-rate 做 factor score。", "runtime": "Medium; calibrate only inside training folds." }, { "phase": "C24", "method": "catch22 / tsfresh compact features", "reason": "自動抽取時間序列特徵,但需嚴格限制欄位數與 fold-local selection。", "runtime": "Medium; Mac-first experiment." }, { "phase": "C25", "method": "Matrix Profile / STUMPY motif similarity", "reason": "找最近形狀是否像歷史多方/空方 motif,適合做 explainable factor。", "runtime": "Slow; Mac-only validation before any production use." }, { "phase": "C26", "method": "Shapelets", "reason": "可解釋的 discriminative subsequence,但較容易過擬合且成本較高。", "runtime": "Slow; research-only until extended validation passes." } ], "report_generated_at": "2026-05-18T02:58:13.313896+00:00" }