Python蒙特卡罗(Monte Carlo)模拟计算投资组合的风险价值(VaR)

article/2025/8/29 11:48:00

最近我们被客户要求撰写关于风险价值(VaR)的研究报告,包括一些图形和统计输出。

如何使用Python通过蒙特卡洛模拟自动计算风险值(VaR)来管理投资组合或股票的金融风险。

金融和投资组合风险管理中的VaR?

VaR是 "风险价值 "的缩写,是许多公司和银行用来确定其公司内部金融风险水平的工具。风险值是为公司的投资而计算的,也可能是为检查银行或公司所管理的投资组合的风险水平。

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

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

,时长10:03

相关视频:马尔可夫链蒙特卡罗方法MCMC原理与R语言实现

马尔可夫链蒙特卡罗方法MCMC原理与R语言实现

,时长08:47

该计算可以被认为是一种统计方法。它也可以简化为以下语句  

风险值是在一定的概率水平(置信区间)下将产生的最小损失或在一定的概率水平下将实现的最大损失。

上图显示了一个公司在α%的置信水平下可能面临的最大损失。在个人层面上,VaR可以帮助你预测或分析你的投资组合可能面临的最大损失。

蒙特卡洛模拟

蒙特卡洛模型是Stanislaw Ulam和John Neumann的心血结晶,他们在第二次世界大战后开发了这个模型。该模型是以摩纳哥的一个赌博城市命名的,这是因为赌博中存在机会和随机性。

蒙特卡洛模拟是一个概率模型,它使用产生的随机变量与经济因素(期望收益率、波动率),来预测结果。该模型经常被用来计算风险和不确定性。

我们现在将使用蒙特卡洛模拟为我们的资产组合生成一组预测收益,这将有助于我们找出我们投资的风险值。


在Python中计算VaR

我们将首先通过导入所需的库和函数

#导入所有需要的库
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

