因子模型是一种用其他资产的收益的线性组合来解释某种资产收益的方法。它的一般形式是:
$$Y = \alpha + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_n X_n$$
看上去很眼熟,对吗?因为它的形式和线性回归拟合模型相同。事实上, $X$既能表示资产收益,也能代表其他观测指标。
一个资产关于另一个资产的beta,就是上述模型中的 $\beta$ 。
举个例子,如果我们将特斯拉(TSLA)的股票收益率和标准普尔500指数(S&P500)收益率用 $Y_{TSLA} = \alpha + \beta X$ 模型做回归,得到的 $\beta$ 值就是TSLA对于S&P500的 $\beta$ 暴露。
当我们用 $Y_{TSLA} = \alpha + \beta X_{SPY} + \beta X_{AAPL}$ 模型来回归,我们会得到两个 $\beta$:一个是TSLA对于S&P500的暴露,另一个是TSLA对于AAPL的暴露。
如果不特别说明,通常我们提到一支股票的 $\beta$ 时,指的都是它关于市场(例如S&P500)的暴露。
下面我们取TSLA和SPY的2014年的价格数据进行分析。SPY是标普500ETF,可反映S&P500的变动。
# 导入库import numpy as npfrom statsmodels import regressionimport statsmodels.api as smimport matplotlib.pyplot as pltimport math
# 获取目标时间段的证券价格 start = '2014-01-01'end = '2015-01-01'asset = get_pricing('TSLA', fields='price', start_date=start, end_date=end)benchmark = get_pricing('SPY', fields='price', start_date=start, end_date=end)# 我们用百分比变化来计算收益# 去掉第一个(索引为0)元素,因为它的值是NAr_a = asset.pct_change()[1:]r_b = benchmark.pct_change()[1:]
我们以SPY为基准(绿线),TSLA是我们观测的资产。可以看到,如果只是简单地将它们放在一张折线图中,我们并不能从杂乱无章的线条交错中看出SPY与TSLA的关系。
r_a.plot()r_b.plot()plt.ylabel("Daily Return")plt.legend();
但是如果我们借助回归这个有力武器,我们就能得到以SPY为自变量,以TSLA为因变量的形如 $Y_{TSLA} = \alpha + \beta X_{SPY}$ 的回归方程,并从而得到alpha和beta。
alpha: 0.00108062811902
beta: 1.92705010047
具体过程请参考以下代码:
X = r_b.values # 提取值,忽略时间列Y = r_a.valuesdef linreg(x,y):# 我们使用sm.add_constan给x加入一列常向量1,从而更好地拟合模型中的alphax = sm.add_constant(x)model = regression.linear_model.OLS(y,x).fit()# 移除我们之前增加的常数x = x[:, 1]# 返回回归模型得到的截距项和斜率return model.params[0], model.params[1]alpha, beta = linreg(X,Y)
以SPY为横轴,以TSLA为纵轴,绘制回归方程,可以看到曲线较好地拟合了样本点。
X2 = np.linspace(X.min(), X.max(), 100)Y_hat = X2 * beta + alphaplt.scatter(X, Y, alpha=0.3) # Plot the raw dataplt.xlabel("SPY Daily Return")plt.ylabel("TSLA Daily Return") # Add the regression line, colored in redplt.plot(X2, Y_hat, 'r', alpha=0.9);
更具体地说,$\beta$ 代表你所持有的资产具有多大的风险暴露。如果一个资产对于S&P500具有较高的beta暴露,那就意味着这是一柄双刃剑:当市场走强时,这个资产上涨幅度明显;但当市场走弱时,它的表现会非常糟糕。高beta意味着高风险。实际上这无异于做一个没有把握的赌博。
人们大都是风险厌恶者,我们喜欢使投资策略对尽可能多的因子保持低beta。这样的话,我们的收益就几乎都来源于回归模型中的alpha,且与因子的变化保持独立。多么诱人的场面!这意味着我们的策略几乎不受市场阴晴的影响:在熊市的大股灾中,我们的资产仍能保持坚挺。这种策略尤其吸引资金量庞大的投资者(例如捐赠基金和主权财富基金)。
减少因子暴露的过程被称作风险管理。对冲是实际应用中最有效的风险管理手段之一。
假设我们已经知道我们的投资组合与市场之间存在下列关系:
$$Y_{portfolio} = \alpha + \beta X_{SPY}$$
如何使我们的投资组合与市场行情保持独立呢?对冲的方法是再持有SPY的空头来消除风险。持有空头的头寸为 $-\beta V$,$V$ 是我们投资组合的价值。为什么这样就能消除风险呢?我们投资组合的收益为 $\alpha + \beta X_{SPY}$,持有的SPY空头使得总收益为 $\alpha + \beta X_{SPY} - \beta X_{SPY} = \alpha$ ,正好是alpha。收益中不含beta,即市场表现不影响我们的收益,于是风险对冲成功。
如果一个策略的 $\beta$ 能在一段连续时间内保持为零,那么我们称它是市场中性的。但当时间改变时,我们先前估测的 $\beta$ 一般很难与此时实际的 $\beta$ 相一致。这样,我们就无法做到每时每刻精确调整SPY的空头头寸,更不要说完美对冲风险了。这个问题的解决办法我们今后有机会再介绍,本文中理解beta和对冲的含义就足够啦。
我们已经学习了对冲的原理,下面我们以TSLA和SPY为例子来实现对冲。我们构建TSLA和SPY的投资组合,其中TSLA头寸为1(多头),SPY头寸为$-\beta$(空头)。
下面用代码实现,从图中我们可以看到,投资组合与TSLA的走势很接近,这是因为我们选取的空头标的价格变化相对并不明显。或者说,这段时期市场波动并不显著,震荡行情时对冲效果会更明显。
# 构造投资组合实现对冲portfolio = -1*beta*r_b + r_aportfolio.name = "TSLA + Hedge"# 在之前的折线图中增加这个投资组合的曲线portfolio.plot(alpha=0.9)r_b.plot(alpha=0.5);r_a.plot(alpha=0.5);plt.ylabel("Daily Return")plt.legend();
从上张图片中,我们很难看清楚投资组合和TSLA的差别。但我们可以从它们的平均收益和波动率(用平均值和标准差来衡量)来看看差别。
means: 0.00108062811902
volatilities: 0.0272298767724
means: 0.00202262496904
volatilities: 0.0304875405804
可以看出,对冲构造的投资组合是以牺牲平均收益为代价来降低波动率,从而实现风险管理。
接下来我们用下一年的数据来看看:在样本外,基于历史数据构造的投资组合表现如何。
# 获取2014年的历史数据,估测alpha和betastart = '2014-01-01'end = '2015-01-01'asset = get_pricing('TSLA', fields='price', start_date=start, end_date=end)benchmark = get_pricing('SPY', fields='price', start_date=start, end_date=end)r_a = asset.pct_change()[1:]r_b = benchmark.pct_change()[1:]X = r_b.valuesY = r_a.valueshistorical_alpha, historical_beta = linreg(X,Y)# 获得2015年上半年的数据:start = '2015-01-01'end = '2015-06-01'asset = get_pricing('TSLA', fields='price', start_date=start, end_date=end)benchmark = get_pricing('SPY', fields='price', start_date=start, end_date=end)# 重复处理过程r_a = asset.pct_change()[1:]r_b = benchmark.pct_change()[1:]X = r_b.valuesY = r_a.valuesalpha, beta = linreg(X,Y)# 用基于历史数据的beta构造投资组合,计算它在2015年上半年的alpha和betaportfolio = -1*historical_beta*r_b + r_aP = portfolio.valuesalpha, beta = linreg(X,P)# 将投资组合与TSLA在2015年上半年的走势绘图portfolio.name = "TSLA + Hedge"portfolio.plot(alpha=0.9)r_a.plot(alpha=0.5);r_b.plot(alpha=0.5)plt.ylabel("Daily Return")plt.legend();
alpha: 0.00108062811902
beta: 1.92705010047
alpha: 0.00108062811902
beta: 5.6898930012e-16
alpha: 0.00114816439781
beta: 1.04339843544
alpha: 0.00114816439781
beta: -0.883651665033
我们可以看到,在2015年上半年,“旧”投资组合无法像在历史数据中那样完全对冲beta风险。这验证了beta随时间会改变,空头头寸也应当时刻做相应调整。
当市场表现尚可时,对冲可能会减少我们的收益,但这是可以接受的。如果我们的策略波动率较小,我们不妨给它加杠杆,直到收益重又上升到原始值。在这种情况下,我们新策略的收益也比原本的beta暴露策略更为稳定。
总的来说,高beta策略往往具有“诱人犯罪”般的吸引力,因为它们在市场增长期间能享有极高的回报。但从长远来看,这样并不明智,因为它们将在经济衰退期间遭受极其可怕的损失。
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程