移動平均線與雙均線趨勢跟隨策略|Quant Theory 第 11 講筆記
第 11 課・共 34 課
目錄
這是 Liu Peng 大學級量化交易課程第 6 講下半部分的筆記,主題是移動平均線 Moving Average 的計算方法,以及如何以雙均線交叉構建趨勢跟隨 Trend-following 策略。上一講介紹了趨勢、動量與技術指標的概念框架(詳見對數回報與技術指標|第 10 課),本講把框架落實為具體公式與程式:先推導簡單移動平均線(SMA)與指數移動平均線(EMA),再用兩條均線的交叉點產生交易訊號。
學習重點
- 移動平均線的本質是滾動窗口:在時間序列上取固定大小的連續窗口計算平均值,新數據進來時剔除最舊一點、加入最新一點,各窗口均值連成一條平滑曲線。
- SMA 是等權重平均:窗口內每個價格點權重同為 $1/M$,窗口長度 $M$ 由用戶自訂——$M$ 越大曲線越平滑,越小越貼近原價格。
- EMA 假設近期數據更重要:以遞推公式 $\mathrm{EWMA}_t = \alpha S_t + (1-\alpha)\,\mathrm{EWMA}_{t-1}$ 計算,$\alpha$ 越小平滑越明顯,且不需指定窗口。
- 雙均線交叉產生訊號:短期均線上穿長期均線建立好倉、下穿建立淡倉,其餘時間維持原倉——交叉即兩線相對大小的符號改變。
- 這是絕對動量策略:全程只用資產自身的歷史價格,不與其他股票比較,屬時間序列維度的動量。
詳細筆記
移動平均線:滾動窗口裏的平均
移動平均線 Moving Average 又稱滾動平均 Rolling Average。講者以一個手繪示意解釋其構造:先在歷史數據上選定一個窗口,框住若干個連續時期的數據點(例如每日收市價),計算窗口內數據的平均值,作為該窗口的代表統計量。時間向前推進、新數據出現時,窗口整體向前滑動——剔除最舊的數據點,加入最新的數據點,再計算一個新的平均值。
每個窗口只貢獻一個均值;把各窗口的均值依次連起來,就構成一條新的價格曲線,這就是移動平均線。講者點明其淨效果是對原始時間序列的平滑 Smoothing:原始序列中短期上落與暫時性波動,在取平均的過程中互相對銷,留下一條更平滑的曲線。使用移動平均線的根本目的,正是濾去短期噪音,讓較長期的趨勢浮現。這個「以局部平均代替單點觀測」的思路,與風險與回報|第 7 課中以統計量概括數據的做法一脈相承——犧牲細節,換取對整體結構的清晰判讀。
簡單移動平均線 SMA 的定義與推導
計算移動平均最常用的方法是簡單移動平均線 Simple Moving Average(SMA)。時點 $t$ 的 SMA 定義為:由當期開始向前數 $M$ 個價格點(包括當期,所以最早一點是 $t-(M-1)$),相加後除以 $M$:
$$\mathrm{SMA}_t = \frac{S_{t-(M-1)} + \cdots + S_{t-1} + S_t}{M}$$把 $1/M$ 分配到分子各項,可見每個歷史價格點的權重同為 \$1/M$——SMA 本質是等權重平均 Unweighted Mean,窗口內所有數據一視同仁,窗口外的數據權重為零。

窗口長度 $M$ 是用戶自訂的輸入,取決於想要多強的平滑效果。講者分析兩種情形:$M$ 小時,平均只涉及少數幾個歷史點,平滑作用有限,曲線走勢貼近原價格;$M$ 大時,每次計算納入更多歷史價格,平均效應更明顯,得出的曲線顯著平滑。平滑程度與反應速度由此構成一對取捨——這對取捨在後文的圖表對比中一目了然。
pandas 實作:rolling 與 mean
程式層面,講者示範用 pandas 計算均線:對調整後收市價序列呼叫 rolling 方法,指定窗口大小,再套 mean 方法。rolling 的作用是把窗口沿序列逐期向下滾動,mean 則對每個窗口求平均。以窗口 3 為例,第三期數據的均線值,就是第一至第三期收市價相加除以 3——講者把前三個價格手動相加驗證,結果與 rolling 輸出完全一致。
值得留意的是序列開頭的處理:窗口 3 之下,第一、二期數據之前沒有足夠歷史點填滿窗口,均線值是空值(NaN)。程式提供選項,允許期初「有多少用多少」,以不足額的窗口先行計算,避免開頭出現空值——這是實作上對初始值的特殊處理。
窗口大小的平滑效果對比
講者以 2022 年 Google(GOOG)日線數據實際計算兩條 SMA:$M=3$ 與 $M=20$,疊加在原價格曲線上對比。

