投資組合組成與回測

Python 投資組合風險管理入門

Dakota Wixom

Quantitative Analyst | QuantCourse.com

計算投資組合報酬

投資組合報酬公式:

$$ R_p = R_{a_1} w_{a_1} + R_{a_2} w_{a_2} + ... + R_{a_n} w_{a_1} $$

  • $ R_p$:投資組合報酬
  • $ R_{a_n}$:資產 n 的報酬
  • $ w_{a_n}$:資產 n 的權重
Python 投資組合風險管理入門

假設 StockReturns 是股票報酬的 pandas DataFrame,你可以如下計算一組權重的投資組合報酬:

import numpy as np
portfolio_weights = np.array([0.25, 0.35, 0.10, 0.20, 0.10])
port_ret = StockReturns.mul(portfolio_weights, axis=1).sum(axis=1)
port_ret
Date
2017-01-03    0.008082
2017-01-04    0.000161
2017-01-05    0.003448
         ...
StockReturns["Portfolio"] = port_ret
Python 投資組合風險管理入門

在 Python 中建立等權重投資組合

假設 StockReturns 是股票報酬的 pandas DataFrame,你可以如下計算一個等權重投資組合的報酬:

import numpy as np
numstocks = 5
portfolio_weights_ew = np.repeat(1/numstocks, numstocks)
StockReturns.iloc[:,0:numstocks].mul(portfolio_weights_ew, axis=1).sum(axis=1)
Date
2017-01-03    0.008082
2017-01-04    0.000161
2017-01-05    0.003448
         ...
Python 投資組合風險管理入門

在 Python 中繪製投資組合報酬

在 Python 中繪製日報酬:

StockPrices["Returns"] = StockPrices["Adj Close"].pct_change()
StockReturns = StockPrices["Returns"]
StockReturns.plot()

Python 投資組合風險管理入門

繪製投資組合累積報酬

要繪製多個投資組合的累積報酬:

import matplotlib.pyplot as plt
CumulativeReturns = ((1 + StockReturns).cumprod() - 1)
CumulativeReturns[["Portfolio","Portfolio_EW"]].plot()

Python 投資組合風險管理入門

市值加權

Python 投資組合風險管理入門

市值加權

Market capitalization(市值):公司流通在外股票的市價總值。

也稱為 Market cap(市值)

Python 投資組合風險管理入門

市值加權投資組合

要計算某檔股票 n 的市值權重:

$$ w_{mcap_n} = \frac{mcap_n}{ \sum_{i=1}^n mcap_i } $$

Python 投資組合風險管理入門

在 Python 中計算市值權重

在 Python 中計算市值權重,假設你已有各公司市值資料:

import numpy as np
market_capitalizations = np.array([100, 200, 100, 100])
mcap_weights = market_capitalizations/sum(market_capitalizations)
mcap_weights
array([0.2, 0.4, 0.2, 0.2])
Python 投資組合風險管理入門

一起來練習吧!

Python 投資組合風險管理入門

Preparing Video For Download...