跳轉到

BACKTEST_SPEC.md

Cortex 訊號回測規格書 v3 三層驗證:Signal Quality → Indicator Combination Search → Strategy Validation Last updated: 2026-02-25


0. 資料現實與執行約定

0.1 可用資料(DB 實查 2026-02-25)

資料集 期間 說明
stock_ohlc 2021-02-04 ~ 2026-02-24 全市場 2,133 支,~1,220 交易日
daily_technical_snapshot 早期批次 2024-02-02 ~ 2026-02-24 TW + TWO 一般個股,~493 天
daily_technical_snapshot 大批次 2025-08-14 ~ 2026-02-24 1,738 支,僅 ~126 天,Route A 不使用
daily_chip_snapshot 2024-08-27 ~ 2026-02-25 1,623 支(可用股票池全覆蓋),~18 個月
daily_financial_snapshot 2025-09-18 ~ 2026-02-24 僅 ~5 個月,Strategy E 不做

0.2 股票池定義

篩選條件(逐層過濾):

步驟 條件 剩餘數量
起始 daily_technical_snapshot 中 rows >= 400 且 first_date < 2024-06-01 2,007
排除 ETF / 特殊 ticker 格式為 [1-9]\d{3}\.(TW\|TWO) 1,886
流動性 + 品質 data_quality == "complete" AND avg_volume_20 >= 50,000,至少 200 天符合 1,623

最終股票池:1,623 支台股上市 + 櫃買個股(TW 958 支 + TWO 665 支)

每月活躍股票數穩定在 1,517~1,602 支之間(2024-02 ~ 2026-02),全期間可用 snapshot 合計約 739,457 筆

stocks 表有 industrysector 欄位但全部為空。Cluster 分析改用 ticker 規則推斷(見 2.5)。

0.3 執行約定

項目 規則
市場 台股上市 + 櫃買個股(1,623 支,排除 ETF)
訊號產生時點 每日收盤後,基於當日 snapshot
執行價格 entry = T+1 open(from stock_ohlc);exit = 觸發日 T+1 open
方向 Long only
資料品質過濾 data_quality == "complete"
流動性過濾 avg_volume_20 >= 50,000
Look-ahead bias 禁止。所有指標取值為當日收盤時的值,執行在次日開盤

0.4 回測區間

全區間: 2024-02-02 ~ 2026-02-24(~493 個交易日,~2 年)

不可用區間:COVID crash (2020-01~03)、2021 多頭、2022 空頭 — 無 snapshot 資料,留給 Route B。

0.5 IS / OOS 切分

期間 範圍 交易日 用途
In-Sample 2024-02-02 ~ 2025-06-30 ~340 天(~17 個月) 組合搜尋 + 參數調整
Out-of-Sample 2025-07-01 ~ 2026-02-24 ~160 天(~8 個月) 驗證

Walk-Forward:8 個月 IS + 2 個月 OOS,每次滑動 2 個月。僅對有 grid search 的策略做。

注意:2 年資料做 IS/OOS 偏緊。若 OOS 結果不佳,不急於下結論 — 等 Route B 擴大後再確認。

0.6 0050.TW 走勢概覽(2024-02 ~ 2026-02,供市場環境分段)

期間 0050 走勢 幅度 環境標籤
2024-02 ~ 2024-06 32.3 → 44.8 +38.7% bull_2024h1
2024-07 ~ 2024-09 44.8 → 44.4 -0.9% consolidation_2024q3
2024-10 ~ 2025-01 44.3 → 49.3 +11.3% bull_2024q4
2025-02 ~ 2025-04 47.2 → 41.3 -12.5% correction_2025q1
2025-05 ~ 2025-10 42.5 → 63.8 +50.1% bull_2025h2
2025-11 ~ 2026-02 63.3 → 81.1 +28.1% bull_2025q4_2026

自動劃分方式:計算 0050 的 60 日滾動報酬率。> +10% → bull,< -10% → bear,其間 → consolidation。最終以實際計算結果為準,上表為參考。


1. Layer 1 — Signal Quality Validation

純統計分析,不涉及交易模擬。 樣本量:1,623 支 × ~493 天 ≈ ~739K usable snapshots。

1.1 Forward Return 計算