圖中紅線是 SMA-3,除了削去極端上落外,走勢幾乎複製原價格——窗口太短,平滑作用有限。綠線是 SMA-20,每個點都要動用過去 20 期價格取平均,短期震盪被大幅攤平,曲線明顯圓滑,只保留中期走向。實驗結果與公式推導的預測一致:增大 $M$,平滑增強,但曲線對最新價格變化的反應也隨之變慢。
指數移動平均線 EMA:近期數據更重要
另一類廣泛使用的均線是指數移動平均線 Exponential Moving Average(EMA),又稱指數加權移動平均 Exponentially Weighted Moving Average。關鍵分別在假設:EMA 認為近期數據比舊數據更重要,應獲較高權重——這正好與 SMA 的等權重設計相反。好處是 EMA 對近期價格變動反應更快、更敏感。
EMA 的定義是一條遞推公式,由控制參數 $\alpha$(取值 0 至 1 之間)調節新舊數據的比重:
$$\mathrm{EWMA}_t = \begin{cases} S_0, & t = 0 \\ \alpha\, S_t + (1-\alpha)\,\mathrm{EWMA}_{t-1}, & t > 0 \end{cases}$$當期均線值是「當期價格」與「上一期均線值」的加權組合:$\alpha$ 給當期,$1-\alpha$ 給歷史。留意公式中沒有窗口大小——所有歷史數據都透過遞推項參與計算,只需選定 $\alpha$ 即可。把遞推逐層展開,可見各期價格的權重按幾何級數遞減,這正是「指數加權」一名的由來:
$$\mathrm{EWMA}_t = \alpha \sum_{i=0}^{t-1} (1-\alpha)^i\, S_{t-i} + (1-\alpha)^t\, S_0$$
講者以兩個 $\alpha$ 值示範調節效果。$\alpha = 0.5$ 時,當期價格與歷史均線各佔一半權重,得出的曲線緊貼原價格走勢;$\alpha = 0.1$ 時,當期價格只佔 10% 權重,九成權重落在歷史數據上,平滑效果大增,圖中對應曲線明顯比其他線條圓滑。換言之,$\alpha$ 與 SMA 的 $M$ 調節方向相反:$\alpha$ 越小越平滑,$M$ 越大越平滑。
雙均線交叉:趨勢跟隨策略的訊號
掌握均線計算後,講者把兩條均線組合成完整的趨勢跟隨策略 Trend-following Strategy。基於原價格序列計算兩條 SMA:短期線窗口 3,長期線窗口 20,交易訊號由兩線的交叉點 Crossover 產生。

