首页 > 编程语言 >Python蒙特卡罗(Monte Carlo)模拟计算投资组合的风险价值(VaR)

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

时间:2024-07-31 19:40:31浏览次数:9  
标签:Monte 组合 Python 模型 模拟计算 VAR 计算 VaR 蒙特卡洛

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

原文出处:拓端数据部落公众号

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

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

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

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

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

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

蒙特卡洛模拟

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

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

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

 

在Python中计算VaR

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

#导入所有需要的库import matplotlib.pyplot as pltimport numpy as npimport 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与蒙特卡洛模拟模型配合使用,也可用于通过股价预测损失和收益。这可以通过将产生的每日收益值与各自股票的最终价格相乘来实现。

 

最受欢迎的见解

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模型的不同类型的脉冲响应分析

 

标签:Monte,组合,Python,模型,模拟计算,VAR,计算,VaR,蒙特卡洛
From: https://www.cnblogs.com/tecdat/p/18335313

相关文章

  • Python 元类深析:定制类创建的高级工
    元类是Python中一个强大而高级的特性,它允许我们自定义类的创建过程。本文将详细介绍Python元类的概念、工作原理以及常见用途。一. 什么是元类简单来说,元类就是用来创建类的类。在Python中,类也是对象,而元类就是用来创建这些类对象的。我们知道类是用来创建对象的......
  • 【视频讲解】Python用LSTM、Wavenet神经网络、LightGBM预测股价
    原文链接:https://tecdat.cn/?p=37184原文出处:拓端数据部落公众号 分析师:YuyanYe在金融科技的浪潮中,量化投资方法以其数据驱动和模型导向的特性,日益成为资本市场分析的重要工具。特别是,长短期记忆网络(LSTM)、Wavenet以及LightGBM等先进的机器学习算法,因其在时间序列预测中的卓......
  • Python写UI自动化--playwright(点击操作)
    本篇介绍playwright点击操作,click()方法的常用参数目录0.selector(必需)1.modifiers(可选)2.position(可选)3.button(可选)4.click_count(可选)5.delay6.timeout(可选)7.force=True(可选)8.trial=True(可选)9.no_wait_after(可选)注意事项0.selecto......
  • 【2024最新版】超详细Python+Pycharm安装保姆级教程,Python+Pycharm环境配置和使用指南
    本文将从Python解释器安装到Pycharm专业版安装和配置汉化等使用都进行了详细介绍,希望能够帮助到大家。Python解释器&Pycharm安装包&Pycharm破姐插件我都打包好了。这份完整版的Python安装包已经上传至CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费获取......
  • python实现jenkins凭据录入
    #新增配置importjenkins.model.*importjenkins.plugins.publish_over_ssh.BapSshHostConfigurationdefinst=Jenkins.getInstance()defpublish_ssh=inst.getDescriptor("jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin")defconfiguration=new......
  • funccache:革命性的Python函数缓存工具,轻松提升代码效率!
    funccacheEnglish|中文如其名,funccache实现函数缓存功能,由GQYLPY团队研发的一个框架,可缓存某个函数或某个类中定义的所有方法的返回值。你的程序中有一个函数会被多次调用,并且返回值不变,你会怎么做?为提高代码效率,你会先调用一次该函数并把返回值存到一个变量,之后就使用......
  • Python - Functional programming
    Functionalprogrammingisaprogrammingparadigminwhichmostoftheworkinaprogramisdoneusingpurefunctions.Apurefunctionisafunctionwithoutanysideeffects;itsreturnvalueisalwaysdeterminedbyitsinputarguments,soitalwaysreturn......
  • Python - Lambda expressions as closures
    Aclosureisanestedfunctionthatcanaccessfreevariablesfromanenclosingfunctionevenafterithasfinisheditsexecution.Weknowthat,likenestedfunctiondefinitions,lambdaexpressionscanreferencevaluesfromtheenclosingscope,solambda......
  • Python - Creating jump tables using lambda functions
    Wecanplacelambdafunctioninsidelistanddictionaryliterals.Thiswaywecanuselambdaexpressionstocreatejumptables.>>>L=[lambdas:s.strip().lower(),... lambdas:s.strip().upper(),... lambdas:s.lstrip().title(),... lambd......
  • exceptionx:灵活便捷的Python异常处理库,让异常处理更高效!
    exceptionxEnglish|中文exceptionx是一个灵活且便捷的Python异常处理库,允许你动态创建异常类,并提供多种异常处理机制。exceptionx的前身是gqylpy-exception。pip3installexceptionx动态创建异常使用exceptionx,你可以在需要时即时创建异常类,而无需提前定义。例如,如......