前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【温故】量化投资之资本资产定价模型(CAPM)

【温故】量化投资之资本资产定价模型(CAPM)

作者头像
数说君
发布于 2018-04-04 06:25:33
发布于 2018-04-04 06:25:33
2.4K0
举报
文章被收录于专栏:数说工作室数说工作室

最近股灾,有人说,这将开启中国对冲基金的黄金时代,有人说,单炒股已经是死路,宏观对冲、大类资产配置才能立于不败之地,这是宏观对冲基金最好的时代,还有人说,量化投资的时代真正到来了。。。

为纪念这次股灾,为未来更好的应对风险,数说君重发量化投资系列,跟大家一起学习交流。

资本资产定价模型(CAPM),被称为现代金融学的基石——做量化投资,不得不从这里开始。

量化投资之资本资产定价模型

(CAPM)

目录

一、前言

二、CAPM模型

1. 切点组合、分离定理与市场组合

2. 资本市场线

3. 证券市场线(资本资产定价模型)

4. 超额收益形式的CAPM模型

三、后记:quant的未来

附:量化投资系列

一、前言

数说君在《量化投资之动量反转》中曾经介绍过(微信公众号“数说工作室”中回复dlfz),现代金融学的两大基石是有效市场假说(EMH)和资本资产定价模型(CAPM)。有效市场假说是为了方便研究金融市场而对经济世界做的一个假想,而资本资产定价模型就基于这个假设:

(1)这个模型是干嘛的?

它是为了研究资本的收益与风险之间的定量关系。

(2)为什么要研究这个?

我们知道,这个世界有一个基本规律:风险越高、收益越高。当一个产品风险低而收益又高的时候,一定会有大量资金涌入瓜分掉收益。

因此,通过研究资本收益与风险之间的定量关系,我们可以判断这只股票价格的“合理性”,如果风险太大而价格又很低、或者风险太小而价格又太高,说明其价格不合理,有很大变动的可能。此外,还可以估计各种宏观经济变化对股票价格的影响。

二、CAPM模型

1. 切点组合、分离定理与市场组合

我们先把前言中说的“研究资本收益与风险之间的定量关系”这个东西放一放。先从金融市场上两个很重要的问题入手——每一天每一刻,投资人们无不在绞尽脑汁思考的两个问题——(1)有没有一个收益最大、风险最小的投资组合?(2)它在哪里?

为了搞清楚这个问题,经济学家们简化了这个世界,在这个简化的世界中,经济学家们找到了这个最优的投资组合,它被称为切点组合。现在,我们就来聊一聊这个最优的“切点组合”。

要了解它的原理,我们需要走进经济学家威廉夏普等构建的简化世界:

根据假设1、2、3,我们知道投资者将会从所有风险证券组合构成的可行区域(下图的灰色区域)中选择其最优证券组合(灰色区域的外圈黑色沿线)。根据假设4,我们知道所有投资者的风险可行区域是相同的。如下图所示,纵轴是组合的预期收益,横轴是组合的标准差,标准差反映了组合收益的变动情况,即风险大小,标准差越大,收益变动越大,越不稳定,说明风险越大。

下面的灰色区域就是所有投资者的可行区域,黑色外沿就是最优的证券组合,为什么是最优的呢?以A点为例,在外沿线上面总能找到一个B,它的风险与A一样,但收益更高。

注意,以上讨论的资产组合,都是有风险的,因为横轴不等于零,在不考虑无风险资产的时候,黑色沿线的组合都是最优组合,但有无风险资产介入情况就有所不同。

根据假设5,市场上只有一种无风险资产C,收益为r0,方差即风险为0,如下图所示。

  • 投资者可以将钱全部投向于某个最优的资产组合,比如B,那么获得收益和承担的风险将全部是rB和σB。
  • 同样,投资者也可以将钱全部投向无风险资产,那么获得收益和承担的风险将全部是r0和0。
  • 事情当然没有那么极端,更多人把部分钱投资于B、部分投资于无风险资产C,这样形成的组合形成了B-C的连线,在这条线上,任何一个点都是B与C之间的再组合。

