回報、風險與年化的實戰計算:由價格到夏普比率|Quant Theory 第 8 講筆記

第 8 課・共 34 課

⚠️ 本站內容僅作教育用途,不構成投資建議。投資涉及風險,作出任何投資決定前請諮詢持牌專業人士。
目錄

這是 Liu Peng 大學級量化交易課程第 3 講第二段的筆記。上一講建立了風險與回報的理論框架(詳見風險與回報|第 7 講),本講落到實作層面:用 Python 親手計算回報與風險、推導年化 Annualization 的公式,最後以真實股票數據示範夏普比率的完整計算流程。

學習重點

詳細筆記

複利驗證:相同平均回報、不同終值

講者先重溫上一講的例子:兩條人手構造的回報序列 Asset1 與 Asset2,算術平均同為 0.16,但 Asset2 的標準差明顯較高。實作上,他把兩條序列以鍵值對字典轉成 pandas 的 DataFrame,之後用 std()mean() 一行算好兩列的風險與平均回報。

接着是財富路徑的計算。把回報加 1 變成 $1+R$ 格式後,每期財富就是把之前所有期的 \$1+r$ 累乘起來:

$$W_t = W_0 \prod_{i=1}^{t} (1 + r_i)$$

假設本金 100 元,用累乘函數(cumprod)一步算出每個時點手上有多少錢。結果與理論一致:Asset2 的平均回報與 Asset1 相同,但終值明顯較低。

兩項平均回報相同的資產,波動較大的 Asset2 終值財富明顯低於 Asset1(截圖出自原片(Liu Peng))

講者強調這雖是假設性例子,卻清楚展示風險的影響:複利之下,大上大落的回報路徑會侵蝕終值。

由價格到回報:四種 Python 寫法

實務上我們手上的原始資料是資產價格,不是回報。單期回報由價格計算:

$$R_{t-1,t} = \frac{S_t}{S_{t-1}} - 1$$

講者示範了四種等價寫法,各有學習價值:

  1. 逐期手算:相鄰兩個價格相除再減 1。直觀但繁瑣,只適合驗算。
  2. NumPy 一次過:取出「後段價格」與「前段價格」兩條陣列整列相除,一次算好所有期數的 $1+R$。
  3. iloc 配合 values:用 iloc 按位置取材時,兩條序列的索引分別是 0、1 與 1、2,直接相除會因索引錯位對錯行;解法是取出 .values 忽略索引,只對數值運算。這個索引對齊陷阱是 pandas 新手最常見的 bug 來源。
  4. shift 平移:把價格列向下平移一格,索引保持 0、1、2 對齊,整列相除即可。亦可用內建的 pct_change 函數,一行完成同一件事。

四種方法結果完全相同:工具層面有多條路,底層數學只有一條。

終值回報:累乘的兩種叫法

由單期回報算整段時期的終值回報 Terminal Return,本質是複利累乘:

$$R_{total} = \prod_{t=1}^{n} (1 + r_t) - 1$$

NumPy 寫法是先加 1、累乘、再減 1;pandas 寫法更簡潔,直接對整列叫 prod(),按列把所有元素相乘,最後減 1。兩者結果一致。

年化回報:複利次方推導

年化 Annualization 的目的,是把不同時間尺度的數字統一到「一年」這把尺上,方便比較。回報的年化遵循複利邏輯——假設未來每期的回報都複製當期的單期回報 $r_p$,一年共 $N$ 期,則:

$$R_{ann} = (1 + r_p)^{N} - 1$$

代入不同周期:

講者以月回報 1% 為例:$(1.01)^{12} - 1 \approx 12.68\%$,而不是簡單的 $1% \times 12 = 12%$——複利令年化結果略高於線性放大。季回報 5% 年化後約 21.55%,同樣高於 \$5% \times 4 = 20%$。

年化回報按複利計算:月回報取 12 次方、季回報取 4 次方;下方是波動率的平方根換算(截圖出自原片(Liu Peng))

年化風險:平方根法則

風險的年化邏輯完全不同。假設每日回報獨立同分佈,一年回報的方差是日方差按日數累加:

$$\sigma_{ann}^2 = 252 \, \sigma_d^2$$

但我們慣用的風險單位是標準差而非方差,兩邊開方後:

$$\sigma_{ann} = \sigma_d \times \sqrt{252}$$

講者特別提醒:這裡不是取 252 次方,而是乘以 $\sqrt{252}$,因為我們活在標準差的單位裡。舉例:日波動率 0.1%,年化後約 $0.001 \times \sqrt{252} \approx 1.59%$。平方根的寫法亦可以是取 0.5 次方,兩者等價。平方根法則背後的假設是各期回報獨立——若回報有自相關,這個換算會有偏差。