forward_return_N = (close[t + N] - close[t]) / close[t]
參數
Horizons 1, 3, 5, 10, 20 trading days
Deadzone ±0.2%(
價格來源 stock_ohlc.close(與 snapshot 同日)
儲存位置 forward_return_label 表(migration 096,issue #569);由 raw_panel_loader LEFT JOIN 回 panel,欄位名維持 forward_return_{h}

Snapshot 最後 N 天的 forward return 為 NaN,自然排除。

1.2 Bias 準確率

bias ∈ {bullish, bearish, neutral} × horizon 分組:

輸出指標 說明
hit_rate bullish: return > +deadzone 的比例;bearish: return < -deadzone 的比例
avg_return 平均 forward return
median_return 中位數
std_return 標準差
sample_count 樣本數
t_statistic 單樣本 t-test (H0: mean = 0)
p_value 雙尾 p-value

顯著性門檻:p_value < 0.05sample_count >= 50

1.3 Confidence 分層分析

5 個區間:

區間 標籤
[0.00, 0.30) very_bearish
[0.30, 0.40) bearish
[0.40, 0.60) neutral
[0.60, 0.70) bullish
[0.70, 1.00] strong_bullish

每區間 × horizon 統計 avg_return、median_return、hit_rate、std_return、sample_count。

核心驗證:Spearman rank correlation(confidence vs forward_return),每 horizon 一個 rho。 - rho > 0.05 且 p < 0.05 → confidence 有預測力 - rho ≤ 0 → confidence 設計有問題

1.4 Signal Channel 績效

按 7 個 channel 分組:

輸出指標 說明
trigger_count 總觸發次數
monthly_avg 每月平均
avg_forward_return_N 各 horizon 的平均 forward return
hit_rate_N 各 horizon 的方向正確率
channel_sharpe 假設每次觸發持有到 horizon,用日報酬算 Sharpe
exclusivity_check 同一天同一股票是否只落入一個 channel(應 100%)

Channel 對比矩陣(行 = channel,列 = 1d_ret / 3d_ret / 5d_ret / 10d_ret / 20d_ret / hit_5d / count)。

1.5 ReasonCode / WarningCode Information Coefficient

對每個 ReasonCode 和 WarningCode 計算:

輸出指標 說明
presence_rate 佔所有 snapshot 的 %
avg_return_when_present 出現時的平均 5d forward return
avg_return_when_absent 不出現時的平均 5d forward return
return_diff present - absent
ic_5d 與 5d forward return 的 Pearson correlation
t_stat return_diff 的 t-statistic

排序:按 abs(return_diff) 降序。過濾 presence_rate < 1%

輸出分類: - Top 10 正向預測力 ReasonCode - Top 10 負向預測力 WarningCode - 無效 codes(不顯著或 presence_rate < 1%)

1.6 單一類別預測力基線

對 14 個評分類別(A~N),獨立計算預測力:

solo_score = 0.5 + 該類別的所有分數調整(其他 13 類歸零)
solo_score = clamp(solo_score, 0, 1)

統計: - solo_rho:solo_score 與 5d forward_return 的 Spearman rho - solo_hit_rate:solo_score > 0.6 時,5d return > 0 的比例 - solo_signal_count:solo_score > 0.6 的 snapshot 數

輸出 l1_solo_indicator_power.csv,按 solo_rho 降序。

此表決定 Layer 2 Forward Selection 的起始順序。

1.7 Go/No-Go Gate

條件 門檻 說明
Bullish hit_rate (5d) > 52% 高於隨機
Confidence Spearman rho (5d) > 0.03 且 p < 0.05 最低預測力門檻
至少 1 個 channel avg 5d return > 0 且 p < 0.05 至少一個 channel 有效
至少 3 個類別 solo_rho > 0.02 至少 3 個指標有最低預測力

全部未通過 → 停止 Layer 2/3,先檢查 scoring 邏輯或等 Route B 擴大資料量。

1.8 Layer 1 產出

檔案 內容
l1_bias_accuracy.csv bias × horizon 準確率矩陣
l1_confidence_bands.csv confidence 區間 × horizon 統計
l1_confidence_correlation.json Spearman rho per horizon
l1_channel_performance.csv 7 channel × horizon 績效
l1_reason_ic.csv ReasonCode IC 排行
l1_warning_ic.csv WarningCode IC 排行
l1_solo_indicator_power.csv 14 類別單獨預測力

目的:找出 14 類評分中的最佳子集和權重配置。 使用 IS 期間(2024-02 ~ 2025-06)資料。

2.0 回測引擎規格(組合搜尋用)

參數
初始資金 5,000,000 TWD
買入手續費 0.1425%
賣出手續費 0.1425%
交易稅(賣出) 0.30%
來回總成本 0.585%
單筆最大部位 總資金 10%
同時最多持有 10 檔
Cooldown 5 個交易日
台股整張 floor(shares / 1000) * 1000

Position sizing:

position_value = min(total_equity * 0.10, available_cash)
shares = floor(position_value / entry_price)
shares = floor(shares / 1000) * 1000    # 整張
if shares == 0: skip

Entry / Exit(組合搜尋固定規則,不做 grid search):

Entry: bias == "bullish" AND confidence >= 0.70
Exit:  bias == "bearish" OR confidence < 0.45 OR hold_days >= 20

2.1 Composite Score

用於比較不同組合的綜合品質指標:

composite = 0.4 * norm(sharpe)
          + 0.3 * norm(hit_rate)
          + 0.2 * norm(profit_factor)
          + 0.1 * norm(trade_count_penalty)

norm(x) = min-max normalize 到 [0, 1] across all candidate combos in the same search。

trade_count_penalty: - trade_count ∈ [30, 2000] → penalty = 0(正常) - trade_count < 30 → penalty = (30 - count) / 30(樣本不足扣分) - trade_count > 2000 → penalty = (count - 2000) / count(過度交易扣分)

2.2 Phase A: Elimination(淘汰)

跑 14 個 ablation(與 BACKTEST_CONTEXT 3.1 的 14 類一一對應):

ABL ID 歸零類別 歸零的分數調整
ABL-A Trend Structure ma_alignment ±0.20
ABL-B Trend Strength adx ≥25 +0.10, adx_accel +0.04
ABL-C Momentum vortex ±0.08/±0.04/+0.04, macd_hist ±0.08, expanding +0.03
ABL-D Volume volume_expansion ±0.08
ABL-E Pullback + Breakout Highs breakout_recent +0.05, ATH +0.10, 52W +0.08
ABL-F CTI cti ±0.10
ABL-G Choppiness chop_trending +0.05, choppy 拉回 30%
ABL-H WaveTrend WT cross ±0.10/±0.06, extreme -0.05/-0.03, divergence ±0.06/+0.04
ABL-I Aroon aroon uptrend +0.04, downtrend -0.04
ABL-J TTM Squeeze squeeze_off +0.08
ABL-K DMI Derived di_spread +0.04, adx_sustained +0.03
ABL-L Supertrend bullish +0.03, flip ±0.06
ABL-M Donchian breakout_20d ±0.05, breakout_55d ±0.08
ABL-N RS vs Market rs_outperform +0.04, underperform -0.04

額外兩個 warning-specific ablation:

ABL ID 歸零內容
ABL-W1 RSI overbought -0.05, RSI divergence -0.08/+0.06
ABL-W2 WT extreme -0.05/-0.03, WT divergence -0.06/+0.04

每個 ablation: 1. 重算 bias/confidence(scoring_fork:目標類別 score 調整 = 0) 2. 跑快速回測(2.0 固定規則,IS only) 3. 計算 composite_score

分類規則:

Sharpe delta vs Baseline 分類
下降 > 10% Core(核心驅動力)
下降 1~10% Useful(有用的補充)
不變或上升 Noise(噪音,淘汰候選)

2.3 Phase B: Forward Selection(逐步加入)

從 Layer 1.6 的 solo_rho 最高的 Core 類別開始:

1. enabled_set = { solo_rho 最高的 Core 類別 }
2. 跑回測 → baseline composite_score
3. for each remaining candidate (Core + Useful, sorted by solo_rho desc):
       temp_set = enabled_set ∪ { candidate }
       跑回測 → new composite_score
       delta = new - baseline
       record (candidate, delta)
4. 選 delta 最大者加入 enabled_set
5. 更新 baseline = new composite_score
6. 重複 3~5,直到最大 delta < 1% 或所有候選已嘗試

Noise 類別不參與 Forward Selection(已淘汰)。

對 4 個目標分別做 Forward Selection:

目標 資料範圍 說明
Universal 全部 IS snapshots 全市場通用組合
Momentum IS 中 channel == momentum_bullish 的 snapshots momentum 專用組合
Reversal IS 中 channel == reversal_bullish 的 snapshots reversal 專用組合
Squeeze IS 中 channel == squeeze_bullish 的 snapshots squeeze 專用組合

Channel-specific 的回測只看該 channel 觸發時的交易。若某 channel 在 IS 期間 trade_count < 30,跳過該 channel 的專用搜尋,沿用 Universal 結果。

2.4 Phase C: Weight Tuning(權重微調)

對 Phase B 最佳子集中的各 Core 類別,調整其原始 score 調整值的乘數:

Weight grid: [0.5, 0.75, 1.0, 1.25, 1.5]

搜尋空間 = 5^(Core 數量)。

Core 數 組合數 搜尋方式
≤ 5 ≤ 3,125 Grid search(全跑)
6~7 ≤ 78,125 Random search 2,000 組
≥ 8 不太可能 Random search 2,000 組

每組跑快速回測(IS only),取 composite_score 最高者。

2.5 Cluster 分析

stocks 表的 industry / sector 全部為空。改用 ticker 規則推斷:

Cluster 規則 預估數量
半導體 ticker ∈ ~40-60
金融 ticker ∈ {28xx, 58xx} 或已知金控清單 ~50-70
電子 ticker ∈ ~400
傳產 其餘 ~500
櫃買 ticker LIKE '%.TWO'(或獨立標記,與上述產業分群交叉) 665

或者更簡單的做法:直接用 TWSE 的產業代號前 2 位 (ticker 前 2 碼) 分群,報告中標註群組組成。

每個 Cluster 用 Universal combo 跑 IS 回測: - 若某 Cluster 的 Sharpe < Universal Sharpe * 0.5 → 對該 Cluster 單獨跑 Forward Selection - 若所有 Cluster 表現一致 → 不做 Cluster-specific 組合(節省計算量)

2.6 Per-Stock 觀察

對 1,623 支個股,用 Universal combo 統計:

指標 說明
hit_rate_5d 該股票 bullish signal 的 5d 命中率
avg_forward_return_5d 平均 5d forward return
trade_count 訊號觸發次數

標記規則: - hit_rate < 40%trade_count >= 10ineffective(訊號對該股票無效) - hit_rate > 65%highly_effective - trade_count < 5insufficient_data

2.7 Layer 2 產出

檔案 內容
ablation_summary.csv 14+2 個 ablation 的 Sharpe delta 和分類
forward_selection/universal_steps.csv Universal 逐步加入記錄
forward_selection/universal_best_combo.json 最佳組合(啟用的類別列表)
forward_selection/momentum_bullish_steps.csv Momentum channel 逐步加入
forward_selection/reversal_bullish_steps.csv Reversal channel 逐步加入
forward_selection/squeeze_bullish_steps.csv Squeeze channel 逐步加入
weight_tuning/weight_grid_results.csv 權重搜尋結果
weight_tuning/best_weights.json 最佳權重配置
cluster_analysis/universal_by_cluster.csv 各 Cluster 的 IS 績效
per_stock_quality.csv 1,623 支個股品質表

3. Layer 3 — Strategy Validation

用 Layer 2 找到的最佳組合,跑完整交易模擬(IS + OOS)。

3.1 策略清單

策略 說明 Scoring
Baseline 現有 scoring(14 類全開,原始權重) 原始 compute_bias_confidence_reasons_warnings()
Universal-Optimized Layer 2 全市場最佳組合 + 最佳權重 Phase B+C 結果
Channel-Specific 進入 momentum channel 用 momentum combo,reversal 用 reversal combo,etc. 各 channel 獨立 scoring
Tech+Chip Universal-Optimized + chip_bias bullish 確認 Technical scoring + daily_chip_snapshot.bias

Strategy E(三維度投票):不做,financial snapshot 僅 5 個月。

Tech+Chip 資料深度:chip snapshot 從 2024-08-27 起(1,623 支全覆蓋),IS 期間 ~11 個月(2024-08 ~ 2025-06),OOS 全覆蓋。報告中標注資料較淺。

3.2 回測引擎規格

參數
初始資金 5,000,000 TWD
買入手續費 0.1425%
賣出手續費 0.1425%
交易稅(賣出) 0.30%
來回總成本 0.585%
單筆最大部位 總資金 10%
同時最多持有 10 檔
Cooldown 5 個交易日
台股整張 floor(shares / 1000) * 1000
無風險利率 1.5%(台灣定存)

3.3 Entry / Exit

所有策略共用框架:

Entry:

channel in ("momentum_bullish", "reversal_bullish", "squeeze_bullish")
AND confidence >= ENTRY_THRESHOLD

Exit(任一觸發):

編號 條件 說明
X1 channel 變為任何 bearish 類 訊號翻空
X2 confidence < EXIT_THRESHOLD 信心不足
X3 持倉超過 MAX_HOLD_DAYS 時間停損
X4 close < invalidation_level 結構性停損(from risk block)

Strategy Tech+Chip 額外 exit: | X5 | chip_bias == "bearish" | 籌碼面翻空 |

Grid Search(IS only):

參數 搜尋範圍 組合
ENTRY_THRESHOLD [0.65, 0.70, 0.75] 3
EXIT_THRESHOLD [0.40, 0.45, 0.50] 3
MAX_HOLD_DAYS [10, 20, 40] 3
27 組

4 個策略 × 27 = 108 組。OOS 使用各策略的 IS 最佳參數。

3.4 績效指標

報酬類:

指標 公式
總報酬率 (final_equity - initial) / initial
CAGR (final / initial) ^ (252 / trading_days) - 1
月度報酬分佈 均值、中位數、最差月
Alpha vs 0050 strategy_CAGR - benchmark_CAGR

風險類:

指標 公式
Max Drawdown max((peak - trough) / peak)
Max DD Duration peak 到完全恢復的最長交易日數
年化波動率 std(daily_returns) * sqrt(252)
Sharpe Ratio (annualized_return - 0.015) / annualized_vol
Sortino Ratio (annualized_return - 0.015) / downside_vol
Calmar Ratio CAGR / abs(Max_Drawdown)

交易品質類:

指標 公式
Win Rate winning_trades / total_trades
Profit Factor sum(wins) / abs(sum(losses))
Avg Hold Days mean(exit_date - entry_date)
Avg Win 獲利交易平均報酬 %
Avg Loss 虧損交易平均報酬 %
Max Consecutive Wins 最長連勝
Max Consecutive Losses 最長連虧
Signal Frequency 每月平均進場次數
Expectancy win_rate * avg_win - (1 - win_rate) * abs(avg_loss)

3.5 交易明細欄位

trade_id            : int
strategy            : str       # "baseline" | "universal_optimized" | "channel_specific" | "tech_chip"
ticker              : str
entry_date          : date
entry_price         : float     # T+1 open
exit_date           : date
exit_price          : float     # T+1 open
exit_reason         : str       # "channel_bearish" | "confidence_drop" | "time_stop" |
                                # "invalidation_stop" | "chip_flip"
shares              : int
position_value      : float
pnl_gross           : float
cost                : float     # 手續費 + 交易稅
pnl_net             : float
return_pct          : float
hold_days           : int
entry_confidence    : float
entry_channel       : str
max_favorable_excursion_pct : float
max_adverse_excursion_pct   : float

3.6 每日權益曲線

date                : date
equity              : float
cash                : float
positions_value     : float
daily_return        : float
drawdown_pct        : float
open_positions      : int

3.7 Benchmark

Benchmark 方法
0050.TW Buy-and-Hold 2024-02 以 open 買入,持有至 2026-02 close
等權重市場 1,623 支流動性合格個股等權買入持有
Random Baseline 1,000 次 Monte Carlo

Random Baseline 方法: 1. 每個交易日以 50% 機率決定是否持有一支隨機個股 2. 持有天數 ~ Uniform[3, 20] 3. 遵守 position sizing、最多 10 檔、cooldown 等規則 4. 重複 1,000 次,取 Sharpe 分佈

3.8 市場環境子區間分析

使用 0.5 的走勢定義(見 0.6):

bull_2024h1        : 2024-02 ~ 2024-06
consolidation_q3   : 2024-07 ~ 2024-09
bull_2024q4        : 2024-10 ~ 2025-01
correction_2025q1  : 2025-02 ~ 2025-04
bull_2025h2        : 2025-05 ~ 2025-10
bull_2025q4_2026   : 2025-11 ~ 2026-02

每策略 × 每子區間計算:Win Rate、Avg Return、Max Drawdown、交易次數。

關鍵問題: - Baseline vs Universal-Optimized 在 correction_2025q1 的表現差異? - Channel-Specific 是否在 consolidation 時自動切換到 squeeze combo? - Tech+Chip 在 bull 期間是否比純技術面更穩定?

3.9 成功標準

條件 門檻 說明
Universal-Optimized OOS Sharpe > Baseline OOS Sharpe 組合搜尋確實有提升
Universal-Optimized OOS Sharpe > 0.5
OOS Win Rate > 45%
OOS Max Drawdown < 25%
vs Random Baseline Sharpe > 97th percentile
組合搜尋提升 IS composite_score 提升 > 5% vs Baseline
OOS vs IS 衰減 Sharpe 衰減 < 40% 2 年資料更易 overfit,放寬

Agent Baseline = Universal-Optimized 的 OOS 績效。

未來 Agent 附加價值需體現在: - OOS Sharpe 提升 >= 15% - OOS Max Drawdown 降低 >= 10% - 在 correction 子區間的 Win Rate 提升 >= 5pp


4. 報告

4.1 目錄結構

backtest_results/
├── data_summary/
│   ├── stock_universe.csv              # 1,623 支最終股票池(ticker, name, market, usable_snapshots)
│   ├── daily_active_counts.csv         # 每日有效股票數時序
│   └── data_coverage.json              # 資料覆蓋範圍摘要
│
├── layer1/
│   ├── l1_bias_accuracy.csv
│   ├── l1_confidence_bands.csv
│   ├── l1_confidence_correlation.json
│   ├── l1_channel_performance.csv
│   ├── l1_reason_ic.csv
│   ├── l1_warning_ic.csv
│   └── l1_solo_indicator_power.csv
│
├── layer2_combo_search/
│   ├── ablation_summary.csv            # 14+2 ablation 結果 + Core/Useful/Noise 分類
│   ├── forward_selection/
│   │   ├── universal_steps.csv
│   │   ├── universal_best_combo.json
│   │   ├── momentum_bullish_steps.csv
│   │   ├── reversal_bullish_steps.csv
│   │   └── squeeze_bullish_steps.csv
│   ├── weight_tuning/
│   │   ├── weight_grid_results.csv
│   │   └── best_weights.json
│   ├── cluster_analysis/
│   │   └── universal_by_cluster.csv
│   └── per_stock_quality.csv           # 1,623 支個股品質表
│
├── layer3_validation/
│   ├── summary.json                    # 全策略彙總(IS + OOS)
│   ├── baseline/
│   │   ├── results.json
│   │   ├── trades.csv
│   │   └── equity_curve.csv
│   ├── universal_optimized/
│   │   ├── results.json
│   │   ├── trades.csv
│   │   ├── equity_curve.csv
│   │   ├── grid_search.csv
│   │   └── walk_forward.csv
│   ├── channel_specific/
│   │   ├── results.json
│   │   ├── trades.csv
│   │   └── equity_curve.csv
│   ├── tech_chip/
│   │   ├── results.json                # 標注 chip 資料深度
│   │   ├── trades.csv
│   │   └── equity_curve.csv
│   ├── benchmarks/
│   │   ├── buy_hold_0050.csv
│   │   ├── equal_weight_market.csv
│   │   └── random_baseline.csv
│   └── analysis/
│       ├── by_market_regime.csv
│       └── param_sensitivity.csv
│
├── route_b_todo.md
└── metadata.json

4.2 metadata.json

{
  "spec_version": "3.0",
  "run_timestamp": "ISO 8601",
  "data_source": {
    "snapshot_table": "daily_technical_snapshot",
    "ohlc_table": "stock_ohlc",
    "chip_table": "daily_chip_snapshot"
  },
  "stock_universe": {
    "total_stocks": 1623,
    "tw_stocks": 958,
    "two_stocks": 665,
    "filters_applied": [
      "snapshot rows >= 400",
      "first_date < 2024-06-01",
      "ticker format [1-9]\\d{3}\\.(TW|TWO)",
      "data_quality == complete AND avg_volume_20 >= 50000, at least 200 days"
    ],
    "monthly_active_range": "1517 ~ 1602"
  },
  "period": {
    "full": "2024-02-02 ~ 2026-02-24",
    "in_sample": "2024-02-02 ~ 2025-06-30",
    "out_of_sample": "2025-07-01 ~ 2026-02-24",
    "trading_days_approx": 493
  },
  "total_usable_snapshots": 739457,
  "strategies_tested": ["baseline", "universal_optimized", "channel_specific", "tech_chip"],
  "grid_search_combos_per_strategy": 27,
  "ablation_tests": 16,
  "random_baseline_iterations": 1000
}

4.3 圖表清單

Layer 1

編號 圖表 內容
L1-1 Bias 準確率長條圖 bullish/bearish/neutral × 5 horizons 的 hit_rate
L1-2 Confidence vs 5d forward return 散點圖 x=confidence, y=5d return, 加 Spearman rho 和回歸線
L1-3 Confidence 分層 Boxplot 5 區間的 5d forward return 分佈
L1-4 Channel 績效 Bar Chart 7 channel 的 avg 5d return + hit_rate 雙軸
L1-5 ReasonCode IC 排行榜 橫向 bar chart,按 return_diff 排序
L1-6 WarningCode IC 排行榜 同上
L1-7 單一類別預測力排行榜 14 類的 solo_rho bar chart

Layer 2

編號 圖表 內容
L2-1 Ablation Waterfall Chart 14 類移除後的 Sharpe delta,按影響大小排序
L2-2 Forward Selection 過程圖 每步加入一個類別,composite_score 折線
L2-3 Channel 最佳組合比較表 Universal / Momentum / Reversal / Squeeze 的啟用類別 Venn
L2-4 Weight Tuning Heatmap Core 類別 weight 組合 vs composite_score
L2-5 Per-Stock Quality 散佈圖 x=trade_count, y=hit_rate, color=cluster

Layer 3

編號 圖表 內容
L3-1 權益曲線對比 Baseline vs Optimized vs 0050 B&H(IS+OOS 全期間)
L3-2 回撤曲線 各策略 drawdown % over time
L3-3 月報酬 Heatmap 行=年-月, 列=策略, 紅綠色階
L3-4 IS vs OOS 績效對比 各策略 IS/OOS Sharpe/CAGR 並排 bar chart
L3-5 Grid Search Heatmap ENTRY × EXIT × MAX_DAYS 的 Sharpe 矩陣
L3-6 Random Baseline Sharpe 分佈 500 次直方圖 + 各策略垂直標記
L3-7 訊號時序圖 選 5 支代表股,K 線 + entry/exit 標記 + confidence 曲線

5. Route B 待辦事項

Route A 完成後,在 route_b_todo.md 中記錄以下工作項目:

5.1 資料擴充

  1. 從 OHLCV 重算全市場指標:將 daily_analysis_snapshot.py 的計算邏輯抽離成可獨立執行的 scoring 函數,讓回測引擎能直接從 stock_ohlc 計算 bias/confidence,不依賴 daily_technical_snapshot
  2. 回測區間擴大至 2021-02 ~ 2026-02(~5 年),覆蓋更多市場環境
  3. 股票池進一步擴大:降低 snapshot rows 門檻或納入 2025-08 後大批次新增的 1,738 支短歷史股票

5.2 市場環境補充

  1. 補做 2021 多頭、2022 空頭、2023 盤整復甦的環境分析 — Route A 最大缺陷
  2. 重新定義市場環境子區間(含 2021~2023 的完整 bull/bear/consolidation 週期)

5.3 驗證

  1. 在更大樣本上驗證 Route A 找到的最佳組合
  2. Walk-Forward validation 用更長期間(2 年 IS + 6 個月 OOS,多 fold 滾動)
  3. 若 Route A 組合在 5 年資料上失效,重新跑 Layer 2 組合搜尋

5.4 擴展

  1. 美股支援:為 7 支美股補跑 snapshot 計算
  2. 多維度整合:financial snapshot 累積到 >= 1 年時,啟用 Strategy E
  3. 做空策略:在 Route B 的 bear 市場區間驗證 bearish signal 的做空價值