那么问题就来了,不考虑无风险资产的时候,黑色沿线上的点都是最优组合,考虑无风险资产,为什么情况就不同?实际上,考虑无风险资产的时候,黑色沿线上有一个最最优的点M,M与C的连线优于M与任何其他组合的连线:

聪明的你一定看出来了,CM先与黑色沿线相切,相比其他连线,CM上的点可以在相同标准差下获取更高的期望收益。此时,我们果断抛弃除M之外的其他任何风险组合。

至此,我们得到了两个很有用的东西:

(1)切点组合

切点对应的风险组合,即M点,被称为切点组合。

(2)分离定理

分离定理也称分离特性,指最优风险组合的确定,与个别投资者的偏好无关。我们也推导过了,无论是谁,只要是理性投资者,他必定会以M作为他的风险投资组合。

分离定理有什么意义?

对于从事投资服务的金融机构来说,不管投资者的收益/风险偏好如何,只需找到切点所代表的风险资产组合,再加上无风险证券,就可以为所有投资者提供最佳的投资方案,投资者的收益/风险的偏好,就只需反映在组合中无风险证券所占的比重。

现在,我们回答了投资者们无时无刻不在绞尽脑汁思考的两个问题,的第一个问题——(1)有没有一个收益最大、风险最小的投资组合?回答是有的,它就是切点组合。现在,我们来搞清楚第二个问题(2)它在哪里?

从上面的图中,我们只能知道有这么一个组合M,但是它具体是什么样的组合,具体是那些证券按照什么比例组合成的?这个我们还不知道,现在我们就来把它搞清楚。

从分离定理中我们知道,所有投资者的风险资产都会选择M,没有其他选择,因此M必然是一个“市场组合”——由所有证券构成的组合,在这个组合中,每一种证券的构成比例等于该证券的相对市值。

为什么呢?假设市场上有一种风险证券E,它没有被包括在组合M中,那么肯定没有人持有它,因为所有人都选择了那个最优的M组合,用它来搭配无风险证券。此时这个风险证券E没有需求只有供给,这会使E的价格一直下降,直到人们认为E有利可图并被纳入到组合M中进行持有,此时也许M变成了M’,但这个M’仍然是市场上最最优的风险组合,并与投资者的偏好无关——也只是换个名称而已。至此我们得到了第三个有用的东西:

(3)市场组合

切点组合即市场组合——由所有证券构成的组合,在这个组合中,每一种证券的构成比例等于该证券的相对市值。

而且上述的分析也说明了市场组合中每一种证券的价格都是均衡价格(在这个价格下,供给等于需求),如果不是均衡价格的话,价格可能高于或低于均衡价格,这是买压或卖压会使价格回到均衡水平。

2. 资本市场线

目前我们知道了风险组合中,有一个最最优的组合M,它被称为切点组合,也是一个市场组合,如果它搭配无风险证券,那么我们就可以确定一条有效证券组合CM,CM上的点代表(风险组合M + 无风险资产C)搭配起来的所有有效组合。那么,从C出发,穿过M点的这条射线,就被称为资本市场线。它描述了有效组合的风险与收益之间的关系。

为什么CM之外的延长线也算上资本市场线?

因为假设中提到没有卖空和买空的限制,投资者可以借入或者贷出无风险资金,投入到切点组合中。举一个例子,对于某风险厌恶的投资者来说,他可能会选择一般投资于无风险资产C,一般投资于切点组合M,那么他会选择有效组合CM1:

CM1=0.5C+0.5M

对于某风险厌恶较轻的投资者来说,他可能会借入无风险资产C,连同自己的本金一起投入到切点组合M上,那么他会选择有效组合CM2:

CM2=-0.5C+1.5M

经过上面的分析,我们得到了本节的一个重要的概念:资本市场线(CML)

资本市场线描述了有效组合的风险和收益之间的关系。这个关系如何用公式表达?

看图就很容易发现:

其中

为M的风险收益(或风险溢价、风险报酬)

至此,我们了解了有效组合的预期回报与标准差之间的关系。但是,有效组合作为从简化世界中推导出来的一个庞大的组合,它的现实意义在哪里?我们在前言中不是说要研究CAPM模型,用它来分析“某股票收益与风险之间的定量关系,以判断其价格是否合理”的吗?不错,我们前面讨论的

