首页 > 编程语言 >【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例|附代码数据

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

时间:2023-05-30 23:00:55浏览次数:67  
标签:风险 Monte 语言 组合 Python 模型 模拟计算 GARCH VaR

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

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

风险价值 (VaR) 是一种统计数据,用于量化公司、投资组合在特定时间范围内可能发生的财务损失程度

什么是风险价值(VaR)?

该指标最常被投资银行和商业银行用来确定其机构投资组合中潜在损失的程度和概率。

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

**

拓端

,赞15

风险管理人员使用 VaR 来衡量和控制风险暴露水平。人们可以将 VaR 计算应用于特定或整个投资组合,或使用它们来衡量公司范围内的风险敞口。

 

图片

关键要点

  • 风险价值 (VaR) 是一种量化公司或投资潜在损失风险的方法。

  • 该度量可以通过多种方式计算,包括历史、方差-协方差和蒙特卡洛方法。

  • 尽管 VaR 作为一种风险度量在行业中很受欢迎,但它也存在不足之处。

图片

 

了解风险价值 (VaR)

VaR 模型确定了被评估实体的潜在损失以及发生定义损失的概率。一种方法是通过评估潜在损失的数量、损失数量的发生概率和时间范围来衡量 VaR。

例如,一家金融公司可能会确定一项资产的 3% 的 1 个月 VaR 为 2%,这表示资产在 1 个月的时间范围内价值下降 2% 的可能性为 3%。将 3% 的发生几率转换为每日比率后,每月 1 天发生 2% 的损失几率。

图片

 

风险价值方法论

计算 VaR 的方法主要有 3 种。

第一种是历史方法,它着眼于一个人之前的收益历史。

第二种是方差-协方差法。这种方法假设收益和损失是正态分布的。

最后一种方法是进行蒙特卡罗模拟。该技术使用计算模型来模拟数百或数千次可能迭代的期望收益。

图片

 

历史方法

历史方法只是重新组织实际的历史收益,将它们从最差到最好的顺序排列。然后从风险的角度假设历史会重演。

作为一个历史例子,让我们看一下纳斯达克 100 ETF。如果我们计算每天的收益,我们会产生丰富的数据设置超过 1,400 点。让我们将它们放在一个直方图中。例如,在直方图的最高点(最高柱),有超过 250 天的日收益率在 0% 到 1% 之间。在最右边,你几乎看不到一个 10% 的小条;它代表了 5 年多内的一天(2000 年 1 月),每日收益率达到了惊人的 9.4%。4

请注意构成直方图“左尾”的红色条。这些是每日收益率最低的 5%(因为收益率是从左到右排序的,所以最差的总是“左尾”)。红条从每日损失 4% 到 8% 不等。因为这些是所有每日收益中最差的 5%,我们可以有 95% 的信心说,最差的每日损失不会超过 4%。换句话说,我们有 95% 的信心预计我们的收益将超过 -4%。简而言之,这就是 VaR。

 

图片

方差-协方差法,也称为参数法

 

该方法假设股票收益是正态分布的。换句话说,它只要求我们估计两个因素——期望(或平均)收益和标准差——这使我们能够绘制正态分布曲线。在这里,我们根据相同的实际收益数据 绘制正态曲线:

方差-协方差背后的思想类似于历史方法背后的思想——除了我们使用熟悉的曲线而不是实际数据。正态曲线的优点是我们可以自动知道最差的 5% 和 1% 在曲线上的位置。它们是我们期望的置信度和标准偏差的函数。

信心# 标准偏差 (σ)
95%(高) - 1.65 x σ
99%(非常高) - 2.33 x σ

上面的蓝色曲线是实际每日标准差,即2.64%。平均每日收益恰好接近于零,因此为了说明目的,我们将假设平均收益为零。以下是将实际标准差代入上述公式的结果:

信心 σ计算等于
95%(高) - 1.65 x σ - 1.65 x (2.64%) = -4.36%
99%(非常高) - 2.33 x σ - 2.33 x (2.64%) = -6.15%

我们有95%的信心说,最差的每日损失不会超过-4.36%

图片

