在上一篇文章中,我们介绍了信息系数(IC)和有效宽度的概念,解释了为什么要尽可能多地独立*。在本篇文章,我们将通过*不同数量股票的投资组合来扩展其中详述的概念,以进一步探索系统性风险的影响。
import numpy as npimport matplotlib.pyplot as plt
我们先来看看这两条基本的原则:
你愿意其他人对你的算法进行投资
投资你算法的机构不太可能将它百分之百的资金都投资于你身上。换一句话说,你的算法将成为很多算法组合中的一个。
第二个假设的推论就有些微妙了。你的高夏普算法其实会是某个算法组合之一,这点会有什么影响呢?理解这点的关键在于beta和部门暴露遵从以下的数学假设:
在一个投资组合中,股票的个体风险可以被分散,而共同风险却不行。
:Beta和部门风险是共同因子,即它们是所有股票共有的风险特征。公共因子的风险敞口在算法组合中无法被分散。如果我们的算法中存在公共因子风险,分配者往往不会无法为你的算法分配大量资金。具有公共因子风险的算法组合可能会导致投资组合层面上压倒性的共同因子风险—— 这正是分配者所厌恶的。如果我们想获得大量资金的分配,那么随着时间的推移,我们都必须始终保持较低的beta和部门风险。
我们先来建议单因子模型来看看我们的直觉准不准。
$$r_i = \alpha_i + \beta_i r_m + \epsilon_i$$
$\alpha_i$ 是回归的截距, $\epsilon_i$ 是回归的残差, 而 $r_m$ 是市场收益。 这儿有个重要的假设: $\epsilon_i$s 与每一只股票和市场表现都是独立的。
在这种情况下,每只股票的风险(用方差来衡量)为:
$$\sigma_i^2 = \beta_i^2 \sigma_m^2 + \sigma_{\epsilon_i}^2$$
股票方差被*成公共风险 $\beta_i^2\sigma_m^2$ 和独有风险 $\sigma_{\epsilon_i}$。公共风险是市场风险驱动的股票风险,具体大小还取决于股票与市场的beta。独有风险是每一只股票具有的特定风险。
让我们来看一看两个风险*的例子吧~
def stock_risk(beta, market_vol, idio_vol):common_risk = (beta**2)*(market_vol**2)specific_risk = idio_vol**2total_risk = common_risk + specific_riskreturn total_risk, common_risk/total_risk
# Betasb1 = 1.2b2 = 1.1# Market volatilitymarket_vol = 0.15# Idiosyncratic volatilitiesidio_vol_1 = 0.10 idio_vol_2 = 0.07
total_1, pct_common_1 = stock_risk(b1, market_vol, idio_vol_1)total_2, pct_common_2 = stock_risk(b2, market_vol, idio_vol_2)print ("Stock 1 risk (annualized standard deviation): %0.4f " % np.sqrt(total_1))print ("Stock 1: percent of total risk due to common risk: %0.4f " % pct_common_1)print ("\nStock 2 risk (annualized standard deviation): %0.4f " % np.sqrt(total_2))print ("Stock 2: percent of total risk due to common risk: %0.4f " % pct_common_2)
Stock 1 risk (annualized standard deviation): 0.2059 Stock 1: percent of total risk due to common risk: 0.7642 Stock 2 risk (annualized standard deviation): 0.1792 Stock 2: percent of total risk due to common risk: 0.8475
这只是每只股票各自风险的细分。我们还可以将它们做成一个投资组合,以便了解它们的综合波动率将如何受到共同因子风险的影响。
现在我们来假设你有两只股票,它们的权重分别是 $w_1$ 和 $w_2$。 资产组合在单因子模型下的风险为:
$$\sigma_{\Pi}^2 = \overbrace{\sigma_m^2\left( w_1^2\beta_1^2 + w_2^2\beta_2^2 + 2w_1w_2\beta_1\beta_1 \right)}^{\text{common risk}} + \overbrace{w_1^2\epsilon_1^2 + w_2^2 \epsilon_2^2}^{\text{specifc risk}}$$
这是最简单的资产组合因子风险的例子了:一个因子,连个资产。但我们已经可以用它来验证直觉了。
# The weights for each security in our portfoliow1 = 0.5w2 = 0.5
def two_stocks_one_factor(w1, w2, b1, b2, market_vol, idio_vol_1, idio_vol_2):common_risk = (market_vol**2)*(w1*w1*b1*b1 + w2*w2*b2*b2 + 2*w1*w2*b1*b2)specific_risk = w1*w1*idio_vol_1**2 + w2*w2*idio_vol_2**2total_risk = common_risk + specific_riskreturn total_risk, common_risk/total_risk
total, pct_common = two_stocks_one_factor(w1, w2, b1, b2, market_vol, idio_vol_1, idio_vol_2)print ("Portfolio risk (annualized standard deviation): %0.4f " % np.sqrt(total))print ("Percent of total risk due to common risk: %0.4f" % pct_common)
Portfolio risk (annualized standard deviation): 0.1830 Percent of total risk due to common risk: 0.8887
你可能已经注意到,由于公共因子风险的存在,投资组合中的风险要大于两个组成部分的共同风险的加权和。 重复本文的重点:在投资组合中,股票独有风险能分散,而公共因子风险则不能。
但是,我们仍有手段来消除公共因子风险。下面我们来对冲beta风险。
w2 = -w1*b1/b2 # set weight 2 such that the portfolio has zero betatotal, pct_common = two_stocks_one_factor(w1, w2, b1, b2, market_vol, idio_vol_1, idio_vol_2)print ("Portfolio risk (annualized standard deviation): %0.4f " % np.sqrt(total))print ("Percent of total risk due to common risk: %0.4f" % pct_common)
Portfolio risk (annualized standard deviation): 0.0629 Percent of total risk due to common risk: 0.0000
看,我们通过beta对冲完美得消除了公共因子风险。
如果 $X$ 是一列n维随机变量, $X_1,\dots,X_n$, $c$ 是一列常量系数, 那么加权方差 $c'X$ 是:
$$\text{Var}(c'X) = c'\Sigma c$$
$\Sigma$ 是 $X$ 的协方差矩阵。
在我们的应用里, $c$ 是我们的股票权重向量 $w$ , $\Sigma$ 是股票收益的协方差矩阵。
$$\sigma_{\Pi}^2 = w' \Sigma w$$
正如我们在单股票风险*中的那样,我们可以将协方差矩阵*成公共风险和独有风险。
$$\Sigma = BFB' + D$$
因此
$$\sigma_{\Pi}^2 = w'(BFB' + D)w$$$$\sigma_{\Pi}^2 = w'BFB'w + w'Dw$$
即进行下列计算:
\begin{equation} \sigma_{\Pi}^2 = \overbrace{ \begin{bmatrix} w_1 & w_2 \end{bmatrix} \begin{bmatrix} \beta_{1} \\ \beta_{2} \end{bmatrix} \sigma_m^2 \begin{bmatrix} \beta_{1} & \beta_{2} \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} }^{\text{common risk}} + \overbrace{\begin{bmatrix} w_1 & w_2 \end{bmatrix} \begin{bmatrix} \epsilon_1^2 & 0\\ 0 & \epsilon_2^2 \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \end{bmatrix}}^{\text{specific risk}} \end{equation}
完成此矩阵乘法后,我们就会得到:
$$\sigma_{\Pi}^2 = \overbrace{\sigma_m^2\left( w_1^2\beta_1^2 + w_2^2\beta_2^2 + 2w_1w_2\beta_1\beta_1 \right)}^{\text{common risk}} + \overbrace{w_1^2\epsilon_1^2 + w_2^2 \epsilon_2^2}^{\text{specifc risk}}$$
当然,我们可以将CAPM拓展到包含不止有市场beta的额外风险。我们可以假设股票总共存在m种公共风险:
$$r_i = \alpha_i + \beta_{1,i} f_1 + \dots + \beta_{m,i} f_m + \epsilon_i$$
或者更简明的形式:
$$r_i = \alpha_i + \sum_{j=1}^m \beta_{j,i} f_j + \epsilon_i$$
亦或者,考虑所有的股票 $i$, 从 1 到 N, 在一个时期 $t$ 内用更简明的1形式:
$$r = \alpha + Bf + \epsilon$$
$r$ 是 Nx1 的收益向量, $B$ 是 Nx$m$ 的因子beta矩阵, $f$ 是 mx1 的因子收益, 而 $\epsilon$ 是 Nx1 的独有收益向量。最终:
$$\sigma_{\Pi}^2 = w'BFB'w + w'Dw$$
$B$ 是 Nx$m$ 的因子beta矩阵, $F$ 是 $m$x$m$ 的因子收益协方差矩阵, $D$ 是一个 NxN 矩阵, 在 $\epsilon_i$ 的位置上是方差, 其他位置是0。
根据这个结果,假设我们通过一个风险模型得到了 $B$, $F$, 和 $D$ 矩阵,然后我们就能计算我们的投资组合风险和公共风险所占的比例。
即便不需要通过风险模型,我们也能用直觉去感受算法投资组合的风险是怎么样的。
当每个算法具有非零的公共风险时,算法的投资组合会如何表现?Garvey, Kahn, 和S*i的一篇论文The Dangers of Diversification给了我们灵感。他们假设每个算法都有一定的公共风险预算,这个预算被定义为总风险中的公共风险比率。
在这种情况下,我们假设所有的算法有一样的预算,且它们之间公共风险的协方差为1。这有点像我们刚才单股票模型。
def portfolio_risk_decomposition(budget=0.2, correl=1.0, algo_count=2, algo_total_risk=0.04):N = algo_countalgo_common_risk = budget*(algo_total_risk**2)algo_idio_risk = algo_total_risk**2 - algo_common_riskw = 1./Ncovar = correl*algo_common_riskcommon_risk = N*w*w*algo_common_risk + (N*N - N)*w*w*covaridio_risk = algo_idio_risk*wtotal_risk = common_risk + idio_riskreturn total_risk, common_risk/total_risk
a, b = portfolio_risk_decomposition(budget=0.2, algo_count=20, correl=1.0, algo_total_risk=0.04)print ("Portfolio total risk: %.4f " % np.sqrt(a))print ("Portfolio percent of common risk: %.4f " % b)
Portfolio total risk: 0.0196 Portfolio percent of common risk: 0.8333
algos = np.linspace(1,20)plt.figure(figsize=(16,8))plt.plot(algos,portfolio_risk_decomposition(budget=0.2, correl=1.0, algo_count=algos)[1])plt.plot(algos,portfolio_risk_decomposition(budget=0.4, correl=1.0, algo_count=algos)[1])plt.ylim([0,1]);plt.title('Percent of Portfolio Risk due to Common Risk')plt.xlabel('Number of Algos in Portfolio')plt.ylabel('Percent of Portfolio of Algos Risk due to Common Risk')plt.legend(['20% Single Algo Common Risk Budget', '40% Single Algo Common Risk Budget']);
从上图中我们可以看到,从分配者的角度来看,一个“小”预算允许20%的单个算法总风险由公共风险驱动,导致这20个算法的投资组合的公共风险为83%! 理想情况下,分配者还是希望单个算法具有零公共因子风险。
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程