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

article/2025/8/29 11:47:09

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

什么是风险价值(VaR)?

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

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

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

,时长10:03

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

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

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

VaR如何计算?

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

  1. 使用蒙特卡洛模拟
  2. 使用方差-协方差方法

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

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

  • 收益的正态分布 -VaR假设投资组合的收益是正态分布。对于大多数资产而言,这当然是不现实的,但允许我们使用更为简单的计算来制定基准。
    • (可以对VaR进行修改来说明不同的分布,但是这里我们将重点介绍标准VaR计算)

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

计算投资组合的VaR的步骤

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

  1. 计算投资组合中股票的定期收益
  2. 根据收益创建协方差矩阵
  3. 计算投资组合均值和标准差
    • (根据投资组合中每只股票的投资水平加权)
  4. 用指定的置信区间,标准差和均值计算正态累积分布(PPF)的反函数
  5. 通过从步骤(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年以来,我们选择的股票的收益都已经符合正态分布。


最受欢迎的见解

1.R语言基于ARMA-GARCH-VaR模型拟合和预测实证研究

2.R语言时变参数VAR随机模型

3.R语言时变参数VAR随机模型

4.R语言基于ARMA-GARCH过程的VAR拟合和预测

5.GARCH(1,1),MA以及历史模拟法的VaR比较

6.R语言时变参数VAR随机模型

7.R语言实现向量自动回归VAR模型

8.R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

9.R语言VAR模型的不同类型的脉冲响应分析


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

相关文章

R语言风险价值:ARIMA,GARCH模型,Delta-normal法滚动估计,预测VaR(Value at Risk)和回测分析花旗公司股票时间序列数据

最近我们被客户要求撰写关于风险价值可视化的研究报告,包括一些图形和统计输出。 相关视频:时间序列分析:ARIMA GARCH模型分析股票价格数据 时间序列分析模型 ARIMA-ARCH GARCH模型分析股票价格数据 相关视频:在Python和R语言中建…

蒙特卡洛模拟计算风险价值VAR之R语言实现

一、解析VAR 当在分析方法中计算风险价值(VAR)时,我们需要假设金融工具的返回遵循一定的概率分布。最常用的是正态分布,这也是为什么我们通常称它为delta normal方法。要计算VAR,我们需要找到一个阈值(T&am…

VaR - 风险价值 - 蒙特卡罗法 - Python

风险价值(VaR):即在市场正常波动的条件下,在一定概率水平P%下,某一金融资产或金融资产组合的VaR是在未来特定一段时间Δt内最大可能损失。 现在我们使用蒙特卡罗模拟法进行风险价值的估算。简单来说,蒙特卡…

R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列

最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。 风险价值 (VaR) 风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场风险。VaR 可以定义为资产在给定时间段内以概率 θ 超过的市…

VaR风险价值-Python版本

1、VaR简介 2、VaR原理 3、不同VaR实现方法及适用场景 3.1 历史模拟法 3.1.1 使用TUSHARE读入美的复权后估计数据 隆重介绍一下TUSHARE, 非常好的财经数据库, 能获取到国内股价信息 #环境&数据准备 import sys as sy import numpy as np import…

基于蒙特卡罗模拟的股票风险价值VaR测算

基于蒙特卡罗模拟的股票风险价值VaR测算 前言:如果各位观看博客的想学的,可以通过Tushare金融数据注册链接注册账号,在获得相关数据集,这是本人的分享链接注册后,我可以获得50积分,谢谢各位支持。 摘要&…

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

最近我们被客户要求撰写关于风险价值(VaR)的研究报告,包括一些图形和统计输出。 如何使用Python通过蒙特卡洛模拟自动计算风险值(VaR)来管理投资组合或股票的金融风险。 金融和投资组合风险管理中的VaR? …

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。因此有了斐波那契堆。 斐波那契堆结构 斐波那契堆是一系列具有最小堆序的有根树的集合…