訊號邏輯如下。當短期線跌穿長期線,意味着短期動量正把價格壓到長期趨勢之下——講者以此作為建立淡倉 Short Position 的訊號,圖中以紅色向下三角標記;若其後價格果然下跌,淡倉獲利,印證動量假設,反之持好倉則會虧損。反過來,當短期線升穿長期線,代表上升動量確立,策略轉持好倉 Long Position,圖中以綠色向上三角標記。
交叉之間的操作同樣有明確規則:只要短期線維持在長期線之上,就繼續持有好倉,不作任何動作。講者總結:交叉的本質是兩線相對大小的符號改變——符號一變即轉倉,符號不變則維持原倉。整個決策只比較兩條線的高低,規則簡單且完全可程式化。
從資金管理角度看,這套規則令持倉永遠只有三種狀態:好倉、淡倉,以及轉倉瞬間的切換;任何時點的倉位方向完全由兩線的相對位置決定,沒有主觀判斷的空間,正正體現量化策略「規則先行、紀律執行」的精神。
講者最後點出策略的歸類:整個過程只運用該資產自身的歷史價格,不涉及與其他股票的比較,因此屬於絕對動量 Absolute Momentum 策略。課程後段會介紹另一類動量策略,橫向比較不同股票的強弱——那是相對維度的動量,角度截然不同。由概念、公式到訊號,本講完成了一個量化策略的最小閉環。
🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
欣利克的看法
- 概念釐清:SMA 的窗口與 EMA 的 $\alpha$ 調節方向相反。SMA 是 $M$ 越大越平滑,EMA 是 $\alpha$ 越小越平滑,初學者容易混淆。更深一層的分別在權重結構:SMA 對窗口外的數據權重即時歸零,EMA 則讓所有歷史數據保留按幾何級數衰減的權重。市面上常見的換算式 $\alpha = 2/(M+1)$ 只是兩者的近似對應,並非數學等價,回測時不能視為可直接互換。
- 常見誤區:把交叉訊號當成預測。均線由歷史價格算出,交叉必然發生在轉勢之後,性質是確認而非預言。在區間橫行市,長短兩線會反覆纏繞,產生連串假訊號,趨勢跟隨策略在這種市況會不斷小額虧損——這是策略結構的固有弱點,不是參數沒調好。
- 觀點比較:絕對動量與相對動量是兩條路線。講者明言本策略只看資產自身價格,屬時間序列動量;學術文獻對此有專門研究(如 Moskowitz、Ooi 與 Pedersen 2012 年關於 Time Series Momentum 的論文),發現多類資產存在自身過去回報預示未來方向的現象。相對動量則橫向比較一籃子資產強弱,兩者假設與組合構建方式不同,評估時不應混為一談。
- 時效提醒:單一示例不等於普遍結論。講者的示範只用 2022 年一年的 GOOG 數據,窗口 3 與 20 純屬教學選擇。截至 2026 年中的市場環境、波動結構與當年已有差異,任何均線參數的表現都會隨標的與時期漂移,應用前必須在足夠長的歷史與樣本外數據上重新驗證。
名詞解釋
- 移動平均線 Moving Average:在固定窗口內滾動計算平均價的統計工具,平滑短期波動以顯示長期趨勢,分 SMA 與 EMA 等變體。
- 簡單移動平均線 SMA:把窗口內 $M$ 個價格點取等權重算術平均,$M$ 越大曲線越平滑、反應越慢。
- 指數移動平均線 EMA:以遞推公式對近期價格賦予較高權重的均線,由參數 $\alpha$ 控制平滑程度,不需指定窗口。
- 均線交叉 Crossover:短期均線上穿或下穿長期均線的事件,雙均線策略以此作為轉倉訊號。
- 趨勢跟隨 Trend Following:順着已確認的趨勢方向持倉、不預測轉勢的策略類型,假設動量自我延續。
- 動量 Momentum:價格走勢自我延續的傾向,本講採用絕對動量口徑,只比較資產自身不同時期的均線。
- 沽空 Short Selling:建立淡倉的操作,預期價格下跌時獲利,是趨勢跟隨策略捕捉下降動量的執行方式。
常見問題 FAQ
移動平均線為何能顯示趨勢?
因為取平均會令窗口內的短期上落互相對銷。原始價格序列充滿暫時性波動,把連續 $M$ 期價格平均後,這些震盪大部份被攤平,剩下來的便是較長期的走向。窗口越長,對銷越徹底,曲線越平滑,但對最新變化的反應也越慢。
SMA 與 EMA 應該用哪一條?
兩者沒有絕對優劣,分別在權重設計:SMA 對窗口內所有數據一視同仁,EMA 給近期數據較高權重、對價格變化反應較快。要緊貼市況可選 EMA,要穩定平滑可選較長窗口的 SMA。講者的立場是兩者皆為工具,參數選擇取決於想要的平滑程度,並須針對個別標的回測驗證。
均線交叉訊號在橫行市有效嗎?
效果不佳。雙均線策略的假設是趨勢會延續;在區間橫行市,價格沒有單向動能,長短兩線會反覆交叉,產生連串假訊號,每次進出都伴隨細額虧損與交易成本。趨勢跟隨策略的盈利結構本來就是靠少數大趨勢覆蓋多數小虧損,橫行期正是其弱點所在。
窗口長度 $M$ 或參數 $\alpha$ 應如何選擇?
兩者都是由用戶自訂的輸入,取決於想要的平滑程度:$M$ 越大或 $\alpha$ 越小,曲線越平滑但越滯後;反之越靈敏但噪音越多。講者強調沒有放諸四海皆準的設定——技術指標高度依賴個別證券,參數必須因應標的特性調校,並以歷史數據回測及樣本外驗證檢驗其穩健性。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: