Python计算股票投资组合的风险价值(VaR)

简介: Python计算股票投资组合的风险价值(VaR)

原文链接:http://tecdat.cn/?p=17758 


什么是风险价值(VaR)?


风险价值(VaR)用于尝试量化指定时间范围内公司或投资组合中的财务风险水平。VaR提供了一段时间内投资组合的最大损失的估计,您可以在各种置信度水平上进行计算。


视频:风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例


估计投资组合的风险对于长期资本增长和风险管理非常重要,尤其是在大型公司或机构内部。VaR通常按以下格式构架:


  • “我们下个月的投资组合VaR为250,000元 ,置信度为95%”

  • 这意味着,以95%的置信度,我们可以说投资组合的损失在一个月内不会超过250,000元

在这篇文章中,我将引导您完成在股票投资组合中计算该指标的步骤。


VaR如何计算?


有两种主要方法来计算VaR:


  1. 使用蒙特卡洛模拟

  2. 使用方差-协方差方法

在本文中,我们将重点介绍使用方法(2)(方差-协方差)。简而言之,方差-协方差方法着眼于给定回溯期内给定股票或股票投资组合的历史价格走势(标准差,平均价格),然后使用概率理论来计算指定置信区间内的最大损失。我们将在下面使用Python逐步进行计算。

在开始之前,请注意,标准VaR计算假定以下条件:


  • 收益的正态分布 -VaR假设投资组合的收益是正态分布。对于大多数资产而言,这当然是不现实的,但允许我们使用更为简单的计算来制定基准。


  • (可以对VaR进行修改来说明不同的分布,但是这里我们将重点介绍标准VaR计算)


  • 标准市场条件 -与许多金融工具一样,VaR最适合用于考虑标准市场中的损失,并且不适用于极端/异常事件。


计算投资组合的VaR的步骤


为了计算投资组合的VaR,您可以按照以下步骤操作:


  1. 计算投资组合中股票的定期收益

  2. 根据收益创建协方差矩阵

  3. 计算投资组合均值和标准差


  • (根据投资组合中每只股票的投资水平加权)


  1. 用指定的置信区间,标准差和均值计算正态累积分布(PPF)的反函数

  2. 通过从步骤(4)的计算中减去初始投资,估算投资组合的风险价值(VaR)

1)计算投资组合中股票的定期收益

# 创建我们的股票投资组合tickers = \['AAPL','FB', 'C', 'DIS'\]#设置投资权重weights = np.array(\[.25, .3, .15, .3\])# 设定初始投资水平initial_investment = 1000000# 下载收盘价data = pdr.get\_data\_yahoo(tickers, start="2018-01-01", end=dt.date.today())\['Close'\]#从收盘价计算定期收益returns = data.pct_change()
returns.tail()

2)根据收益建立协方差矩阵

# 生成Var-Cov矩阵cov_matrix = returns.cov()cov_matrix

这将使我们能够计算整个投资组合的标准差和收益平均值。

3)计算投资组合的平均值和标准差

# 计算每只股票的平均收益returns.mean()# 计算整个投资组合的平均回报,# 对投资权重进行归一化avg_rets.dot(weights)# 计算投资组合标准差 np.sqrt(weights.T.dot(cov_matri# 计算投资平均值 (1+port\_mean) * initial\_investment# 计算投资标准差 initial\_investment * port\_st

接下来,我们可以将这些变量插入下面的百分比函数(PPF)中。

4)计算具有指定置信区间,标准偏差和均值的正态累积分布(PPF)的逆

# 选择我们的置信区间(我将在此处选择95%)conf_level1 = 0.05#逆累积分布函数为正态分布

#插入我们投资组合的均值,标准差

cutoff1 = norm.ppf(conf\_level1, mean\_investment, stdev_investment)

5)通过从步骤4的计算中减去初始投资,估算投资组合的风险价值(VaR)

#最后,我们可以在置信区间内计算VaRvar_1d1#output#22347.7792230231

在这里,我们有95%的信心说,我们的100万投资组合在一天之内不会超过损失超过2.23万元的损失。


n天时间段内的风险价值


如果我们想在更大的时间范围内计算该怎么办?只需获取1天的VaR并将其乘以 时间段的平方根即可 (这是由于股票收益的标准偏差往往随时间的平方根而增加)。