蒙特卡洛模拟

第三种方法涉及为未来股票价格收益开发一个模型,并通过该模型运行多个假设试验。蒙特卡洛模拟是指任何随机生成试验的方法,但它本身并没有告诉我们任何有关基础方法的信息 。

对于大多数用户来说,蒙特卡洛模拟相当于一个随机、概率结果的“黑匣子”生成器。在不深入细节的情况下,我们根据其历史交易模式进行了蒙特卡罗模拟。在我们的模拟中,进行了 700 次试验。如果我们再次运行它,我们会得到不同的结果——尽管差异很可能会缩小。

总而言之,我们对月收益进行了 700 次假设试验。其中,5个结果在-5%和-7%之间;2个在 -7% 和 -9% 之间。这意味着最差的7个结果(即最差的 1%)低于 -5%。因此,蒙特卡罗模拟得出以下 VaR 类型的结论:在 99% 的置信度下,我们预计在任何给定月份的损失不会超过 5%。

图片

 

风险价值 (VaR) 的优势

1. 易于理解

风险价值是一个数字,表示给定投资组合的风险程度。风险价值以价格单位或百分比来衡量。这使得 VaR 的解释和理解相对简单。

2. 适用性

风险价值适用于所有类型的资产——债券、股票、衍生品、货币等。因此,不同的银行和金融机构可以很容易地使用 VaR 来评估不同投资的盈利能力和风险,并根据 VaR 分配风险.

3.通用

风险价值数字被广泛使用,因此它是购买、出售或推荐资产的公认标准。

图片

 

风险价值的限制

1. 大型投资组合

计算投资组合的风险价值不仅需要计算每种资产的风险和收益,还需要计算它们之间的相关性。因此,投资组合中资产的数量或多样性越大,计算 VaR 的难度就越大。

2.方法不同

计算 VaR 的不同方法可能导致相同投资组合的不同结果。

3. 假设

VaR 的计算需要做出一些假设并将其用作输入。如果假设无效,那么 VaR 数字也无效。

 

 

图片

如何使用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

图片


点击标题查阅往期内容

图片

风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

现在,我们将挑选出每个资产的最新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与蒙特卡洛模拟模型配合使用,也可用于通过股价预测损失和收益。这可以通过将产生的每日收益值与各自股票的最终价格相乘来实现。

图片

点击文末 “阅读原文”

获取全文完整资料。

本文选自《Python蒙特卡罗(Monte Carlo)模拟计算投资组合的风险价值(VaR)》。

点击标题查阅往期内容

R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型R语言中实现马尔可夫链蒙特卡罗MCMC模型R语言BUGS/JAGS贝叶斯分析: 马尔科夫链蒙特卡洛方法(MCMC)采样R语言使用蒙特卡洛模拟进行正态性检验及可视化R语言蒙特卡洛计算和快速傅立叶变换计算矩生成函数NBA体育决策中的数据挖掘分析:线性模型和蒙特卡罗模拟Python风险价值计算投资组合VaR(Value at Risk )、期望损失ES(Expected Shortfall)GARCH(1,1),MA以及历史模拟法的VaR比较Python计算股票投资组合的风险价值(VaR)R语言求风险价值VaR Value at RiskR语言基于ARMA-GARCH-VaR模型拟合和预测实证研究分析案例R语言风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计R语言基于ARMA-GARCH过程的VaR拟合和预测GARCH(1,1),MA以及历史模拟法的VaR比较matlab使用Copula仿真优化市场风险数据VaR分析 R语言GARCH模型对股市sp500收益率bootstrap、滚动估计预测VaR、拟合诊断和蒙特卡罗模拟可视化
R语言单变量和多变量(多元)动态条件相关系数DCC-GARCH模型分析股票收益率金融时间序列数据波动率
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
GARCH-DCC模型和DCC(MVT)建模估计
R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较
ARIMA、GARCH 和 VAR模型估计、预测ts 和 xts格式时间序列
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析
Garch波动率预测的区制转移交易策略
金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
R语言GARCH建模常用软件包比较、拟合标准普尔SP 500指数波动率时间序列和预测可视化
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
MATLAB用GARCH模型对股票市场收益率时间序列波动的拟合与预测
R语言极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测
R语言时间序列GARCH模型分析股市波动率
R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测
使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析
R语言多元Copula GARCH 模型时间序列预测
R语言使用多元AR-GARCH模型衡量市场风险
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言用Garch模型和回归模型对股票价格分析
GARCH(1,1),MA以及历史模拟法的VaR比较
matlab估计arma garch 条件均值和方差模型

