時序動能是趨勢策略裡最容易被完整寫下來、也最容易被檢驗的形式。它只有三個設計決策:回看多久、訊號用什麼形狀、波動率怎麼估。這一篇把三者的公式、預設值與取捨寫清楚,並給一套避免過擬合的參數選擇程序。
一、標準形式
Moskowitz、Ooi 與 Pedersen(2012)的策略可以寫成一行:
r_TSMOM(t → t+1) = (1 / S_t) · Σ_s sign( r_s(t−12 → t) ) · (σ_target / σ_s(t)) · r_s(t → t+1)
其中 S_t 是當期有訊號的市場數,σ_s(t) 是市場 s 的事前(ex-ante)年化波動率估計,σ_target 是一個常數縮放係數。
關於 σ_target 有一件必須講清楚的事:這個常數只決定槓桿與波動率水準,不影響策略的 Sharpe。 不同論文用不同數字(有的把每個部位縮放到很高的個別波動率目標,有的直接選一個讓整體組合年化波動率落在 10% 左右的係數),數字看起來差很多,但那只是分母選擇不同。看到論文寫「縮放到 40% 波動率」而覺得瘋狂的人,是把個別部位的名目波動率誤讀成組合波動率——縮放後把幾十個低相關市場加總,組合波動率會降到 10–15%。實作時的正確做法是:先用倒數波動率決定相對權重,最後再用一個組合層係數把總波動率調到你要的水準(見 波動率目標化)。
二、波動率怎麼估
論文用的是一個極簡的指數加權模型(等價於一個單變量 GARCH 的簡化版):
σ²_t = 261 · Σ_{i≥0} (1−δ) · δ^i · ( r_{t−1−i} − r̄_t )²
261把日變異數年化(一年約 261 個交易日)。δ選成讓權重的重心(center of mass)落在 60 天,即δ / (1−δ) = 60,於是δ = 60/61 ≈ 0.9836。r̄_t是同一組指數權重下的加權平均日報酬。
三個實作要點:
- 必須是事前估計。 用
t時點之前的資料估σ_t,決定t → t+1的部位。用當期或未來波動率就是前視偏誤,回測會漂亮到不真實(見 回測與驗證)。 - 半衰期是一個真實的取捨。 重心 60 天(半衰期約 42 天)反應中等。改成 20 天會讓部位對波動率跳升反應更快(保護較好,但波動率回落時進場太慢),改成 120 天則相反。折衷做法是取兩個半衰期估計的平均。
- 期貨要用超額報酬。 公式裡的
r是超額報酬。期貨價格本身已內含融資成本,直接用價格報酬即可;若用現貨或 ETF,需扣掉無風險利率才與論文設定一致。
三、訊號形狀:三種選擇
| 形狀 | 定義 | 特性 | 適用 |
|---|---|---|---|
二元 sign | s = sign(r_{t−12,t}) | 最簡單、換手集中在穿越零點附近、訊號穿越時部位 100% 翻轉 | 學術基準、規則要極簡時 |
| 標準化並截斷 | s = clip( r_{t−12,t} / (σ_t·√T), −2, +2 ) / 2 | 趨勢強度大時部位大、弱時部位小;避免零點附近劇烈翻轉 | 多數實務系統 |
| 平滑飽和 | s = tanh( k · r_{t−12,t} / (σ_t·√T) ) | 與上者類似但處處可微,換手更平滑 | 需要控制換手成本時 |
二元訊號的隱藏成本在於零點附近的抖動:r_{t−12,t} 在 0 附近微幅擺動時,部位會從 +100% 跳到 −100%,一次來回付兩次全額交易成本。標準化截斷把這段變成線性過渡,實測上能明顯降低鋸齒成本,代價是「趨勢很弱時你也有小部位」——這在真正的無趨勢期間會多虧一點。
建議預設:標準化並截斷在 ±2 個標準差,這是在簡潔與換手之間最平衡的選擇。
四、回看期:不要只選一個
單一回看期的最大問題不是「選錯」,而是你無法事前知道有沒有選錯。AQR 的百年研究用 1 個月、3 個月、12 個月三種回看期各自建訊號再組合,這個做法值得直接抄:
s_total = ( s_1M + s_3M + s_12M ) / 3
它的效果不是提高回測 Sharpe(通常還略微降低),而是把「參數選擇風險」分散掉。三個速度的訊號在不同市況下輪流貢獻:1 個月訊號抓短促行情、12 個月訊號抓長趨勢,而三者相關性通常在 0.5–0.7 之間,混合有實質分散效果。
回看期與換手的量級關係:訊號的換手率大致與回看期長度的平方根成反比。把回看期從 12 個月縮短到 1 個月,換手率大約增加 3 倍以上,成本也隨之放大。所以快速訊號在成本高的市場(冷門商品、加密、小型股 ETF)幾乎必然無利可圖,而在流動性最好的市場(股指期、公債期、主要匯率)才有機會。這是**「速度必須配上流動性」**的原則。
五、參數選擇程序(避免過擬合)
趨勢系統的參數空間看似小,但你能調的東西比想像多:回看期、波動率半衰期、訊號截斷點、再平衡頻率、市場清單、權重方式。每多調一項,過擬合的機率就上升。以下是一套可執行的紀律:
- 先寫下候選清單,再跑回測。 例如回看期只允許 {21, 63, 126, 252} 個交易日。事後才加入的參數值必須記錄下來當作一次額外試驗。
- 記錄試驗次數。 若你試了 40 組參數,最好那組的 Sharpe 必須用更嚴格的門檻檢視(多重檢定會膨脹最大值;Bailey 與 López de Prado 的 deflated Sharpe 就是為此而設)。
- 要求跨市場一致性。 一組好參數應該在多數市場都有正報酬,而不是靠 2 個市場撐起全部。若 60 日在黃金上特別好、在其他 29 個市場平庸,那是黃金的歷史,不是你的策略。
- 要求參數平原。 相鄰參數的績效必須平滑接近。尖峰即雜訊。
- 保留真正的樣本外。 切出最後 20–30% 的期間完全不看,直到所有決策定案。看過一次就不再是樣本外。
- 用「刻意找沒研究過的市場」當額外檢驗。 這是《Trends Everywhere》的方法:把系統套到 82 個文獻沒碰過的市場上檢查是否仍成立。個人做法可以是:用 A 組市場開發、用 B 組市場驗證。
六、可直接實作的規格(預設值)
市場:20–40 個流動性期貨,跨股指/公債/短期利率/匯率/商品(見筆記 09)
資料:日收盤、連續合約(回溯調整價差),超額報酬
波動率:EWMA 事前估計,重心 60 日,年化因子 261
訊號:s = mean( clip(z_21, ±2), clip(z_63, ±2), clip(z_252, ±2) ) / 2
其中 z_k = r(t−k → t) / ( σ_t · √(k/261) )
部位:w_i = s_i × (σ_target_portfolio / σ_i) × (1/N) ,最後乘上組合層縮放係數(筆記 07)
再平衡:每週一次,或當目標部位與現有部位偏離 > 20% 時(見筆記 11)
風控:單市場、群組、方向、組合四層上限(筆記 08)
成本:每次交易計入 買賣價差/2 + 手續費 + 滑點估計(筆記 10)
這套規格的每一行都能被兩個人獨立實作出相同結果,這是它跟「順勢操作」的差別。接下來是整套策略真正決定成敗的部分 → 波動率目標化與部位大小