【FinE】在险价值(VaR)计算
导航
- VaR模型
- 案例:AAPL
- 历史模拟法
- 参数模型分析法
- 非参数bootstrap
- Monte-Carlo模拟计算
- 参考资料
VaR模型
在险价值Value-at-risk
的定义为,在一定时期Δt\Delta tΔt内,一定的置信水平1−α1-\alpha1−α下某种资产组合面临的最大损失,公式为
P(Δp≤VaR)=1−αP(\Delta p\leq VaR)=1-\alpha P(Δp≤VaR)=1−α
在持有组合时期Δt\Delta tΔt内,给定置信水平1−α1-\alpha1−α下,该组合的最大损失不会超过VaR,使用VaR进行风险衡量时,需要给定持有期和置信水平,巴塞尔协会规定持有期标准为10
天,置信水平为99%
,商业银行可以确定各自的水平,J.P.Morgan公司在1994年年报中设置持有期为1天,置信水平为95%,VaR值为1500万元,即J.P.Morgan公司在一天内所持有的风险头寸损失小于1500万的概率为95%.
VaR的主要性质:
- 变换不变性:VaR(X+a)=VaR(X)+a,a∈RVaR(X+a)=VaR(X)+a, a\in\mathbb{R}VaR(X+a)=VaR(X)+a,a∈R
- 正齐次性:VaR(aX)=aVaR(X),a<0VaR(aX)=aVaR(X), a<0VaR(aX)=aVaR(X),a<0,资产的风险与持有头寸呈反比关系
- 协单调可加性:VaR(X1+X2)=VaR(X1)+VaR(X2)VaR(X_1+X_2)=VaR(X_1)+VaR(X_2)VaR(X1+X2)=VaR(X1)+VaR(X2)
- 不满足次可加性和凸性:不满足次可加性表示资产组合的风险不一定小于各资产风险之和,这个性质导致VaR测度存在不合理性,因为组合VaR不可以通过求各个资产的VaR得出。不满足凸性表示以VaR为目标函数的规划问题一般不是凸规划,局部最优解不一定是全局最优解,由于多个局部极值的存在导致无法得到最优资产组合
- 满足一阶随机占优
- VaR关于概率水平1−α1-\alpha1−α不是连续的
VaR对风险的衡量具有前瞻性,将预期损失的规模和发生的概率结合,可以了解在不同置信水平上风险的大小.
但是VaR模型是对正常市场环境中金融风险的衡量,如果整体环境出现了动荡或者发生极端情况时,VaR就会失去参考价值,一般加上压力测试(Stress Test)结合极值分析进行风险衡量,常用的极值分析方法有BMM和POT两种,极值分析就是当风险规模超过设定阈值时进行建模,处理风险尾部.
由于金融数据的低信噪比特点,导致数据呈现尖峰后尾的分布,这种分布导致VaR模型无法产生一致性度量,针对风险度量的不一致性可以使用条件风险价值CVaR模型修正,即当资产组合损失超过给定的VaR值时,资产组合的损失期望,计算公式如下
CVaRα=E(−X∣−X≤VaRα(x))CVaR_\alpha=\mathbb{E}(-X\mid -X\leq VaR_\alpha(x)) CVaRα=E(−X∣−X≤VaRα(x))
其中XXX表示资产的损益,CVaR满足以下性质:
- 一致连续性
- 次可加性,∀X,Y\forall X, Y∀X,Y满足ρ(X+Y)≤ρ(X)+ρ(Y)\rho(X+Y)\leq \rho(X)+\rho(Y)ρ(X+Y)≤ρ(X)+ρ(Y)
- 满足二阶随机占优
- 满足单调性,∀X≤Y\forall X\leq Y∀X≤Y满足ρ(X)≤ρ(Y)\rho(X)\leq \rho(Y)ρ(X)≤ρ(Y)
案例:AAPL
历史模拟法
历史模拟法计算AAPL公司的VaR,历史模拟法使用市场历史因子的变化来估计市场因子未来的变化,对市场因子的估计采用权值估计方法,根据市场因子的未来价格水平对头寸进行重新估值,计算出头寸的价值变化,将组合损益从小到大排序,得到损益分布,通过计算给定置信度下的分位数求出VaR. 这里计算了置信水平分别为95%和99%的VaR.
历史模拟法python
代码
import pandas_datareader.data as web
import datetime as dt
import pandas as pd
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as pltstart=dt.datetime(2012, 1, 1)
end=dt.datetime(2018, 12, 31)
df=web.DataReader('AAPL', 'yahoo', start, end)# 对数收益率
df['return']=np.log(df['Adj Close']/df['Adj Close'].shift(1))
# 计算收益率的分位数
# 5%分位数
VaR5=np.percentile(df['return'].dropna(), 5)
# 1%分位数
VaR1=np.percentile(df['return'].dropna(), 1)def hm_demo():grey = 0.75, 0.75, 0.75fig=plt.figure(figsize=(8, 6))plt.hist(df['return'], bins=50, alpha=0.5, color=grey)plt.plot([VaR5, VaR5], [0, 100], 'b:', linewidth=2, label='5% VaR')plt.plot([VaR1, VaR1], [0, 100], 'r:', linewidth=2, label='1% VaR')plt.xlim([-0.1, 0.1])plt.ylim([0, 250])plt.legend()# plt.savefig('hm_var.png')plt.show()hm_demo()
参数模型分析法
分析法利用证券组合的价值函数与市场因子之间的近似关系,推断市场因子的统计分布,简化VaR计算.
使用参数模型分析法需要进行数据预处理工作,在Matlab(R 2012a)
中常用数据预处理函数如下
% 计算股票样本的均值,标准差,相关性与beta
% 价格转收益率
tick_ret=tick2Ret(stockPrices, [], 'continuous')
mu=mean(tick_ret) % 计算均值
std=std(tick_ret) % 计算标准差
mdd=maxdrawdown(tick_ret) % 计算最大回撤
coef=corrcoef(tick_ret) % 相关系数矩阵
tick2ret
函数说明
[RetSeries, RetIntervals]=tick2ret(TickSeries, TickTimes, Method)
INPUT
TickSeries: 价格序列
TickTimes: 时间序列
Method: 计算方法,continuous表示对数收益率计算log(x)-log(y);simple表示简单收益率计算(x-y)/y
OUTPUT
RetSeries: 收益率序列
RetIntervals: 收益率对应的时间间隔
maxdrawdown
函数说明
T日组合最大回撤计算接口为
[MaxDD, MaxDDIndex]=maxdrawdown(Data, Format)
INPUT
Data: 组合每日总收益序列
Format: 类别有 return(默认,收益率序列),arithmetic(算术布朗运动),geometric(几何布朗运动)
OUTPUT
MaxDD:最大回撤值
MaxDDIndex:最大回撤值位置
参数模型法计算VaR使用接口portvrisk
,函数说明如下
ValueAtRisk=portvrisk(PortReturn, PortRisk, RiskThreshold, PortValue)
INPUT
PortReturn:组合收益率
PortRisk: 组合标准差
RiskThreshold:置信度阈值,默认为5%
PortValue:组合资产价值,默认为1
OUTPUT
ValueAtRisk:风险价值
参数模型法计算程序如下
pVar=portvrisk(mean(ret), std(ret), [0.01, 0.05], port_value);
confidence=pVar/port_value
非参数bootstrap
对历史数据进行有放回的采样,计算每次采样的VaR,然后对所有采样结果求期望,设置采样容量为300,进行200轮采样的结果如下
python
非参数bootstrap代码
def bootstrap_demo():ret=df['return'].dropna()# 有放回采样def sample(data, size):sample=np.random.choice(data, size, replace=True)VaR5=np.percentile(sample, 5)VaR1=np.percentile(sample, 1)return (VaR5, VaR1)sz, n=300, 200samples=np.array([sample(ret, sz) for _ in range(n)])VaR5, VaR1=np.mean(samples, axis=0)grey = 0.75, 0.75, 0.75fig=plt.figure(figsize=(8, 6))plt.hist(df['return'], bins=50, alpha=0.5, color=grey)plt.plot([VaR5, VaR5], [0, 100], 'b:', linewidth=2, label='5% VaR')plt.plot([VaR1, VaR1], [0, 100], 'r:', linewidth=2, label='1% VaR')plt.xlim([-0.1, 0.1])plt.ylim([0, 250])plt.legend()plt.savefig('bootstrap_var.png')plt.show()bootstrap_demo()
Monte-Carlo模拟计算
Monte-Carlo计算欧式期权价格可以见这篇博客.
Monte-Carlo模拟的基本步骤是:
1.选择市场因子变化的随机过程和分布,估计该过程的参数的相关参数.
2.模拟市场因子的变化路径,建立对市场因为未来的预测
3.对市场因子每个情景,利用公式计算价值和变化
4.根据组合价值变化分布模拟结果,计算给定置信度下的VaR.
设置股票价格符合几何布朗运动,即
St+1=Stexp((μ−σ22)Δt+σεΔt)S_{t+1}=S_t\exp((\mu-\frac{\sigma^2}{2})\Delta t+\sigma\varepsilon\sqrt{\Delta t}) St+1=Stexp((μ−2σ2)Δt+σεΔt)
其中μ\muμ为收益率均值,σ2\sigma^2σ2为收益率方差,ε\varepsilonε为从Gaussian分布中抽样出的随机值.
计算Δt=1\Delta t=1Δt=1日的VaR值
python
蒙特卡洛模拟计算代码
def monte_carlo_demo():ret = df['return'].dropna()mu, sig = np.mean(ret), np.std(ret)def gbm(s0, T, n):dt=T/nprice=s0for _ in range(n):eps=np.random.normal()s=price*np.exp((mu-sig**2/2)*dt+sig*eps*np.sqrt(dt))price=sreturn pricesp=[]s0=1for _ in range(10000):sp.append(gbm(s0, 1, 100))sret=np.array(sp)/s0-1VaR1=np.percentile(sret, 1)VaR5=np.percentile(sret, 5)print(VaR1, VaR5)grey = 0.75, 0.75, 0.75fig=plt.figure(figsize=(8, 6))plt.hist(df['return'], bins=50, alpha=0.5, color=grey)plt.plot([VaR5, VaR5], [0, 100], 'b:', linewidth=2, label='5% VaR')plt.plot([VaR1, VaR1], [0, 100], 'r:', linewidth=2, label='1% VaR')plt.xlim([-0.1, 0.1])plt.ylim([0, 250])plt.legend()plt.savefig('monte-carlo_var.png')plt.show()monte_carlo_demo()
kkk天的VaR可以根据公式
VaRk=VaR1∗kVaR_k=VaR_1*\sqrt{k} VaRk=VaR1∗k
计算,或者令程序中gbm
参数T=k
进行模拟计算.
参考资料
DCC-Garch VaR 量化小白H
Copula模型估计组合VaR 量化小白H
python金融实战之计算VaR
Risk Analysis in Python
量化投资以Matlab为工具 中国工信出版集团 李洋 郑志勇
【FinE】在险价值(VaR)计算相关推荐
- matlab计算 var,matlab 在险价值 VaR 的计算
matlab 在险价值 VaR 的计算 matlab 在险价值 VaR 的计算 VaR 模型 数据获取 历史模拟法 蒙特卡罗模拟法 参数模型法 代码和数据下载 VaR 模型 Value at Risk ...
- matlab 在险价值 VaR 的计算
matlab 在险价值 VaR 的计算 matlab 在险价值 VaR 的计算 VaR 模型 数据获取 历史模拟法 蒙特卡罗模拟法 参数模型法 代码和数据下载 VaR 模型 Value at Risk ...
- R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列...
原文链接:http://tecdat.cn/?p=26897 风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场风险(点击文末"阅读原文 ...
- 【Python量化】VaR在险价值的计算
文章目录 一.VaR的定义 二.计算单一资产的VaR 2.1 数据概况 2.2 方差-协方差法 2.3 历史模拟法 2.4 蒙特卡罗模拟法 三.计算资产组合的VaR 3.1 数据概况 3.2 方差-协 ...
- python 在险价值_Python计算股票投资组合的风险价值(VaR)
在开始之前,请注意,标准VaR计算假定以下条件: 收益的正态分布 -VaR假设投资组合的收益是正态分布.对于大多数资产而言,这当然是不现实的,但允许我们使用更为简单的计算来制定基准. (可以对VaR进 ...
- R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列
最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出. 风险价值 (VaR) 风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场 ...
- 风险管理及风险价值VaR分析
介绍 估算量化交易策略或策略组合的损失风险对于长期资金增长至关重要,现代机构已经开发了许多风险管理技术,特别是一种被称为风险价值或在险价值(VaR)的技术是其核心,一般将VaR的概念应用于单一策略或一 ...
- VaR(value at risk)在险价值
VaR,即Value at Risk,它是一种定量衡量风险的指标. 在险价值是指在一定概率下,某种投资组合在某段时间 内的最大损失. VaR的方法有:历史模拟方法,正态方法,蒙特卡洛方法,压力测试法. ...
- python计算在险价值_VaR - 风险价值 - 蒙特卡罗法 - Python
风险价值(VaR):即在市场正常波动的条件下,在一定概率水平P%下,某一金融资产或金融资产组合的VaR是在未来特定一段时间Δt内最大可能损失. 现在我们使用蒙特卡罗模拟法进行风险价值的估算.简单来说, ...
最新文章
- Could not load file or assembly App_Licenses.dll的问题
- Tomcat学习总结(3)——Tomcat优化详细教程
- Xcode 7错误:“缺少iOS分发签名身份...”
- 【iOS-cocos2d-X 游戏开发之四】Cocos2dX创建Android NDK新项目并编译导入Eclipse中正常运行!...
- 石子归并 51Nod - 1021
- Huffman树学习
- 在Tomcat中配配置数据源汇总
- 第四章:更多的bash shell命令
- python中如何统计元组中元素的个数_python-无论元素顺序如何,获取列表中的元组数...
- python写一个类_python3学习笔记--002--写一个类
- 循环在c语言中的表示什么作用,《C语言中的for循环》教案
- spring mysql 中文_Spring+mysql+velocity 中文问题解决方法
- BZOJ5212: [Zjoi2018]历史
- 前端安全XSS,CSRF
- Java 小数保留小数位数的方法
- 特殊符号html怎么打出来的,特殊符号怎么打出来
- 我应该拿什么来拯救你,我的游戏?
- 九张图读懂大数据医疗
- 【入门】广电行业DNS、DHCP解决方案详解(三)——DNS部署架构及案例
- java sql进销存_[内附完整源码和文档] 基于Java和Sql Server 2008的陶瓷工厂进销存管理系统...
热门文章
- Java编程学习-枚举
- 计算机故障小知识,计算机故障的一些小知识.doc
- 华为云CDN,是怎样拯救你的等待焦虑症
- 2020-12-16 今日学习 StringBuilder类
- 阿特拉斯拧紧枪说明书_ATLAS 阿特拉斯 DS手枪式电动拧紧枪
- python绘制五子棋棋盘_4.Python画一个五子棋棋盘
- 数据可视化分析教学课件——FineBI实验册节选====资产负债分析
- C/C++ 语言 const 关键字
- 奥鹏教师计算机培训总结,奥鹏信息技术应用能力提升培训总结交流
- 文件在EDIUS中打不开了怎么办