VaR风险价值-Python版本

article/2025/8/29 11:53:07

1、VaR简介

 

2、VaR原理

3、不同VaR实现方法及适用场景

3.1 历史模拟法

3.1.1 使用TUSHARE读入美的复权后估计数据

隆重介绍一下TUSHARE, 非常好的财经数据库, 能获取到国内股价信息

#环境&数据准备
import sys as sy
import numpy as np
import pandas as pd
import tushare as ts
import pyecharts as pye
from sklearn import datasets as ds
import matplotlib as mpl
from matplotlib import pyplot as plt
import seaborn as sns
import pyecharts as pye#读入美的“000333”2017-01-01 到 2018-11-08复权后数据
df = ts.get_h_data('000333', start='2017-01-01', end='2018-11-8') 

计算计算每天的收益率,并展示前条数据样例

#计算日均收益率
df1 = df['close'].sort_index(ascending=True)
df1 = pd.DataFrame(df1)
df1['date'] = df1.index
df1['date'] = df1[['date']].astype(str)
df1["rev"]= df1.close.diff(1)
df1["last_close"]= df1.close.shift(1)
df1["rev_rate"]= df1["rev"]/df1["last_close"]
df1 = df1.dropna()
print(df1.head(10))

打印程序输出:


           close        date   rev  last_close  rev_rate
date                                                     
2017-01-04  28.34  2017-01-04  0.68       27.66  0.024584
2017-01-05  28.21  2017-01-05 -0.13       28.34 -0.004587
2017-01-06  27.92  2017-01-06 -0.29       28.21 -0.010280
2017-01-09  27.79  2017-01-09 -0.13       27.92 -0.004656
2017-01-10  27.72  2017-01-10 -0.07       27.79 -0.002519
2017-01-11  27.17  2017-01-11 -0.55       27.72 -0.019841
2017-01-12  26.79  2017-01-12 -0.38       27.17 -0.013986
2017-01-13  26.81  2017-01-13  0.02       26.79  0.000747
2017-01-16  26.84  2017-01-16  0.03       26.81  0.001119
2017-01-17  27.47  2017-01-17  0.63       26.84  0.023472

使用Pyecharts展示股价走势(Pyecharts非常漂亮的话题工具, 擅长于交换展示, 不擅长数据探索)

#使用PYECHARTS,画出收盘价曲线
line = pye.Line(title="Mytest")
attr = df1["date"]
v1 = df1["close"]
line.add("000333", attr, v1, mark_point=["average"])
line.render()
line

打印美的000333估计走势


展示美的000333每天收益率对于的密度函数

对收益率从小到大排序, 根据所选定的置信度,取相应的分位数, 作为VaR损失率:

本例中选定如下置信度:

99% - 对应1分位

95% - 对应5分位

90% - 对应10分位

p.s: Numpy 的percentile函数, 能直接返回序列相应的分位数

sRate = df1["rev_rate"].sort_values(ascending=True)
p = np.percentile(sRate, (1, 5, 10), interpolation='midpoint')
print(p)

打印程序返回结果(1分位,5分位,10分位):

[-0.05152336 -0.02971679 -0.0244671 ]

历史模拟法从上面的计算过程来看似乎很简单,细心的你可能已经发现上述计算过程的缺陷,没有使用持有期Tn; 其实本例在计算收益率时使用T1 - T0的计算方法, 隐含着持有期为一天的VaR值; 如果有计算持有期为100天的VaR值, 需要用T100 - T0计算收益率,也就是差分为100阶; 相信这里大家能看发现历史模拟法的缺陷了, 它不单要假设历史很长一段时间具备独立同分布统计条件,实际上外部因素不可能长期保持不变的分布概率; 还有就是持有期较长的话, 差分处理导致损失大量数据,这样对数据样本的要求就比较苛刻了。
 

 

 

3.2 方差-协方差法

假定不管是过去的收益率R还是未来的收益率R,都是独立同分布的。所以方差—协方差法借助历史数据来估计未来收益率R的分布。而且,方差—协方差法事先假定R服从某一具体分布,如正态分布;但是该分布函数的所有参数还是未知的,如,正态分布的均值μ,方差σ2。假如现在我们收集了n个收益率R的数据:Ri,i=1,2,…,ni=1,2,…,n,那么我们可用这些历史数据来估计参数。通过参数估计,我们获得了R的概率密度函数f(x)和分布函数F(x)。根据R∗的定义(置信水平p下,未来持有期T的最小收益率),用数学语言表示如下:

则我们要找的R∗等于:R的概率分布的下分位数Z1−p, 如下图的白色部分; 特殊分布可通过查表求得该下分位数Z1−p,

数学公式可表示: (R* - μ)/σ = Z1−p


e.g 标准正态分布下的概率密度图:

 

对分位值不理解可以看:https://blog.csdn.net/lanchunhui/article/details/80381367

参考案例:
基金A的期初价值为V0=1000万万,假定其服从正态分布,根据收集到的历史收益率(持有期为10天),估计出RR~N(0.1,0.04), 假定置信水平p=p=99%, 求VaR。其实该题等价于求解正太分布X-N(u, σ2)曲线下, 覆盖面值99%所对应的分位数(Z-Score), 可把非标准正态分布转换成正太分布(x-u)/σ.

 

计算结果表明:在未来10天,期初价值为1000万的基金A的绝对损失大于366万的概率不超过1%。

3.3 使-协方差法计算美的VaR

使用协方差法计算美的000333, 未来持有期为一天的的VaR

from scipy.stats import norm
u = df1.rev_rate.mean()
σ2 = df1.rev_rate.var()
σ  = df1.rev_rate.std()
Z_01 = -norm.ppf(0.99)
#因为(R* - u)/σ = Z_01
#所有R* = Z_01*σ - u
print(Z_01*σ - u)
-0.05139400514115008

3.4 总结

可以看出来, 方差协方差法与历史模拟法有很大区别, 方差协方差法的核心是概率密度函数的分布假设, 如正态随机分布;

而历史法以让本的实际分布为参考; 协方差法的好处在于可以考虑当前实际因素, 假定合适的分布, 不会受历史影响,而且只要小量的样本计算出均值和方差即可。

参考文章:

https://blog.csdn.net/weixin_42907809/article/details/81543638

https://blog.csdn.net/lanchunhui/article/details/80381367

MC: https://blog.csdn.net/WFRainn/article/details/80876015

R版的VaR: 相当简练, 但是会让我们忽略里面的原理

https://blog.csdn.net/PyDarren/article/details/79850368


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

相关文章

基于蒙特卡罗模拟的股票风险价值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。因此有了斐波那契堆。 斐波那契堆结构 斐波那契堆是一系列具有最小堆序的有根树的集合…

斐波那契堆(Fibonacci heaps)

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

3.3 斐波那契堆

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

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

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

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

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

斐波那契堆 - 解析与实现

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