切点组合——分离定理——市场组合(=切点组合)——资本市场线

就是为了研究这个东西做铺垫。

3. 证券市场线(资本资产定价模型)

还是要回到单个风险证券上来,对于单个风险证券,有同学要说话要说:

不(bie)对(sha)的(le),单个证券本身是一个非有效的组合,它始终位于资本市场线的下方。不在资本市场线上,因此不能简单的用标准差来取比例套用这个公式。

此时我们需要把横轴换一换,考虑单个证券的时候,不再用标准差来度量风险,而是用β系数——β系数反映的是单个证券与整体市场组合的联动性,而不是自己的离散程度。

换成β系数之后,公式就出来了:

那么ri与βi之间的关系就是一条直线了:

等下,有同学又要说话了,

还有问题欢迎在微信中实时骚扰(不一定在线),看到一定回复(公众号在接受消息48小时后就不能再回复了)。

本节至此,我们介绍了几个重要的概念:

(1)β系数

它反映了单个证券与整体市场组合的联动性,用来衡量单个证券的风险,实际上,我们可以根据β系数来区分股票:

  • β>1的股票被称为“攻击性股票”,市场上升时其升幅较大;
  • β<1的股票被称为“防御性股票”,市场下降时其跌幅较小;
  • β<1的股票被称为“中立性股票”,与市场波动一致,适用于指数基金;

(2)证券市场线(SML)

证券市场线是反映单个风险证券收益与β系数关系的直线,注意它与资本市场线(CML)的区别:

  • CML关注的市场组合(的收益与风险的关系),而SML关注的是单个证券(的收益与风险的关系)。实际上,不仅仅是单个证券,SML适用于所有有效组合和非有效组合,而CML只适用于有效组合;
  • CML用标准差来衡量风险,而SML用β系数来衡量风险。

(3)资本资产定价模型(CAPM)

证券市场线其实就是CAPM的图形形式,它的公式:

正是资本资产定价模型CAPM。

4. 超额收益形式的CAPM模型

(1)CAPM模型的贡献

CAPM模型是在一些假设的基础上,推导出了资产的定价模型,通过无风险利率、市场收益率、以及β系数可以得到某种资产的“理论”价格,从而帮助投资者对股票进行评价。此外CAPM模型还剔除了新的风险测度方法,即β系数。在实际中,具有较强的可操作性,如,

  • 无风险利率多用短期国债利率或银行业间同业拆利率;
  • 市场组合的期望收益率,用上证综合指数,美国可以用S&P500指数;
  • β系数,利用单个股票和市场组合的历史数据可以进行计算,之后再进行显著性检验。

(2)超额收益形式的CAPM模型

虽然如此,CAPM模型的缺点也是很明显的,它的成立是基于一连串理想化的假设,这些假设在现实中并不全部成立,这必然使得CAPM的作用大打折扣。

其实,数说君在《量化投资之多因子模型》中说过(微信公众号“数说工作室”中回复“factor”),在理想条件下,股票只能获得平均基准收益,而现实中无法满足那些假设要求,股票的收益也不仅只有基准收益,还包括了超额收益,即α收益

此外,βi度量股票i的风险不用多说,要补充的是它其实是一种系统风险,是不可分散的。εi是股票i的随机误差项,是非系统风险,是可以分散掉的;

三、后记:quant的未来

数说君认为,quant的未来是乐观的:

现实中市场越有效效、信息越公开、投资者不理性,标准的CAPM模型就越适用,其对投资的指导意义就越大,传统的Q quant 会比较吃香;

相反,现实中市场越无效、信息越不公开、投资者越不理性,则说明超额收益就越存在,手握数据挖掘数据分析利器的P quant们的舞台就越大。(这又说到两派quant,重模型的q quant和重数据的p quant,回复“dsj1”查看)

中国的市场显然属于后者,这也说明,中国市场的超额收益的空间比成熟的国外资本市场更大,实际上,市场永远也不可能完全有效,因此未来的quant们一定是一手握模型、一手握数据的复合型人才。

