在量化交易中,線性回報(simple return)和對數回報(log return)都是常見用來衡量資產回報率的指標。很多量化面試考官開頭會問這條問題去測試面試者是否曾經有做過交易,特別是returns sensitive的交易類型,例如pairs trading / stat arb。
這兩種回報計算方法各有優缺點,適用於不同的情境。以下是對這兩種回報的詳細對比:
線性回報表示資產價格在一段時間內的百分比變化,計算公式如下:

其中,R(t) 是第 t 期的回報率,P(t) 是第 t期的資產價格,P(t-1) 是第 t-1 期的資產價格。
對數回報表示資產價格在一段時間內的對數變化,計算公式如下:

其中,r(t)是第 t 期的對數回報率, ln 表示自然對數。


1. 更適合於用於金融模型和風險管理
對數回報(log returns)通常比線性回報(simple returns)更接近於正態分佈(normally distributed),這是因為
- 對數回報能夠更好地處理金融數據中的極端值和波動性。
- 對數回報 比 線性回報 有對稱性:
如果第一天simple return 是 -10%,第二天simple return 是 +10%,
兩天累計的simple return 是 (1-10%) X (1+10%) - 1 = 0.9 X 1.1 - 1 = -0.01
即是如果你有10,000 HKD 本金,經過兩天交易之後,你最後只得 9,900 HKD
如果第一天log return 是 -10%,第二天log return 是 +10%,
兩天累計的 log return 是 (-10%) + (10%) = 0
即是如果你有10,000 HKD 本金,經過兩天交易之後,你最後會保持 10,000 HKD
2. 有更好的計算精度(precision)和避免溢出問題
使用Python時,對數運算在數值計算中通常比直接的除法計算更穩定(numerically stable)。當涉及到非常小或非常大的數值時,直接計算線性回報可能會導致數值溢出或精度損失,而對數回報則能有效避免這些問題。
1. 線性回報易於理解
線性回報的計算和理解相對簡單,直接反映了資產價格的變化百分比,可以快速了解資產的表現。對數回報的值並不能直接反映實際的百分比變化,需進一步轉換才能得到具體的百分比回報。
2. 特別在做 pair trading 時需要使用線性回報(Simple Return)
例子:
- 在早上10:00時,長倉股票A(買入股價為100),短倉股票B(沽出股價為200)
(假設股票A長倉付出的資金和股票B短倉得到的資金是一樣)
(以及忽略交易成本、滑點、點差、佣金成本、印花稅)
- 在下午2:00時,股票A的股價為103,股票B的股價為204,將股票A長倉和股票B短倉同時平倉
方法一: 使用線性回報:
股票A長倉的線性回報為: (103/100) - 1 = 0.03
股票B短倉的線性回報為: -[(204/200) - 1] = -0.02
總計線性回報為: [0.03 + (-0.02)] = 0.01 = +1%
方法二: 使用對數回報:
股票A長倉的對數回報為: ln(103) - ln(100) = 0.029558802
股票B短倉的對數回報為: ln(200) - ln(204) = -0.019802627
總計對數回報為: [0.029558802 + (-0.019802627)] = 0.009756175
再轉成總計線性回報為: exp(0.009756175) - 1 = 0.009803922 = +0.9803922%
由此可見,如果用對數回報,計算Profit and Loss是有誤差的,以上的例子只是一個trade,如果pair trading一天做100個trade,誤差會累積上去,最後誤差會變得很大。
假設100個trade的都是和以上的例子一樣(+1% vs +0.9803922%)
用方法一的累計回報是 (1+0.01)^100 - 1 = 1.704813829 = +170.48%
用方法二的累計回報是 (1+0.009803922)^100 - 1 = 1.652804798 = +165.28%
所以做pair trading時務必要用線性回報。