量化研究工作流:
把 5MA、波動與回測放進同一條證據鏈
量化不是把圖表變得更複雜,而是把研究問題、資料口徑、公式、執行規則與失效條件寫清楚。本篇以 5MA/20MA 扣抵、波動度 Z-Score 與樣本外回測建立一套可複盤流程。
先看結論
- 均線扣抵描述「窗口中被移出的價格」與新價格的差,不是單獨的買賣訊號。
- 波動 Z-Score 只能說目前波動相對自己的歷史分布偏高或偏低,不能推導方向。
- 回測最重要的不是漂亮曲線,而是時間切分、下一根執行、成本、樣本外與失效監控。
一、先把研究問題寫成可反駁命題
1.1 從「會不會漲」改成可觀測條件
「5MA 向上所以會漲」不是完整命題,因為它沒有定義訊號形成時點、進場價格、持有多久、交易成本與失效條件。較可測試的寫法是:「當收盤後的 5MA 高於 20MA,下一個交易日持有一根日線,扣除雙邊成本後的平均報酬是否仍為正?」這樣才知道要收集哪些欄位。
1.2 固定資料口徑
研究前要記錄標的、交易所、幣別、調整方式、頻率與截止日。若使用 ETF,分配股利是否回補價格會改變結果;若使用期貨,連續合約的換月方法會改變報酬。不同口徑不能在同一條曲線中靜默混合。
二、5MA/20MA 扣抵值:先懂窗口,再談轉折
2.1 均線與扣抵公式
n 日簡單移動平均是最近 n 個收盤價的平均。今天與明天之間,窗口會移除最舊的價格,加入新價格,因此均線變化不只取決於今天是否上漲。
MA(n,t+1) − MA(n,t) = (C_{t+1} − C_{t-n+1}) / n
2.2 可重現的示範
2.3 5MA 與 20MA 的使用邊界
短均線對噪音敏感,長均線對轉折延遲。比較扣抵值時,應同時觀察成交量、波動狀態、支撐壓力與交易成本;不要把「扣高助跌、扣低助漲」寫成必然因果。可直接使用波動度 Z-Score 工具檢查當時的波動環境,再把歷史收盤價交給自己的試算表核對。
三、波動度 Z-Score:把高波動與低波動定義清楚
3.1 從價格到報酬
先用相同調整口徑的價格計算日報酬 r_t=P_t/P_{t-1}−1,再以固定窗口計算樣本標準差。若把價格直接拿來做標準差,會把價格水準誤當成風險。
Z_t = (σ_t − mean(σ)) / stdev(σ)
3.2 解讀三種情況
| 結果 | 可說的事 | 不可說的事 |
|---|---|---|
| Z ≥ 2 | 目前滾動波動高於樣本自身分布 | 不能直接說要做空或一定下跌 |
| −2 < Z < 2 | 接近自身樣本中段 | 不能說風險已消失 |
| Z ≤ −2 | 目前波動低於自身分布 | 不能說低波動等於安全 |
窗口、樣本長度與市場體制都會影響 Z-Score。它適合做研究分層,例如調整回測成本假設或縮短槓桿曝險,而不是代替交易計畫。
四、樣本外回測:防止把歷史雜訊當優勢
4.1 時間先切開,再調參
把資料分成研究期、驗證期與封存的樣本外期。參數只能在研究期決定;樣本外資料只能在規則鎖定後使用。若反覆看樣本外結果再改參數,它就不再是樣本外。
4.2 下一根執行與成本
收盤形成的訊號不能同時使用同一根收盤成交,除非你有能證明的收盤撮合機制。保守做法是下一根 K 線執行,並納入手續費、點差、滑價、稅費、換月與停牌。策略報酬與買入持有要用同一價格口徑比較。
4.3 回撤不是裝飾欄位
除了總報酬,至少要報告最大回撤、回撤持續時間、交易次數、單筆分布、最差連續虧損與樣本外落差。用少量交易得到高 Sharpe,可能只是估計誤差;用很多參數把曲線修成直線,則是過度擬合風險。
可搭配歷史 VaR 估算器與Kelly 風險預算工具,把研究結果轉成壓力檢查,而不是直接轉成下單比例。
五、可複盤的量化研究檢查表
- 研究假設是否能被資料推翻?
- 價格、股利、期貨換月口徑是否固定?
- 是否明確隔離樣本外期間?
- 訊號與成交是否至少錯開一根 K 線?
- 成本、滑價、稅費與流動性是否壓力測試?
- 參數數量是否與樣本量相稱?
- 是否記錄版本、截止日與每次改動理由?
- 失效條件與停機規則是否事前寫下?
把研究流程變成可操作的計算
先貼入你查證的日報酬,再用 Z-Score 看波動位置;最後用風險預算檢查部位上限。
常見問題
扣抵值高就一定助跌嗎?
不是。扣抵值只描述均線窗口替換的機械效果,實際價格仍受新資訊、成交量、流動性與市場制度影響。
Z-Score 可以預測崩盤嗎?
不能。它是相對分布的描述統計;即使波動 Z-Score 很高,也不提供方向與時間點。
樣本外結果不好是否代表策略一定無效?
它至少代表目前規則與資料口徑沒有在封存期間重現優勢。應先檢查資料、成本與執行假設,再決定是否停止研究,而不是回頭偷改樣本外參數。