这次股灾的教训大家也看到了,中国股市虽然不能做空,但是期指市场是可以的,前两天商品期货全线跌停,就是被打爆的多头去商品期货对冲的结果。引用平安证券王磊先生的话:

单炒股票已经是死路,宏观对冲,大类资产配置才能立于不败之地。这是宏观对冲基金最好的时代。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数说工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
4-Numpy通用函数
计算这百万个操作并存储结果需要几秒钟!甚至现在的手机的处理速度都以Giga-FLOPS衡量时(即每秒数十亿次数字运算)。 不过事实证明,这里的瓶颈不是操操作系统作本身,而是CPython在循环的每个循环中必须执行的类型检查和函数分派。 每次计算倒数时,Python都会首先检查对象的类型,并动态查找要用于该类型的正确函数。如果我们使用的是已编译的代码(静态语言的优势),则在代码执行之前便会知道此类型规范,并且可以更有效地计算结果。
用户1418372
2020/03/20
8660
数据科学 IPython 笔记本 9.5 NumPy 数组上的计算:通用函数
到目前为止,我们一直在讨论 NumPy 的一些基本要点;在接下来的几节中,我们将深入探讨 NumPy 在 Python 数据科学领域如此重要的原因。也就是说,它为数据数组的最优计算,提供了一个简单而灵活的接口。
ApacheCN_飞龙
2022/12/02
9450
NumPy学习笔记—(1/3)
想要有效的掌握数据驱动科学和计算需要理解数据是如何存储和处理的。本节将描述和对比数组在 Python 语言中和在 NumPy 中是怎么处理的,NumPy 是如何优化了这部分的内容。
可以叫我才哥
2021/08/05
1.5K0
Python代码转换成C++
Python和C++在代码结构上存在一些差异。Python是一种解释型语言,可以直接执行,而C++是一种编译型语言,需要先编译后执行。因此,在将Python代码转换为C++代码时,我们需要注意这些差异。
很酷的站长
2023/09/07
6470
Python必备基础:这些NumPy的神操作你都掌握了吗?
本文简单介绍NumPy模块的两个基本对象ndarray、ufunc,介绍ndarray对象的几种生成方法及如何存取其元素、如何操作矩阵或多维数组、如何进行数据合并与展平等。最后说明通用函数及广播机制。
IT阅读排行榜
2019/04/25
4.8K0
Python必备基础:这些NumPy的神操作你都掌握了吗?
一行代码让你的python运行速度提高100倍
python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。
小小詹同学
2019/11/12
9150
这一行代码,能让你的 Python 运行速度提高 100 倍!
python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。
杰哥的IT之旅
2020/09/30
6510
如何将数据处理速度提升1000+倍
利用Python进行数据处理时经常使用的是pandas和numpy,这两个工具的功能都很强大,尤其是pandas,更是Python中数据处理方面最强大的工具之一。
气象学家
2020/02/17
3.1K0
如何将数据处理速度提升1000+倍
python random randint_Python random.randint方法代码示例[通俗易懂]
本文整理汇总了Python中numpy.random.randint方法的典型用法代码示例。如果您正苦于以下问题:Python random.randint方法的具体用法?Python random.randint怎么用?Python random.randint使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在模块numpy.random的用法示例。
全栈程序员站长
2022/07/25
4510
Numpy 之ufunc运算
ufunc是universal function的缩写,它是一种能对数组的每个元素进行操作的函数。NumPy内置的许多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。让我们来看一个例子:
用户6021899
2019/08/14
1.4K0
Numpy中的通用函数
NumPy数组的计算:通用函数缓慢的循环通用函数介绍探索Numpy的通用函数高级通用函数的特性聚合:最小值、 最大值和其他值数组值求和最大值和最小值其他聚合函数
用户3577892
2020/06/12
1.9K0
用 Taichi 加速 Python:提速 100+ 倍!
Python 已经成为世界上最流行的编程语言,尤其在深度学习、数据科学等领域占据主导地位。但是由于其解释执行的属性,Python 较低的性能很影响它在计算密集(比如多重 for 循环)的场景下发挥作用,实在让人又爱又恨。如果你是一名经常需要使用 Python 进行密集计算的开发者,我相信你肯定会有下面的类似经历:
自学气象人
2022/11/02
1.9K0
用 Taichi 加速 Python:提速 100+ 倍!
python之numpy
list1=[[“张三”,180,23], [“李四”,190,21]] list1=[[“张三”,180,23], [“李四”,190,21]] In [2]:
用户7886150
2021/01/03
4390
快速排序的4种优化[通俗易懂]
快排算法是基于分治策略的排序算法,其基本思想是,对于输入的数组 a[low, high],按以下三个步骤进行排序。
全栈程序员站长
2022/07/30
2K0
快速排序的4种优化[通俗易懂]
Python3快速入门(十二)——Num
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时对数组运算提供了大量的数学函数库。 Numpy 是一个运行速度非常快的数学库,内部解除了CPython的GIL,运行效率极好,主要用于数组计算,是大量机器学习框架的基础库,NumPy主要包括如下: (1)强大的N维数组对象 ndarray (2)广播功能函数 (3)整合 C/C++/Fortran 代码的工具 (4)线性代数、傅里叶变换、随机数生成等功能。 NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)组合使用,用于替代 MatLab。
py3study
2020/01/06
4.7K0
Python NumPy缓存优化与性能提升
NumPy 是 Python 中进行科学计算和数据处理的核心库,其强大的多维数组操作功能让其在计算密集型任务中表现优异。然而,当处理大规模数据时,性能问题可能成为瓶颈。合理地利用 NumPy 的缓存机制和优化策略,可以显著提升计算效率。
sergiojune
2024/12/23
1420
Python NumPy缓存优化与性能提升
tensorflow为什么要用placeholder()
Tensorflow的设计理念称之为计算流图,在编写程序时,首先构筑整个系统的graph,代码并不会直接生效,这一点和python的其他数值计算库(如Numpy等)不同,graph为静态的,类似于docker中的镜像。然后,在实际的运行时,启动一个session,程序才会真正的运行。这样做的好处就是:避免反复地切换底层程序实际运行的上下文,tensorflow帮你优化整个系统的代码。我们知道,很多python程序的底层为C语言或者其他语言,执行一行脚本,就要切换一次,是有成本的,tensorflow通过计算流图的方式,帮你优化整个session需要执行的代码,还是很有优势的。
狼啸风云
2022/10/05
7060
Python可以比C++更快,你不信?
Python 是一个用途非常广泛的编程语言,拥有成千上万的第三方库,在人工智能、机器学习、自动化等方面有着广泛的应用,众所周知,Python 是动态语言,有全局解释器锁,比其他静态语言要慢,也正是这个原因,你也许会转向其他语言如 Java、C++,不过先等等,今天分享一个可以让 Python 比 C++ 还要快的技术,看完再决定要不要转吧。
somenzz
2021/04/16
9600
基于Python装饰器的向量化计算速度对比
timer是一个装饰器,功能是给被装饰的函数计时。如果要进一步了解装饰器的使用,点击此链接Python闭包函数和装饰器 sumOfLoop函数是常规的使用for进行循环遍历求和的方法; sumOfComprehension函数使用推导式得出新的列表,然后用内置sum函数求出列表的和; sumOfVectorization函数使用np.dot方法求出两个数据类型的为numpy.ndarray的对象的点积,两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为:a·b=a1b1+a2b2+……+anbn。 np.random.rand()方法需要传入一个参数,例如传入参数为5,则返回一个数据类型为numpy.ndarray、长度为5、其中元素的值范围为0-1的对象,如下图所示:
潇洒坤
2018/09/10
4780
基于Python装饰器的向量化计算速度对比
《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算4.1 NumPy的ndarray:一种多维数组对象4.2 通用函数:快速的元素级数组函数4.3 利用数组进行数据处理4.
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。 NumPy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++、Fortran等语言编写的代码的A C API。 由于NumPy提供了一个
SeanCheney
2018/04/24
4.9K0
《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算4.1 NumPy的ndarray:一种多维数组对象4.2 通用函数:快速的元素级数组函数4.3 利用数组进行数据处理4.
推荐阅读
相关推荐
4-Numpy通用函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文