标签:风险,Monte,语言,组合,Python,模型,模拟计算,GARCH,VaR
From: https://www.cnblogs.com/tecdat/p/17444802.html

相关文章

  • python二维数组切片
    随堂测试这道题错了,于是怒而发blog,是分割维度的标识符,如果对象是二维数组,则切片应当是x[,]的形式,逗号之前和之后分别表示对象的第0个维度和第1个维度;如果对象是三维数组,则切片应当是x[,,],里面有两个逗号,分割出三个间隔,三个间隔的前、中和后分别表示对象的第0、1、2个维度。每个......
  • python内置库--json
    关于jsonJSON是一种按照JavaScript对象语法的数据格式相关介绍https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON很多网页和app前后端数据交换的数据的格式就是json,打开F12或者抓包工具就可以看到py的json模块常用函数相关函数介绍json.dumps()......
  • python 操作 xlsx
    目录读取/写入:openpyxldemo1读取/写入:openpyxldemo1importopenpyxlimportos#创建exceldefwrite_excel_xlsx(path,sheet_name,value):ifnotos.path.exists(path):write_new_excel_xlsx(path,sheet_name,value)else:append_write_exc......
  • Python程序与设计
    Python学习笔记2-27在命令行窗口中启动的Python解释器中实现在Python自带的IDLE中实现print("Helloworld")编码规范每个import语句只导入一个模块,尽量避免一次导入多个模块不要在行尾添加分号“:”,也不要用分号将两条命令放在同一行建议每行不超过80个字符使用必要的空行可以增加代......
  • 用Python开发输入法后台(7)——关于规则的规则
    我又重构了一遍输入法,目的是定义输入法规则的规则,只要遵循这些规则,就可以方便的制定新的输入规则.我的输入法规则如下:规则文件名:ImeRule.py需要实现函数OnFilterKeyDown原型:f(keyCode:int,keyStates:list,msg:dict)->bool功能:键被按下的消息,根据返回值确......
  • Python读excel——xlrd
    Python读excel——xlrdPython读取Excel表格,相比xlwt来说,xlrd提供的接口比较多,但过程也有几个比较麻烦的问题,比如读取日期、读合并单元格内容。下面先看看基本的操作:图表数据整体思路为,打开文件,选定表格,读取行列内容,读取表格内数据详细代码如下:importxlrdfromdatetimeimportda......
  • python daal test
     importosimportsysfromdaal.algorithmsimportlow_order_momentsfromdaal.data_managementimportFileDataSource,DataSourceIfacefromdaal.data_managementimport(readOnly,NumericTableIface,BlockDescriptor,BlockDescriptor_Float32,BlockDescriptor_......
  • python二维数组初始化
    >>>a=[[0]*3foriinrange(3)]>>>a[[0,0,0],[0,0,0],[0,0,0]]>>>a[1][1]=121>>>a[[0,0,0],[0,121,0],[0,0,0]]>>>a[0][0]=11>>>a[[11,0,0],[0,121,0],[0,0,0]]>>>......
  • python pickle to json
    ref:https://gist.github.com/Samurais/567ebca0f59c612eb977065008aad867 '''Convertapklfileintojsonfile'''importsysimportosimportpickleimportjsondefconvert_dict_to_json(file_path):withopen(file_path,&......
  • python spark 求解最大 最小 平均 中位数
    rating_data_raw=sc.textFile("%s/ml-100k/u.data"%PATH)printrating_data_raw.first()num_ratings=rating_data_raw.count()print"Ratings:%d"%num_ratings#In[35]:rating_data=rating_data_raw.map(lambdaline:line.split(&quo......