夏普比率:無風險基準改變排名

講者用一個簡例說明為何要引入無風險利率 Risk-Free Rate。設資產一回報 5%、波動率 20%,資產二回報 10%、波動率 50%,無風險利率 3%。

單看回報除風險:資產一 $0.05/0.20 = 0.25$,資產二 \$0.10/0.50 = 0.20$,資產一似乎較好。但扣除基準後計算夏普比率:

$$S = \frac{R - R_f}{\sigma}$$

資產一 $(0.05-0.03)/0.20 = 0.10$,資產二 $(0.10-0.03)/0.50 = 0.14$——排名逆轉,資產二反而較優。

扣除無風險利率後,兩項資產的風險調整回報排名逆轉(截圖出自原片(Liu Peng))

原因很直觀:資金泊在無風險資產已有 3% 落袋,承擔風險只為賺取超出這條線的部分。資產一的回報僅比基準高 2 個百分點,承擔風險換來的超額回報其實很薄。

真實數據實戰:Apple 對 Google

最後講者用 yfinance 下載 Apple 與 Google 由 2003 年初起計的經調整收市價,走完整條流程。幾個實作要點:

年化回報方面,講者示範了幾何平均的推導。先把整段時期的回報累乘得終值回報,再開 $n$ 次方還原成每日的幾何平均回報:

$$\bar{r}_d = \left( \prod_{t=1}^{n} (1 + r_t) \right)^{1/n} - 1$$

再取 252 次方年化。兩步亦可合併為一行:累乘後直接取 $252/n$ 次方再減 1:

$$R_{ann} = \left( \prod_{t=1}^{n} (1 + r_t) \right)^{252/n} - 1$$

真實數據上先以幾何平均還原每日回報,再取 252 次方年化;最下一行是合併寫法(截圖出自原片(Liu Peng))

最後把年化回報減去無風險利率(講者假設 3%)得超額回報 Excess Return,再除以年化波動率,得出兩隻股票的夏普比率作比較——以該段數據計,Apple 的風險調整表現明顯優於 Google。至此,由價格到回報、由日度到年化、由絕對回報到風險調整回報的完整計算鏈已經打通。

🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:

ZA Bank 邀請碼 P20923 —— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。 立即開戶 → (聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)

欣利克的看法

名詞解釋

常見問題 FAQ

年化回報為何要用次方而非直接乘?

因為回報按複利滾存:每日賺到的錢會成為下一日的本金。日回報 $r_d$ 滾存 252 日的結果是 $(1+r_d)^{252}-1$,而不是 $r_d \times 252$。月回報 1% 直接乘 12 得 12%,複利計算則是約 12.68%,周期越長、單期回報越大,兩者差距越明顯。

為何波動率年化是乘 $\sqrt{252}$ 而非 252?

假設每日回報獨立,方差會隨時間線性累加,一年方差是日方差的 252 倍。但我們用的是標準差,標準差是方差的平方根,所以只需乘 $\sqrt{252} \approx 15.87$。若回報存在自相關(例如動能或均值回歸特徵),這個換算會有偏差。

算術平均回報相同,為何複利終值可以不同?

累乘之下,虧損與盈利不對稱:跌 50% 之後要升 100% 才能回本。波動越大的路徑,這種「波動拖累」越明顯,所以即使算術平均一樣,波動大者的幾何平均(即複利終值)會較低。年化回報用幾何平均計算,正是為了反映這一點。

為何比較資產時要扣無風險利率?

因為資金泊在無風險資產已有基本回報,承擔風險的目的只是賺取超出這條基準線的部分。本講的例子顯示,不扣基準時資產一的回報風險比較高,扣除 3% 無風險利率後排名逆轉——風險調整後的比較才反映承擔風險的真正回報。

原影片

本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看:

來源:https://www.youtube.com/watch?v=d9CL8A-XXx4

🏦 ZA Bank 開戶優惠

本站所有內容免費提供。多使用網站的推薦碼,就是對我們繼續製作優質內容的最大鼓勵和支持 🙏

去 ZA Bank 開戶,享價值 HKD 2,000 迎新獎賞,仲有機會享 USD 30 指定美股兌換券!

  • 💛 全線上開戶,無需前往分行
  • 💛 無最低存款要求,零賬戶管理費
  • 💛 24x7 銀行服務

專屬邀請碼:P20923

立即開戶 → (聯盟連結)