MARKET RESEARCH
回測結果
walk-forward 樣本外(h=1,3,841 筆)· 勝率與原因拆解 · 改善流程與追蹤
總體(walk-forward 樣本外)口徑 execution=next_open/interval_model=garch/initial_train_days=1250
訊號統計不是投組權益。h3/h5 持有窗重疊;未從成交、部位、費用、資金帳重建前,訊號累積不能視為帳戶報酬。兩種勝率不可混為一談。 「方向命中率」含中性預測,一個永遠說中性的模型在震盪盤就能拿高分——那正是本專案踩過的退化預測器陷阱。要判斷可交易性看進場勝率(只算真的會下單的日子)與下方的盈虧結構。
原因① 分市場波動狀態(sigma20 三分位)
| 波動組 | n | 方向命中率 | 進場比例 | 進場勝率 | 訊號平均報酬 | 實際震盪佔比 |
|---|---|---|---|---|---|---|
| 低波動 | 1281 | 33.7% | 66.8% | 47.7% | +0.01% | 38.4% |
| 中波動 | 1280 | 36.7% | 71.4% | 50.3% | +0.03% | 42.2% |
| 高波動 | 1280 | 39.8% | 62.3% | 45.8% | +0.01% | 48.9% |
同天期、同表樣本:高波動組進場勝率 45.8%,排名最低。各組報酬未扣成本;此分組比較不能單獨解釋因果或證明交易能力。
原因② 分預測方向
| 預測方向 | n | 方向命中率 | 進場勝率 | 訊號平均報酬 | 實際平均報酬 |
|---|---|---|---|---|---|
| 偏空 | 2098 | 28.3% | 46.2% | -0.01% | +0.01% |
| 中性 | 1274 | 51.1% | — | — | +0.10% |
| 偏多 | 469 | 35.8% | 56.1% | +0.14% | +0.14% |
同一份 h=1 OOS 樣本中,模型預測偏空比例 54.6%。實際標籤分布:跌 25.3%/震 43.2%/漲 31.5%。類別權重是偏向的候選解釋,須以事前登記的消融驗證;這張表本身不支持因果判定。
原因③ 盈虧結構(訊號品質診斷,已扣全期中位價成本)
⚠️ 這一組是逐筆訊號的診斷,不是帳戶損益。報酬用的是標籤 y_ret_1d(訊號日收盤 → 第 1 天收盤),而訊號在收盤後才產生、那個收盤價成交不到;成本用全期中位價換算成固定 bp。可成交、可重算的版本在下一張「帳戶權益」卡。
勝率高不等於賺錢,這一組數字回答「就算猜對,幅度夠不夠覆蓋成本」。目前獲利因子 0.9665——小於 1,總獲利填不滿總虧損。賺賠比 1.103(贏的時候賺得比較多),勝率 46.7%,兩者相乘後每次進場期望值 -0.0142%(負,已扣成本)。
帳戶權益(h=1,照規則逐筆建帳;2010-01-15 ~ 2025-09-11)
| 期間總報酬 | 年化 | 最大回撤 | Sharpe | 累計成本 | 平均 |淨曝險| | |
|---|---|---|---|---|---|---|
| 模型訊號 | +22.0% | +1.28% | -26.2% | +0.17 | 78.8% | 0.67 |
| 同規則一直做多(對照) | -67.9% | -6.99% | -70.7% | -0.55 | 113.4% | 1.00 |
規則 subaccount-1/h/next_open/v1:1 個子帳各配 1/1 資金,第 t 天的訊號歸子帳 t mod 1;漲 → 做多、跌 → 做空、震 → 該子帳空手;訊號日的下一個交易日開盤進場,進場日算第 1 天、第 1 天收盤出場;第 1 天報酬是開盤→收盤,之後用 ret_roll(轉倉不造假跳空);進場日鎖死 → 不成交、出場日鎖死 → 順延;上一筆還沒出場的子帳跳過,總曝險永遠 ≤ 1 倍名目;成本在成交當日以當天價格換算(按口手續費+按名目期交稅+按 tick 滑價),不是全期中位價。不同子帳的反向部位不互相沖銷。
逐筆:成交 2,565、空手 1,274、鎖死擋下 2、出場順延 0、子帳忙碌跳過 0、資料尾端不足 0。⚠️ 這是曝險比例的帳:口數、保證金、帳戶資金要等帳戶參數填了才算得出來;另一種規則(每天把子帳合成單一目標部位、互相沖銷以省成本)是另一個版本,這裡沒有算。成本仍是 assumed-cost。歷史段已被看過多次,這張表是診斷,不是未見資料的確認。
原因④ 分年度(訊號逐筆加總 11/16 年為正)
| 年 | n | 方向命中率 | 進場勝率 | 訊號逐筆加總(非帳戶) | 帳戶權益(子帳 1/h,扣成本) | 同期市場(ret_roll) |
|---|---|---|---|---|---|---|
| 2010 | 242 | 28.5% | 47.9% | +2.01% | -13.06% | +14.01% |
| 2011 | 247 | 33.6% | 55.5% | +29.21% | +9.75% | -16.63% |
| 2012 | 250 | 30.0% | 51.2% | +8.77% | +11.31% | +15.85% |
| 2013 | 246 | 38.2% | 44.7% | +0.52% | +9.31% | +20.69% |
| 2014 | 248 | 31.9% | 48.1% | +2.97% | -5.32% | +10.06% |
| 2015 | 244 | 38.5% | 55.2% | +24.73% | +21.32% | -7.30% |
| 2016 | 244 | 43.4% | 56.6% | +15.48% | +15.45% | +23.19% |
| 2017 | 246 | 39.8% | 46.6% | +0.36% | +2.61% | +19.62% |
| 2018 | 247 | 34.8% | 44.8% | +3.29% | -8.20% | -4.64% |
| 2019 | 242 | 36.4% | 43.6% | -11.16% | -5.33% | +30.64% |
| 2020 | 245 | 37.1% | 36.2% | -31.90% | -0.20% | +35.90% |
| 2021 | 244 | 33.6% | 47.0% | -18.12% | -3.36% | +28.72% |
| 2022 | 246 | 40.2% | 47.8% | +18.12% | +14.83% | -17.29% |
| 2023 | 239 | 35.6% | 45.7% | -8.17% | -5.71% | +28.67% |
| 2024 | 242 | 49.2% | 45.9% | -2.57% | -9.34% | +25.69% |
| 2025 | 169 | 37.9% | 41.8% | +8.85% | -6.18% | +13.63% |
能力若是真的,應該在多數年份都在;若集中在少數幾年,多半是運氣或特定 regime。訊號逐筆加總 11/16 年為正;最長連續為負:2019–2021(3 年)。「訊號逐筆加總」是該年每一筆 類別 × y_ret_1d 直接相加(未扣成本),只能看方向,不能當報酬讀;可以當帳戶讀的是「帳戶權益」那一欄,最右欄是同期市場(期貨連續持有 ret_roll,不扣成本,當背景用)。同期市場上漲、而訊號逐筆加總為負的年份:2019、2020、2021、2023、2024——與偏空傾斜的描述一致,但這張表不支持因果判定。
進步流程每一關的數字 = 目前停在該關的提案數
🔒 ③ → ⑤ 不可跳關。中間的「凍結判準」就是 prereg——看了成績再訂門檻等於沒有門檻,那樣跑出來的數字不能用來決定要不要拿真錢上場。目前 0 項停在提案階段還沒寫 prereg,排隊中的檢定預計消耗 3 次驗證折(已用 43 次)。
改善提案登記簿(6 項,3 項未完成)每一列都要能回答:從哪個證據來、判準凍結了沒、最後怎麼判的。登記簿裡的數字是提案當時的快照(日期見各列),與本頁現算的卡片可能不同——例如成本參數當時 9 項未查證、現值以頁首橫幅為準;現值一律以卡片為準
| 發現 | 結論 | 如何提升 | 狀態 |
|---|---|---|---|
| bearish-tilt 偏空預測佔 52.40%,實際下跌日僅 25.16%(過度預測 2.1 倍);偏多預測佔 14.77%,實際 31.99% | 虧損集中在偏空訊號。偏多訊號的勝率與平均報酬都是正的,只是次數少 3.5 倍。系統性偏空傾斜是目前最大的單一虧損來源。 | 先分辨成因(H1: class_weight=balanced 造成少數類過度預測 / H2: 特徵本身帶偏空傾向或在對抗 TX 年化 15.18% 的上行漂移),再決定矯正方式。階段一只看分布不看績效。 prereg: prereg-2026-08-25-bearish-tilt.toml卡在:研究凍結中(解凍條件:每 horizon 累積 60 筆 live 樣本) | 判準已凍結 prereg 已寫,等待解凍後執行 |
| high-vol-entry 高波動組(sigma20 上三分位)方向命中率最高 40.24%,但進場勝率最低 45.93%、訊號平均報酬 −0.0000 | 高波動期的高命中率是機械的——動態震盪帶被撐寬,實際震盪日從 38% 升到 49%,模型跟著多說中性。真正進場的那些日子反而最不準。命中率在這裡是誤導性指標。 | ⚠️ 原始提案「高波動期不進場」已在 prereg 中被否決——那是三組挑最差、差距僅約 2.5 SE、分組方式任意,屬資料窺探。改用波動調整曝險(曝險 ∝ σ_target/σ20,無可調門檻),先驗依據是標籤的震盪帶本來就隨波動放大。關鍵判準:必須贏過「等平均曝險的常數縮放版」,否則就只是縮量不是擇時。 prereg: prereg-2026-08-25-vol-scaled-exposure.toml卡在:研究凍結中(解凍條件:每 horizon 累積 60 筆 live 樣本) | 判準已凍結 prereg 已寫,等待解凍後執行 |
| payoff-asymmetry 獲利因子 0.9685(<1)、賺賠比 1.089、勝率 47.07%、期望值 −1.3bp | 賺賠比已經大於 1(贏的時候確實賺比較多),問題出在勝率不足 50%。兩者相乘後期望值仍為負,但差距很小——獲利因子 0.9685 距離 1 只差 3.2%。 | 停損/停利取自模型自己的 q10/q90(不引入可調參數)。因缺日內資料,改採保守下界設計:日 OHLC + 「同日雙觸發判停損先」。判讀刻意不對稱——下界過了就成立(真實只會更好),下界沒過不得判定無效,只能記「保守假設下不成立,待日內資料累積後重測」。🔴 2026-10-05 更正(整體審核 A09):這是「指定成交假設下的保守路徑情境」,不是完整的損益下界——它只處理日 K 內停損停利的先後順序;觸價不成交、限幅鎖死、部分成交、跳空後的流動性與延遲都不在其中,所以「過了就成立、真實只會更好」不成立,過了也只能說「在這組成交假設下成立」。所需賺賠比 1.13 是由勝率 47.07% 反算的必要條件,不是挑的。 prereg: prereg-2026-08-25-payoff-asymmetry.toml卡在:研究凍結中;且日內資料僅 64 天,判定為保守下界 | 判準已凍結 prereg 已寫,等待解凍後執行 |
| c-grid-boundary chosen_c 五折全部是 0.01,即網格 [0.01, 0.1, 1.0] 的最小值(最強正則化) | CV 想要比網格能給的更強的正則化,最佳值在網格外——我們並不知道它在哪。把 chosen_c=0.01 當成「選出來的最佳超參數」是誤導,那是撞到牆。這與「特徵沒有訊號」的其他證據一致。 | 延伸網格到 [0.0001 … 10] 並只看訓練段的內折分數曲線。C 的挑選是巢狀的(在訓練段內用 TimeSeriesSplit 做),不碰測試段,所以這個診斷不消耗驗證折、不需等解凍。嚴格邊界:只授權報告曲線,不得把新 C 套進去看 OOS 績效(那要另一張 prereg)。prereg 內已寫下我的預期(曲線單調、最佳貼邊)以便事後檢驗判斷力。 prereg: prereg-2026-08-25-c-grid-boundary.toml結果:2026-08-25 執行(reports/c-grid-curve-2026-08-25.md,消耗驗證折 0 次)。結果 2:延伸兩個數量級後最佳仍貼在新下界 0.0001,平均曲線單調遞減,依決策規則 2 不延伸網格、不再往下試。最重要的發現不在原本的預期裡——最佳點 −1.09732 相對 ln(1/3) = −1.098612 只超額 +0.00129 nats,即 117 欄特徵在最佳正則化下幾乎正好等於每天說 1/3 / 1/3 / 1/3;但五折超額全部為正,與平衡準確率 t=7.09 一致。判別能力存在、方向一致、量級接近沒有。 | 已否決 檢定未過——試了效果不夠 |
| cost-assumption 成本敏感度掃描:方向訊號在 ×0 – ×10 整個範圍都沒贏過買進持有,連成本歸零時都還輸 0.6307 Sharpe | 9 項未查證的成本參數不是目前沒有 edge 的原因。 這是否定結果,直接排除一條路。 | 無須改善——此路已排除。成本參數仍該查證,但那是為了 L2+ 的口數與風險預算,不是為了讓 edge 出現。 結果:已於 2026-08-25 完成,結論:成本假設不是瓶頸。不再投入。 | 假說推翻 成因根本不對,與「效果不夠」是兩件事 |
| stationarity 非平穩特徵(tx_ma20 等)訓練段與測試段值域重疊 0–3% | 假說被推翻——移除非平穩特徵後,退化並未解除(本來就沒有退化),且 live 情境下準確率反而從 47.5% 掉到 42.4%。 | 無須改善——假說已推翻。值域漂移與共線性仍是真實缺陷,但造成的傷害不是退化,要另開 prereg 用針對性的判準。 prereg: prereg-2026-08-24-stationarity.toml結果:2026-08-24 檢定完成,假說推翻,不採用精簡特徵集。 | 假說推翻 成因根本不對,與「效果不夠」是兩件事 |
「已否決」與「假說推翻」刻意分開。前者是試了效果不夠,後者是連成因都想錯了——對後續決策的意涵完全不同:前者可能值得換個做法再試,後者該整條線停掉。
採用率的分母是「執行次數」而不是「提案數」,這是刻意的。那個分母就是多重比較的次數——試十次中一次,跟試一次中一次,是完全不同的證據強度,而只看「採用了什麼」的紀錄會把這件事藏起來。
改善驗證履歷(3 次執行,其中 0 個提案被重測過)append-only:寫下去就不改。判定要更正就再寫一筆指回原本那筆
| 日期/提案 | 判定 | 結果 | 驗證折 |
|---|---|---|---|
| 2026-08-25 cost-assumption | 假說推翻 成因根本不對,與「效果不夠」是兩件事 | 假說推翻:9 項未查證的成本參數不是目前沒有 edge 的原因。方向訊號在 ×0 – ×10 整個掃描範圍都沒贏過買進持有,連成本歸零時都還輸 0.6307 的 Sharpe。結論對成本假設不敏感。sharpe_diff_at_zero_cost=-0.6307 · sweep_range=×0 – ×10 · flips_at=None · unverified_cost_params=9測試期:同一組 walk-forward OOS 預測,只換成本假設(不重新擬合) 報告: reports/cost-sensitivity-2026-08-25.md無 prereg——這是在既有 OOS 預測上換成本假設,不重新擬合、不消耗驗證折。判定為 refuted 而非 failed:被推翻的是「成本是瓶頸」這個成因,不是某個改善的效果不夠。 | 0(不消耗) |
| 2026-08-25 c-grid-boundary | 未過 判準未滿足——試了,效果不夠 | 判準 A 未過:延伸網格兩個數量級後最佳 C 仍貼在新下界 0.0001,平均曲線單調遞減,沒有內部最佳點 → 依決策規則 2 不延伸網格。最重要的發現不在預期裡:最佳點相對 ln(1/3) 只超額 0.00129 nats,即 117 欄特徵在最佳正則化下幾乎正好等於每天說 1/3 / 1/3 / 1/3;但五折超額全部為正,與平衡準確率 t=7.09 一致。best_c=0.0001 · best_inner_cv_loglik=-1.09732 · ln_one_third=-1.098612 · excess_nats=0.00129測試期:訓練段內折 TimeSeriesSplit(n_splits=3) —— 未接觸任何測試段 執行前的預期:✅ 命中 結果 2:曲線單調,最佳仍貼在最小值(理由:曝險 0.095、準確率低於基礎率、成本歸零仍輸 0.63 Sharpe) 報告: reports/c-grid-curve-2026-08-25.md消耗 0 次驗證折(C 的挑選是巢狀的)。誠實記一處與平均曲線不符:逐折最佳是 [0.001, 0.0001×4],4/5 貼邊而非 5/5;但那一段曲線是平的,平段裡的 argmax 是雜訊。 | 0(不消耗) |
| 2026-08-24 stationarity | 假說推翻 成因根本不對,與「效果不夠」是兩件事 | 假說推翻:移除非平穩特徵後退化並未解除(本來就沒有退化),且精簡特徵集在 live 情境下更差。被移除的水準類特徵在長跨度訓練下顯然仍攜帶資訊,不是純粹的雜訊源。live_accuracy_baseline_58cols=0.475 · live_accuracy_reduced_45cols=0.424 · flat_class_baseline=0.428 · dominant_share_baseline=0.467測試期:近 60 個交易日逐日重擬合(比照 live 全歷史訓練) 執行前的預期:❌ 落空 十八輪判定 live 是退化預測器,病因是非平穩特徵 報告: status.md 十九輪第 9 次動用驗證折。重現 live 是前提——第一版背景測試給出 p_flat≈0.34 與 live 對不上,那個數字已作廢。對不上 live 的模擬不能拿來下結論。 | 1 次 |
「未過」與「無法判定」也刻意分開。payoff-asymmetry 使用指定成交假設下的保守路徑情境(日內 1 分 K 在 2026-08-25 提案當時僅 64 天;現有天數見日內頁),此情境未過不代表無效——把「測不出來」記成「無效」,會讓一個可能有用的想法被永久誤殺。
5f92ccf(第 163 次提交,2026-10-14) | 資料建置於 2026-10-14 10:30 UTC | 行情與研究結果供查看;會員可管理觀察清單並要求更新個股分析