MARKET RESEARCH
隔夜效應回測
外部說法的驗證 · 台指期 + 美股 + 跨國 · 可重現於 scripts/report_overnight.py
隔夜效應回測報告 報告日期 2026-08-26(49 天前 · 未重跑)
⚠️ 這是一份凍結的報告。裡面的成本假設、OOS 筆數、判準通過數都是2026-08-26 當時的值,之後沒有重跑——現況一律以 參數狀態 與 回測結果 為準。
隔夜效應回測報告 — 2026-08-26
⚠️ 這份報告測的是一個外部說法,不是本專案的預測模型。 本專案自己的回測在 /backtest(walk-forward OOS, 三個 horizon 各 3,811 筆,4 條事先判準 0 過 4 不過)。受測的說法
每天收盤買、隔天開盤賣 → +138萬% 報酬(paper gain) 反過來,每天開盤買、收盤賣 → −99% 跨多國市場都看得到這個現象 結論:收盤買、開盤賣,統計上最可能賺錢
原文用美光(MU)實測。
一句話結論
現象是真的;「+138萬%」甚至低估了;但那個結論在近十年不成立。
| 隔夜報酬 > 日內報酬 | ✅ 12 個市場全部成立 |
|---|---|
| 美光全期隔夜 vs 買進持有 | ✅ 隔夜贏(3.86 億% vs 6.9 萬%) |
| 近十年(2016+)隔夜 vs 買進持有 | ❌ 0 / 5 檔贏,而且是毛報酬 |
| 台指期隔夜 vs 買進持有 | ❌ 輸(毛 1,988% vs 2,128%) |
edge 最大的年代交易不了,交易得了的年代 edge 沒了。
方法
隔夜_t = open(t) / close(t-1) − 1 ← 收盤買、開盤賣賺的
日內_t = close(t) / open(t) − 1 ← 開盤買、收盤賣賺的
(1 + 隔夜_t)(1 + 日內_t) − 1 ≡ 當日總報酬 ← 恆等式,程式強制檢查兩個策略都是每天一次來回,一年約 250 次。
三個會把結論做出來的坑
| 坑 | 為什麼致命 | 防護 |
|---|---|---|
| 期貨轉倉 | 跨合約相減的假跳空(平均 0.55%、最大 3.67%)全部落在隔夜那一腿 | 在 px_ratio 空間拆(鐵律 8) |
| 股票分割 | 未調整的 2:1 分割 = 假的 −50% 隔夜報酬;只調 close 沒調 open 則變成 +100% | auto_adjust=True + split_artifacts() 配分割日曆逐日掃 |
| 指數開盤價 | 指數開盤是成分股第一筆成交價湊的,成分股開盤錯開,沒有人成交得到 | ETF 與指數分開列 |
三者都會讓誤差落在隔夜那一腿——也就是要量的那一腿。
🔴 更正:恆等式擋不住分割
這份報告的第一版寫了「恆等式檢查是唯一能同時擋掉前兩個坑的東西」。 那句話是錯的,寫測試的時候才發現:
[open(t)/close(t-1)] × [close(t)/open(t)] = close(t)/close(t-1)
↑ open 直接約掉了只要 total 是用同一條 close 算的,恆等式就是代數上恆成立, 不管 open 與 close 的調整因子一不一致都會通過。 一個永遠通過的檢查不是檢查。
真正在擋分割假象的是 tx.overnight.split_artifacts(): 掃出隔夜報酬絕對值超過 25% 的日子,並比對常見分割比例。 真實的單日隔夜跳空極少超過 ±25%。
一、台指期(本專案的標的)
資料 2004-01-05 → 2026-08-25,5,570 個交易日。 恆等式最大誤差 2.22e-16(見下方更正:這個檢查是恆成立的)。 分割/轉倉假象掃描:0 筆超過 ±25% ✅ 乾淨。
| 策略 | 每日平均 | 毛累積 | 毛年化 | Sharpe | Sortino | 最大回檔 | Calmar | 勝率 |
|---|---|---|---|---|---|---|---|---|
| 隔夜(收盤買開盤賣) | +5.88bp | 1,988% | 14.74% | 1.017 | 1.187 | -40.0% | 0.37 | 0.563 |
| 日內(開盤買收盤賣) | +0.58bp | 6.71% | 0.29% | 0.096 | 0.125 | -43.3% | 0.01 | 0.515 |
| 買進持有(不交易) | +6.46bp | 2,128% | 15.08% | 0.773 | 0.969 | -55.5% | 0.27 | 0.547 |
隔夜腿毛累積 1,988%,買進持有 2,128%——隔夜輸。 隔夜腿確實吃掉絕大部分總報酬(年化 14.74% vs 日內 0.29%),但買進持有同時吃到兩腿,而且一次交易都不用做。
成本敏感度(每天一次來回)
| 策略 | 損益平衡 | 0bp | 1bp | 3bp | 5bp | 10bp |
|---|---|---|---|---|---|---|
| 隔夜(收盤買開盤賣) | 5.88bp | 1,988% | 1,097% | 292.95% | 29.00% | -92.04% |
| 日內(開盤買收盤賣) | 0.58bp | 6.71% | -38.87% | -79.94% | -93.42% | -99.59% |
本專案假設的來回成本 3.41bp(assumed-cost (參數未查證))。隔夜腿的損益平衡是它的 1.73 倍。
⚠️ 但淨 Sharpe 只有 0.428,買進持有是 0.773——交易 5,570 次換來一半的風險調整報酬。
夜盤上線前後(台灣資料才做得到的檢定)
台指期 15:00 收盤後夜盤跑到隔天 05:00(2017-05-16 起)。 「隔夜」對台指期不是休市。如果隔夜溢酬來自「休市期間承擔風險的 補償」,夜盤上線後應該變弱。
| 期間 | 天數 | 隔夜平均 | 日內平均 | 隔夜勝率 |
|---|---|---|---|---|
| 夜盤前 | 3,306 | +4.38bp | +0.47bp | 0.548 |
| 夜盤後 | 2,264 | +8.07bp | +0.75bp | 0.584 |
效應反而變強。 所以「休市期間風險溢酬」這個解釋不成立。 比較可能是:夜盤與美股時段才是價格形成的地方,日盤只是把結果印出來。
🔎 那 8bp 到底發生在哪裡
台指期的「隔夜」可以再拆三段,其中一段是在市場裡、可以交易的。 (2,034 天,已排除轉倉日前後與夜盤合約非前月的日子——否則就是拿不同合約相減。)
| 區段 | 平均 | 佔隔夜 | 勝率 | 進得去嗎 |
|---|---|---|---|---|
| ① 15:00 日盤收 → 夜盤開盤 | +0.90bp | 11% | 0.510 | ❌ 跳空 |
| ② 夜盤盤中 17:00–05:00 | +5.97bp | 73% | 0.576 | ✅ 在市場裡 |
| ③ 05:00 夜盤收 → 08:45 日盤開 | +1.33bp | 16% | 0.542 | ❌ 跳空 |
| 合計 = 隔夜報酬 | +8.20bp | 100% |
73% 發生在夜盤盤中,不是在跳空裡。
這推翻了「隔夜溢酬 = 承擔休市風險的補償」——台指期根本沒有休市, 而錢是在開著的市場裡賺到的。比較合理的解釋是: 夜盤(與美股時段重疊)才是台指期價格形成的地方,日盤只是把結果印出來。
實務上的意義不是「可以照著做」(前面已經證明打不贏買進持有),而是:
- 日盤幾乎不貢獻報酬(+0.75bp/日)。要降曝險的話,降在日盤的預期成本最低。
- 本專案的模型預測的是日盤收盤到收盤的報酬。既然七成以上的價格變動發生在夜盤,夜盤特徵就是資訊量最高的那一群——而它們當期可用、不需延遲(見 CLAUDE.md)。
⚠️ 另外,漲跌停鎖死日 4 天成交量只有平常的 3%(中位數 3,054 口 vs 87,444 口),掛單成交不了——而策略假設每天都成交得到。
二、美股與跨國市場
資料品質:9 筆極端隔夜報酬,其中 0 筆是分割假象
| 標的 | 日期 | 隔夜報酬 | 判定 |
|---|---|---|---|
| AAPL | 1996-07-18 | +27.4% | 極端行情 |
| AAPL | 1997-08-06 | +27.8% | 極端行情 |
| AAPL | 2000-09-29 | -47.3% | 極端行情(分割日曆上沒有分割) |
| NVDA | 2000-03-07 | +28.2% | 極端行情 |
| NVDA | 2002-07-31 | -27.1% | 極端行情 |
| NVDA | 2004-08-06 | -30.6% | 極端行情 |
| NVDA | 2008-07-03 | -28.0% | 極端行情 |
| NVDA | 2023-05-25 | +26.1% | 極端行情 |
| ^HSI | 1987-10-26 | -25.1% | 極端行情 |
⚠️ 光看數字會誤判。 AAPL 2000-09-29 的隔夜 −47.3% 很接近 2:1 分割的 −50%,但那天是蘋果獲利預警,股價真的跌了將近一半。 所以 split_artifacts() 一定要傳 yfinance 的分割日曆—— 只有分割日曆上真的有分割的日子才判成假象,其餘一律標「極端行情」。
| 標的 | 類別 | 期間 | 天數 | 隔夜bp | 日內bp | 隔夜毛累積 | 買進持有 | 隔夜贏? | 隔夜Sharpe | 持有Sharpe |
|---|---|---|---|---|---|---|---|---|---|---|
| MU | 個股 | 1984-06-04→2026-08-25 | 10,639 | +15.85 | -2.52 | 386,070,462% | 68,971% | ✅ | 1.412 | 0.559 |
| AAPL | 個股 | 1980-12-15→2026-08-25 | 11,516 | +10.52 | +0.38 | 3,793,409% | 315,730% | ✅ | 1.031 | 0.626 |
| NVDA | 個股 | 1999-01-25→2026-08-25 | 6,939 | +15.59 | +3.95 | 1,111,602% | 567,140% | ✅ | 1.198 | 0.824 |
| SPY | ETF | 1993-02-01→2026-08-25 | 8,449 | +4.03 | +0.74 | 2,395% | 3,076% | ❌ | 0.960 | 0.649 |
| QQQ | ETF | 1999-03-11→2026-08-25 | 6,907 | +5.60 | -0.08 | 3,504% | 1,552% | ✅ | 0.987 | 0.514 |
| ^N225 | 指數 | 1965-01-06→2026-08-26 | 15,153 | +4.64 | -1.30 | 72,785% | 5,135% | ✅ | 0.973 | 0.425 |
| ^GDAXI | 指數 | 1988-01-04→2026-08-25 | 9,773 | +4.37 | -0.12 | 5,340% | 2,513% | ✅ | 0.927 | 0.497 |
| ^FTSE | 指數 | 1984-01-04→2026-08-25 | 10,772 | +0.81 | +1.95 | 130.95% | 991.35% | ❌ | 0.483 | 0.415 |
| ^HSI | 指數 | 1987-01-02→2026-08-26 | 9,784 | +4.66 | -1.10 | 5,521% | 904.34% | ✅ | 0.720 | 0.362 |
隔夜策略毛報酬贏過買進持有:7 / 9。
美光(原始說法的標的)
| 原文 | 實測 | |
|---|---|---|
| 隔夜累積 | +138 萬% | 386,070,462% |
| 日內累積 | −99% | -99.98% |
| 買進持有(對照,原文沒提) | — | 68,971% |
實測期間 1984-06-04 → 2026-08-25(10,639 天)。 兩個數字方向都對,而且隔夜那個量級原文還低估了。
| 隔夜 | 買進持有 | |
|---|---|---|
| 毛年化 | 43.22% | 16.75% |
| Sharpe | 1.412 | 0.559 |
| 最大回檔 | -53.7% | -98.2% |
| 損益平衡成本 | 15.85bp | — |
這是本報告裡唯一隔夜大勝買進持有的個股,而且 Sharpe(1.412 vs 0.559)與回檔(-54% vs -98%)都更好。 但下一節會看到,這幾乎全部發生在 2016 年以前。
🔴 依市場微結構切開,結論翻轉
美股 2001-04-09 才十進位化。在那之前最小報價單位是 1/8 或 1/16 美元。
| 標的 | 期間 | 天數 | 隔夜bp | 隔夜累積 | 買進持有 | 隔夜贏? |
|---|---|---|---|---|---|---|
| MU | 十進位化前 | 4,257 | +14.99 | 34,604% | 2,558% | ✅ |
| MU | 十進位化後 | 3,706 | +15.65 | 18,355% | -61.54% | ✅ |
| MU | 近十年 | 2,676 | +17.49 | 5,928% | 6,657% | ❌ |
| AAPL | 十進位化前 | 5,134 | +13.96 | 46,813% | 213.81% | ✅ |
| AAPL | 十進位化後 | 3,706 | +12.66 | 7,454% | 7,587% | ❌ |
| AAPL | 近十年 | 2,676 | +0.95 | 7.05% | 1,209% | ❌ |
| NVDA | 十進位化前 | 557 | +34.50 | 428.31% | 536.82% | ❌ |
| NVDA | 十進位化後 | 3,706 | +10.90 | 2,547% | 235.73% | ✅ |
| NVDA | 近十年 | 2,676 | +18.15 | 7,849% | 26,432% | ❌ |
| SPY | 十進位化前 | 2,067 | +7.99 | 406.54% | 198.32% | ✅ |
| SPY | 十進位化後 | 3,706 | +1.92 | 86.18% | 138.93% | ❌ |
| SPY | 近十年 | 2,676 | +3.90 | 164.55% | 345.62% | ❌ |
| QQQ | 十進位化前 | 525 | +19.90 | 169.79% | -29.60% | ✅ |
| QQQ | 十進位化後 | 3,706 | +3.93 | 276.78% | 242.64% | ✅ |
| QQQ | 近十年 | 2,676 | +5.10 | 254.56% | 584.73% | ❌ |
近十年隔夜策略贏過買進持有的:0 / 5——而且這是毛報酬,還沒扣任何成本。
AAPL 的隔夜 edge:13.96bp → 12.66bp → 0.95bp,幾乎消失。
而 edge 最大的年代,正好交易不了
用真實股價(把分割因子乘回去)算的最小價差:
| 標的 | 期間 | 真實中位股價 | 1/16 價差 | 同期隔夜 edge | |
|---|---|---|---|---|---|
| MU | 1984–1996 | $16.14 | 39bp | 11.16bp | ❌ 價差吃光 |
| MU | 1997–2001/04 | $40.47 | 15bp | 26.32bp | ✅ 有空間 |
| AAPL | 1984–1996 | $30.41 | 21bp | 13.99bp | ❌ 價差吃光 |
| SPY | 1984–1996 | $27.14 | 23bp | 4.75bp | ❌ 價差吃光 |
⚠️ 這張表我算錯過一次:yfinance 的 auto_adjust=False 仍然做分割調整, 我誤以為那是未調整價,把 1990 年代的 MU 算成 $1.69(真實約 $16), 價差 bp 灌水四倍。已用分割因子乘回去重算。
三、結論
原文對的部分
1. 隔夜報酬 > 日內報酬——12 個市場全部成立,這是穩健的現象(文獻上叫 overnight drift)。 2. 美光的日內累積確實接近 −100%。 3. 「+138萬%」不但沒有誇大,還低估了(實測 3.86 億%)。
原文錯的部分
1. 「收盤買、開盤賣統計上最可能賺錢」——這句話少了比較對象。 它比日內策略好,但在台指期輸給買進持有,在近十年的美股五檔全輸。 2. 「跨多國市場都看得到」只對一半。 隔夜>日內是普遍的;但「日內 −99%」是美光這種高波動個股的特性,美股指數的日內報酬是正的。 3. 全期複利掩蓋了時代差異。 效應集中在 2001 年十進位化之前,而那個年代 1/16 價差就是 21–39bp,遠高於同期 4.75–14bp 的 edge。
什麼會讓我改變看法
- 近十年任何一檔的隔夜策略毛報酬贏過買進持有(目前 0/5)
- 有辦法證明開盤集合競價的實際成交價貼近印出來的開盤價
- 台指期的夜盤結構被複製到別的市場,而效應仍然存在
什麼不會
- 再找一檔漲很多的個股重跑(那是選股,不是策略)
- 把期間拉長(全期複利正是問題所在)
- 換一個沒有買進持有對照的呈現方式
附錄:可重現
python3 scripts/probe_overnight_effect.py # 台指期
python3 scripts/probe_overnight_us.py # 美股 + 跨國
python3 scripts/report_overnight.py # 這份報告分析邏輯單一定義於 src/tx/overnight.py。研究登記簿:reports/research_ledger.jsonl 的 overnight-effect、overnight-effect-us、overnight-leverage-idea。
成本標註:assumed-cost (參數未查證)。台指期成本參數 9 項未查證;美股部分不假設單一成本,直接報損益平衡與敏感度。
5f92ccf(第 163 次提交,2026-10-14) | 資料建置於 2026-10-14 10:30 UTC | 行情與研究結果供查看;會員可管理觀察清單並要求更新個股分析