我不是什麼量化高手,也不是什麼金融工程師。 我只是那種會自己寫下載器、跑回測的人。 但說真的,如果沒有 AI 幫我,我根本不知道怎麼處理這些資料。
🧠 問題一:ETF 拆股後,Yahoo Finance 的 Adj Close 竟然沒調整?
理論上:
Adj Close = Close × 調整因子(應已含拆股)
但在某些 ETF(例如 4950)中,我發現:
程式碼
日期 Close Adj Close Stock Splits 結果
11/3 26.18 26.18 0 ❌ 沒調整(應該要乘 0.393)
11/4 26.18 26.18 0.393 ❌ 標記日錯位、未修正前一日
這代表什麼?代表如果你用 Adj Close 算報酬率,會在拆股那週出現莫名其妙的 +150%、+200% 的「假漲幅」。
🧠 問題二:停牌占位列會切斷週K,導致報酬率錯誤?
以前我以為,只要資料有日期、有收盤價,就能算週K。 但 AI 教我:停牌占位列(成交量為 0 且四價全相等)如果不先刪掉,會讓週K產生錯誤的切割。
例如 00632R 的日K片段:
程式碼
日期 開盤 最高 最低 收盤 成交量 判斷
2024-12-02 23.45 23.52 23.17 23.17 27865768 ✅ 有交易
2024-12-03 22.82 23.03 22.82 22.96 23524613 ✅ 有交易
2024-12-04 22.96 22.96 22.96 22.96 0 ❌ 停牌占位列
2024-12-05 22.96 22.96 22.96 22.96 0 ❌ 停牌占位列
2024-12-06 22.96 22.96 22.96 22.96 0 ❌ 停牌占位列
2024-12-09 22.96 22.96 22.96 22.96 0 ❌ 停牌占位列
2024-12-10 22.96 22.96 22.96 22.96 0 ❌ 停牌占位列
2024-12-11 23.09 23.14 22.94 23.12 20797034 ✅ 恢復交易
如果沒清掉停牌列,週K會被錯誤切成:
- 一週(12/02~12/06)→ 收盤 22.96
- 下一週(12/09~12/13)→ 收盤 23.12
- 報酬率 ≈ +0.70%,看起來正常,但如果價格異常就會誤爆 >100%
✅ 正確做法:連續停牌週都不產生週K,直到恢復交易後的「第二週」才恢復計算
程式碼
週別 狀態 是否產生週K 原因
12/02~12/06 有交易 ✅ 可正常計算
12/09~12/13 完全停牌 ❌ 無交易,不應產生週K
12/16~12/20 恢復交易,但前週停牌 ❌ PrevC_W 無效,報酬率不可信
12/23~12/27 有交易 ✅ 可正常計算
這樣才能保證:
- PrevC_W 是來自「真實有交易的週」
- 報酬率計算不會被假價格污染
- QA 分布與厚尾名單乾淨可靠
📈 週高 / 月高也安全了
週高是這樣算的:
週高 = 該週內所有交易日的日高最大值
如果停牌列沒清掉,週高可能被鎖死在某個常數(例如 22.96),導致:
- QA 報表出現假厚尾
- 策略誤判異常波動
但只要先清掉停牌列,週高就只會來自「真實有交易的日子」,分布自然乾淨,厚尾名單也不會被污染。
🧠 問題三:反向切割怎麼做?我根本不知道
我原本以為只要用 resample('W') 就能搞定週K,但 AI 教我:
- 要用 ISO 週(避免跨年錯位)
- 要先清洗日K,再做幾何連乘驗證
- 要做 QA 稽核:分箱分布、漂移警報、厚尾異常
這些我根本不會寫,是 AI 一步一步教我怎麼做,還幫我產出:
程式碼
weekly_vs_daily_diff.csv
weekly_drift_alerts.csv
weekly_top_outliers.csv
✅ 結論:花錢買資料也要做一樣的處理
你以為花錢買資料就能省事?錯了。
商業資料也會有拆股錯位、停牌占位、報酬異常。 如果你不做清洗與 QA,策略再好也白搭。
