# 计算n天VaR
var_array = \[\]var\_array.append(np.round(var\_1d1 * np.sqrt(x),2))
# 绘制图形
plt.title("Max portfolio loss (VaR) over 15-day period")
1 day VaR @ 95% confidence: 10635.312 day VaR @ 95% confidence: 13534.26...14 day VaR @ 95% confidence: 73456.5115 day VaR @ 95% confidence: 83564.53

对照正态分布检查我们的股票分布


如计算部分所述,我们假设在计算VaR时,我们投资组合中股票的收益呈正态分布。

当然,我们无法预测这种情况,但我们至少可以检查历史收益如何分配,以帮助我们评估VaR是否适合用于我们的投资组合。

plt.plot(x, scipy.stats.norm.pdf(x, port\_mean, port\_stdev), "r")

plt.show()

收益与正态分布比较

从上面我们可以看到,自2018年以来,我们选择的股票的收益都已经符合正态分布。

相关文章
|
6天前
|
分布式计算 负载均衡 并行计算
Python 分布式计算框架 PP (Parallel Python):集群模式下的实践探索
该文介绍了使用Parallel Python (PP) 在两台物理机上构建分布式计算集群的经验。PP是一个轻量级框架,旨在简化Python代码在多处理器系统和集群中的并行执行。文中通过设置子节点的IP、端口和密钥启动PP服务器,并在主节点创建PP实例进行负载均衡。实验使用官方的质数和计算示例,显示PP在集群模式下能有效利用多台机器的多核CPU,实现计算效率的显著提升。未来,作者计划进一步研究PP在更复杂任务和大规模集群中的应用潜力。
|
6天前
|
机器学习/深度学习 算法 Serverless
利用无穷级数逼近计算幂运算与开根号——Python实现
使用泰勒级数逼近法,本文介绍了如何用Python计算特殊幂运算,包括分数次幂和开根号。通过定义辅助函数,如`exp`、`getN_minus_n`、`multi`和`getnum`,实现了计算任意实数次幂的功能。实验结果显示,算法能有效计算不同情况下的幂运算,例如`0.09^2`、`1^2`、`0.25^2`、`0.09^(0.5)`、`1^(0.5)`和`0.25^(0.5)`。虽然精度可能有限,但可通过调整迭代次数平衡精度与计算速度。
|
10天前
|
机器学习/深度学习 数据采集 API
|
29天前
|
算法 程序员 Python
年底工资总结,实例教你用Python计算个税 依法纳税做好公民(1)
年底工资总结,实例教你用Python计算个税 依法纳税做好公民(1)
|
1月前
|
数据采集 数据挖掘 关系型数据库
Excel计算函数(计算机二级)(1),2024年最新2024Python架构面试指南
Excel计算函数(计算机二级)(1),2024年最新2024Python架构面试指南
|
1月前
|
Python
【Python 百练成钢】高精度加法、阶乘计算、矩阵幂运算、矩阵面积交
【Python 百练成钢】高精度加法、阶乘计算、矩阵幂运算、矩阵面积交
|
2天前
|
Shell Python
GitHub星标破千Star!Python游戏编程的初学者指南
Python 是一种高级程序设计语言,因其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言。 目前的编程书籍大多分为两种类型。第一种,与其说是教编程的书,倒不如说是在教“游戏制作软件”,或教授使用一种呆板的语言,使得编程“简单”到不再是编程。而第二种,它们就像是教数学课一样教编程:所有的原理和概念都以小的应用程序的方式呈现给读者。
|
2天前
|
机器学习/深度学习 存储 自然语言处理
惊艳!老司机熬夜总结的Python高性能编程,高效、稳定、快速!
Python 语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理机器学习、科学计算、推荐系统构建等。 能够轻松实现和代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象而这个问题其实是可以解决的。 有些人想要让顺序执行的过程跑得更快。有些人需要利用多核架构、集群,或者图形处理单元的优势来解决他们的问题。有些人需要可伸缩系统在保证可靠性的前提下酌情或根据资金多少处理更多或更少的工作。有些人意识到他们的编程技巧,通常是来自其他语言,可能不如别人的自然。
|
2天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
3天前
|
存储 Python 索引
【Python编程挑战】:单链表实现技巧与最佳实践
【Python编程挑战】:单链表实现技巧与最佳实践