{ "experiment": "C19_pattern_mining", "description": "No-lookahead dry run for candlestick, SAX, and fold-local pattern-stat features.", "stocks": [ "2330", "0050", "2317", "2454", "2881" ], "pass_criterion": { "every_stock_accuracy_delta_pp_at_least": 3.0 }, "baseline_features": [ "return_1d", "return_5d", "return_10d", "return_20d", "close_ma5_ratio", "close_ma20_ratio", "ma5_ma20_ratio", "ma20_ma60_ratio", "rsi", "macd_hist", "macd_signal_ratio", "macd_hist_norm", "macd_hist_delta_1d", "macd_hist_slope_3d", "macd_above_zero", "bb_pct_b", "k", "d", "volume_ratio", "atr_ratio", "high_low_ratio", "obv_trend", "close_ma60_ratio", "log_volume_ratio", "volume_zscore", "volatility_20d", "taiex_return_5d", "taiex_ma20_ratio", "usdtwd_return_5d" ], "candidate_raw_pattern_features": [ "candle_body_ratio", "upper_shadow_ratio", "lower_shadow_ratio", "close_position", "gap_pct", "range_pct", "body_pct", "range_expansion_5d", "volume_price_pressure", "inside_bar", "outside_bar", "bullish_engulfing", "bearish_engulfing", "candle_dir", "candle_pattern_3", "candle_pattern_5", "sax_pattern_5", "sax_pattern_10", "sax_momentum_5", "sax_reversal_5" ], "candidate_fold_local_pattern_stats": [ "candle_pattern_3_up_rate", "candle_pattern_3_down_rate", "candle_pattern_3_label_mean", "candle_pattern_5_up_rate", "candle_pattern_5_down_rate", "candle_pattern_5_label_mean", "sax_pattern_5_up_rate", "sax_pattern_5_down_rate", "sax_pattern_5_label_mean", "sax_pattern_10_up_rate", "sax_pattern_10_down_rate", "sax_pattern_10_label_mean" ], "aggregate": { "baseline": { "accuracy": 36.9, "dir_accuracy": 40.3, "up_precision": 52.8, "dn_precision": 31.3, "n_signals": 178.6, "n_predictions": 210.0 }, "pattern_mining": { "accuracy": 36.9, "dir_accuracy": 40.3, "up_precision": 51.9, "dn_precision": 30.6, "n_signals": 180.8, "n_predictions": 210.0 } }, "aggregate_accuracy_delta_pp": 0.0, "aggregate_signal_delta": 2.2, "per_stock": { "2330": { "baseline": { "accuracy": 32.4, "dir_accuracy": 35.8, "up_precision": 55.4, "dn_precision": 24.1, "n_signals": 173, "n_predictions": 210 }, "pattern_mining": { "accuracy": 31.4, "dir_accuracy": 33.7, "up_precision": 50.7, "dn_precision": 23.2, "n_signals": 181, "n_predictions": 210, "added_features": 32 }, "accuracy_delta_pp": -1.0, "passed": false }, "0050": { "baseline": { "accuracy": 38.6, "dir_accuracy": 45.0, "up_precision": 67.2, "dn_precision": 31.8, "n_signals": 171, "n_predictions": 210 }, "pattern_mining": { "accuracy": 38.6, "dir_accuracy": 45.0, "up_precision": 65.3, "dn_precision": 29.2, "n_signals": 171, "n_predictions": 210, "added_features": 32 }, "accuracy_delta_pp": 0.0, "passed": false }, "2317": { "baseline": { "accuracy": 37.6, "dir_accuracy": 40.5, "up_precision": 51.0, "dn_precision": 29.9, "n_signals": 195, "n_predictions": 210 }, "pattern_mining": { "accuracy": 40.0, "dir_accuracy": 42.1, "up_precision": 52.3, "dn_precision": 29.5, "n_signals": 197, "n_predictions": 210, "added_features": 32 }, "accuracy_delta_pp": 2.4, "passed": false }, "2454": { "baseline": { "accuracy": 37.6, "dir_accuracy": 37.5, "up_precision": 38.2, "dn_precision": 37.0, "n_signals": 176, "n_predictions": 210 }, "pattern_mining": { "accuracy": 35.2, "dir_accuracy": 37.6, "up_precision": 37.5, "dn_precision": 37.6, "n_signals": 173, "n_predictions": 210, "added_features": 32 }, "accuracy_delta_pp": -2.4, "passed": false }, "2881": { "baseline": { "accuracy": 38.1, "dir_accuracy": 42.7, "up_precision": 52.3, "dn_precision": 33.7, "n_signals": 178, "n_predictions": 210 }, "pattern_mining": { "accuracy": 39.5, "dir_accuracy": 42.9, "up_precision": 53.6, "dn_precision": 33.7, "n_signals": 182, "n_predictions": 210, "added_features": 32 }, "accuracy_delta_pp": 1.4, "passed": false } }, "passed": false, "promotion_decision": "do_not_integrate", "validation": { "mode": "walk_forward_with_embargo", "label_horizon": 5, "train_end": "cutoff - LABEL_HORIZON", "step": 21, "min_train": 240, "leakage_guard": "pattern stats for test rows are learned only from the training slice; training rows use prior expanding stats." } }