为了我们项目的目的,我考虑了过去两年的 股票。

 
for i in range(len):  web.get_data(tickers[i] 
stocks.tail()

 

下一步,我们将计算每个资产的组合权重。可以通过实现最大夏普比率来计算资产权重。

#年化收益率
historical_return(stocks)
#投资组合的样本方差
sample_cov#夏普比率
EffFro(mu, Sigma, weight_bounds=(0,1)) #负数的权重界限允许做空股票
max_sharpe() #可以使用增加目标来确保单个股票的最小零权重

最大夏普比率的资产权重

资产权重将被用于计算投资组合的期望收益。

#VaR计算
rx2 = []#换为最大夏普比率的资产权重
list(sharpe.values())

现在,我们将把投资组合的股票价格转换为累计收益,这也可以被视为本项目的持有期收益(HPR)。

   tick  = (tick  +1).cumprod()

#画出所有股票的累积/HPR的图形
tick[col].plot()plt

现在,我们将挑选出每个资产的最新HPR,并使用.dot()函数将收益率与计算出的资产权重相乘。

sigma = pre.std()
price=price.dot(sh_wt) #计算加权值

在计算了投资组合的期望收益和波动率(期望收益的标准差)后,我们将设置并运行蒙特卡洛模拟。我使用的时间是1440(一天中的分钟数),模拟运行20,000次。时间步长可以根据要求改变。我使用了一个95%的置信区间。

for j in range(20000): #20000次模拟运行(rtn/Time,sigma/ sqrt(Time),Time)
plt(np.percentile(daily_returns,5)

1440分钟内一天的收益范围 | 红色 - 最小损失 | 绿色 - 最小收益

将收益率的分布图可视化,我们可以看到以下图表

plt.hist(returns)
plt.show()

输出上限和下限的准确值,并假设我们的投资组合价值为1000元,我们将计算出应该保留的资金数额弥补我们的最低损失。

print(percentile( returns,5),percentile( returns,95)) VaR - 在5%的概率下,最小损失为5.7%,同样,在5%的概率下,收益可以高于15% 

每天的最低损失是1.29%,概率为5%。

所得金额将标志着每天弥补你的损失所需的金额。这个结果也可以解释为你的投资组合在5%的概率下将面临的最低损失。

总结

上面的方法显示了我们如何计算投资组合的风险价值(VaR)。对于使用现代投资组合理论(MPT)计算一定数量的投资组合,有助于巩固你对投资组合分析和优化的理解。最后,VaR与蒙特卡洛模拟模型配合使用,也可用于通过股价预测损失和收益。这可以通过将产生的每日收益值与各自股票的最终价格相乘来实现。



http://chatgpt.dhexx.cn/article/M4qleVIM.shtml

相关文章

Python风险价值计算投资组合VaR(Value at Risk )、期望损失ES(Expected Shortfall)

最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。 Python计算获得多资产投资组合的风险度量。 视频:风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例 风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资…

金融数据分析 实验四 金融风险价值计算

实验原理 VaR的定义:在正常的市场条件下,给定置信水平和持有期,某种投资组合可能发生的最大损失值。 VaR模型不仅描述了损失的大小,还描述了发生损失的概率。 VaR的数学定义:给定置信水平 1 - α 和时间间隔 t ,如果一…

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

最近我们被客户要求撰写关于风险价值VaR的研究报告,包括一些图形和统计输出。 什么是风险价值(VaR)? 风险价值 (VaR) 是一种统计数据,用于量化公司、投资组合在特定时间范围内可能发生的财务损失程度。该指标最常被投…

金融分析与风险管理——风险价值(VaR)

金融分析与风险管理——风险价值(VaR) 1. 风险价值(VaR)简述1.1 Python可视化风险价值 2. VaR值的测度方法2.1 方差-协方差法2.2 历史模拟法2.3 蒙特卡洛模拟法 3. 回溯检验4. 压力VaR 1. 风险价值(VaR)简述…

python是动态语言还是静态语言?强类型语言还是弱类型语言

首先要清楚静态类型语言和动态类型语言的判别的标准 定义:如果类型检查发生在编译阶段(compile time),那么是静态类型语言(statically typed languages)中,相反的,如果类型检查发生在运行阶段(run time),那么是动态类型…

Typescript笔记之基础知识(1):强类型语言和弱类型语言、静态语言和动态语言

foreword(前言) 这是本人关于Typescript的第一篇笔记,之所以选择将“强类型语言和弱类型语言、静态语言和动态语言”作为第一个想要去总结的主题,是因为个人觉得它很重要。 如今这个年代,可以供我们选择的编程语言非常…

编程语言的执行方式、静态语言和脚本语言

计算机执行源程序的两种方式是编译和解释 源代码:采用某种编程语言编写的计算机程序,人类可读 目标代码:计算机可以直接执行,大部分人类不可读,如:1110000111001010 编译 编译是讲源代码一次性转换为目标代…

程序的两种执行方式,静态语言和脚本语言

程序的两种执行方式,静态语言和脚本语言 文章目录 程序的两种执行方式,静态语言和脚本语言编译和解释静态语言和脚本语言 编译和解释 编译:将源代码一次性转换成目标代码的过程。(编译一次后,若需再次执行程序就可以直…

静态语言和脚本语言的区别

在计算机编程语言中,可以将编程语言分为静态语言和脚本语言两类,这两类编程语言最主要的区别是执行方式的不同。想要区分静态语言和脚本语言的区别,首先需要区分编译和解释。 编译和解释 编译是指将源代码一次性转换为目标代码的过程&#…

Java是动态语言还是静态语言,是强类型还是弱类型?

一. 前言 今天小熙突然想到一个问题,那就是Java到底是动态语言还是静态语言,是强类型还是弱类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧。 二. 图释 小熙碰巧看到一张图,完美的区分了以上的问题&#xf…

高级数据结构—斐波那契堆与二项堆详细介绍

斐波那契堆与二项堆 二项堆请点击这里👈 数据结构与堆斐波那契堆概述结构实现符号定义插入结点合并抽取最小结点分析Decrease Key第一种情况 删除最大度数的界 二项堆请点击这里👈 数据结构与堆 下图列出了小顶堆在各种数据结构(链表、二叉堆、二项堆、…

数据结构——斐波那契堆

斐波那契堆的介绍 斐波那契堆(Fibonacci heap)是一种可合并堆,可用于实现合并优先队列。它比二项堆具有更好的平摊分析性能,它的合并操作的时间复杂度是O(1)。与二项堆一样,它也是由一组堆最小有序树组成,并且是一种可合并堆。与二…

《算法导论3rd第十九章》斐波那契堆

前言 第六章堆排序使用了普通的二叉堆性质。其基本操作性能相当好,但union性能相当差。 对于一些图算法问题,EXTRACT-MIN 和DELETE操作次数远远小于DECREASE-KEY。因此有了斐波那契堆。 斐波那契堆结构 斐波那契堆是一系列具有最小堆序的有根树的集合…

斐波那契堆(Fibonacci heaps)

一:斐波那契堆 1:特性 斐波那契堆同二项堆一样,也是一种可合并堆。斐波那契堆的优势是:不涉及删除元素的操作仅需要O(1)的平摊运行时间(关于平摊分析的知识建议看《算法导论》第17章)。和二项…

3.3 斐波那契堆

结构 斐波那契堆的基础是可合并堆。 数据结构是一个森林。也就是N棵树。这点和二项堆一样。 这个结构没有二项堆那么多的要求。 Rank的概念,是子节点的数目 与二项堆不同的是,斐波那契堆的底层链表要成环,要双向链表。   而斐波那契堆的节点&#xff…

二叉堆/二项堆/斐波那契堆

二叉堆 二叉树 二叉树:是树的一种,主要的特点是二叉树的所有节点最多只有两个叶节点。除此之外没有别的要求完全二叉树:就是在二叉树当中,除了最后一层之外,所有层的节点都有满的,且最后一层的节点也是从…

斐波那契堆(Fibonacci heap)原理详解

前言 斐波那契堆(Fibonacci heap)是计算机科学中最小堆有序树的集合。它和二项式堆有类似的性质,但比二项式堆有更好的均摊时间。堆的名字来源于斐波那契数,它常用于分析运行时间。 堆结构介绍 基本术语介绍: 关键字:堆节点储存的…

斐波那契堆 - 解析与实现

概要 本章介绍斐波那契堆。和以往一样,本文会先对斐波那契堆的理论知识进行简单介绍,然后给出C语言的实现。后续再分别给出C和Java版本的实现;实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可。若文章有…

算法导论 斐波那契堆

算法导论 斐波那契堆 定义 堆H 最小结点min:指向最小关键字key的根结点n表示当前堆中结点的个数 结点x 最小堆性质:每个结点的关键字key均大于等于父结点的关键字根链表:所有的根结点都通过left,right指针形成一个环形链表父类指针为p,左右兄…

斐波那契堆(Fibonacci heap)原理详解(附java代码实现)

前言 斐波那契堆(Fibonacci heap)是计算机科学中最小堆有序树的集合。它和二项式堆有类似的性质,但比二项式堆有更好的均摊时间。堆的名字来源于斐波那契数,它常用于分析运行时间。 堆结构介绍 基本术语介绍: 关键字:堆节点储存的…