一、数据准备,先在excel表格上计算每日的波动率;

excel数据为:

二、数据导入:

import pandas as pd
import numpy as np
import akshare as ak
ret=pd.read_excel('text.xlsx',index_col="date")
ret

三、协方差法:

value = 100000000 #投资组合市值为1亿元
R_mean = ret.mean() #计算均值
R_cov = ret.cov() #计算协方差
R_vol = ret.std() #计算标准差
#投资组合各资产权重
weights = np.array([0.15,0.20,0.5,0.05,0.1])
#计算投资组合的期望收益率
Rp_daily = np.sum(weights*R_mean)
#计算投资组合的日波动率
Vp_daily = np.sqrt(np.dot(weights,np.dot(R_cov,weights.T))) def VaR_VCM(value,mu,sig,X,T):
'''
Parameters
----------
value : 资产的价值
mu : 资产的日均收益率
sig : 资产的日均波动率(标准差)
X : 置信水平
T : 持有天数
'''
z = abs(st.norm.ppf(q=1-X))
return np.sqrt(T)*value*(z*sig-mu) VaR99_1day_VCM = VaR_VCM(value,Rp_daily,Vp_daily, 0.99, 1)
VaR99_10day_VCM = VaR_VCM(value,Rp_daily,Vp_daily, 0.99, 10)
VaR95_1day_VCM = VaR_VCM(value,Rp_daily,Vp_daily, 0.95, 1)
VaR95_10day_VCM = VaR_VCM(value,Rp_daily,Vp_daily,0.95, 10) print(f'方差-协方差法1天、99%的VaR:{VaR99_1day_VCM/10000:.2f}万元')
print(f'方差-协方差法10天、99%的VaR:{VaR99_10day_VCM/10000:.2f}万元')
print(f'方差-协方差法1天、95%的VaR:{VaR95_1day_VCM/10000:.2f}万元')
print(f'方差-协方差法10天、95%的VaR:{VaR95_10day_VCM/10000:.2f}万元')

结果:

方差-协方差法1天、99%的VaR:544.65万元
方差-协方差法10天、99%的VaR:1722.32万元
方差-协方差法1天、95%的VaR:385.20万元
方差-协方差法10天、95%的VaR:1218.12万元

四、历史模拟法

value = 100000000 #投资组合市值为1亿元

#投资组合各资产权重
weights = np.array([0.15,0.20,0.5,0.05,0.1])
#历史交易日投资组合的收益率序列
Rp = np.dot(ret,weights)
Rp = pd.DataFrame(Rp,index=ret.index,columns=['投资组合日收益']) def VaR_history(value,ret,X,T):
'''
Parameters
----------
value : 资产的价值
ret : 资产的日收益率序列
X : 置信水平
T : 持有天数
'''
# Numpy 的 percentile 函数,可以直接返回序列相应的分位数
return value*np.sqrt(T)*abs(np.percentile(ret,(1-X)*100)) VaR99_1day_history = VaR_history(value,Rp,0.99,1)
VaR99_10day_history = VaR_history(value,Rp,0.99,10)
VaR95_1day_history = VaR_history(value,Rp,0.95,1)
VaR95_10day_history = VaR_history(value,Rp,0.95,10) print(f'历史模拟法1天、99%的VaR:{VaR99_1day_history/10000:.2f}万元')
print(f'历史模拟法10天、99%的VaR:{VaR99_10day_history/10000:.2f}万元')
print(f'历史模拟法1天、95%的VaR:{VaR95_1day_history/10000:.2f}万元')
print(f'历史模拟法10天、95%的VaR:{VaR95_10day_history/10000:.2f}万元')

结果:

历史模拟法1天、99%的VaR:725.59万元
历史模拟法10天、99%的VaR:2294.51万元
历史模拟法1天、95%的VaR:333.50万元
历史模拟法10天、95%的VaR:1054.62万元

五、蒙特卡洛模拟法

value = 100000000 #投资组合市值为1亿元

#投资组合各资产权重
weights = np.array([0.15,0.20,0.5,0.05,0.1])
m = 10000 #模拟次数
e1 = np.random.standard_t(df=len(ret),size=m) #自由度为收益率数据长度的t分布
#e1 = np.random.standard_normal(size=m) #若服从正态分布,则此代码代替上行代码
R_mean_year = ret.mean()*252 #计算每一资产的年化平均收益率
R_vol_year = ret.std()*np.sqrt(252) #计算每一资产的年化波动率
dt=1/252 #时间间隔
S0=np.ones(len(weights))
S=np.zeros(shape=(m,len(weights))) #存放(模拟次数×资产数量)个模拟价格数据
for i in range(len(weights)):#代入随机过程
S[:,i]=S0[i]*(np.exp((R_mean_year[i]-0.5*R_vol_year[i]**2)*dt+R_vol_year[i]*e1*np.sqrt(dt)))
#每一行∑资产收益率×相应权重就得到资产组合的收益率,一共10000行
Sp_ret=(np.dot(S/S0-1,weights)) #资产组合收益率 #蒙特卡洛模拟法计算VaR
VaR99_1day_MS = value*abs(np.percentile(Sp_ret,1))
VaR99_10day_MS = np.sqrt(10)*VaR99_1day_MS
VaR95_1day_MS = value*abs(np.percentile(Sp_ret,5))
VaR95_10day_MS = np.sqrt(10)*VaR95_1day_MS #由于抽样随机数的原因,结果可能会有不同
print(f'蒙特卡罗模拟法1天、99%的VaR:{VaR99_1day_MS/10000:.2f}万元')
print(f'蒙特卡罗模拟法10天、99%的VaR:{VaR99_10day_MS/10000:.2f}万元')
print(f'蒙特卡罗模拟法1天、95%的VaR:{VaR95_1day_MS/10000:.2f}万元')
print(f'蒙特卡罗模拟法10天、95%的VaR:{VaR95_10day_MS/10000:.2f}万元')

结果:

蒙特卡罗模拟法1天、99%的VaR:712.66万元

蒙特卡罗模拟法10天、99%的VaR:2253.64万元

蒙特卡罗模拟法1天、95%的VaR:510.74万元

蒙特卡罗模拟法10天、95%的VAR:1615.09万元

参考资料:https://blog.csdn.net/mfsdmlove/article/details/126081926 

若从akshare接口获取处理数据

各股票的日收益率:

import pandas as pd
import numpy as np
import akshare as ak
import scipy.stats as st # 读入5支股票 2015-01-01 到 2021-12-31 日收盘价数据
def get_ret(code):
data = ak.stock_zh_a_hist(symbol=code, period="daily", start_date="20150101", end_date='20211231', adjust="")
data.index = pd.to_datetime(data['日期'],format='%Y-%m-%d') #设置日期索引
close = data['收盘'] #日收盘价
close.name = code
ret = np.log(close/close.shift(1)) #日收益率
return ret codes=['000001','000651','300015','600519','000625']
ret = pd.DataFrame()
for code in codes:
ret_ = get_ret(code)
ret = pd.concat([ret,ret_],axis=1)
ret = ret.dropna()

多资产VAR风险--基于python处理的更多相关文章

  1. 基于python深度学习的apk风险预测脚本

    基于python深度学习的apk风险预测脚本 为了有效判断安卓apk有无恶意操作,利用python脚本,通过解包apk文件,对其中xml文件进行特征提取,通过机器学习构建模型,预测位置的apk包是否有 ...

  2. selenium2自动化测试实战--基于Python语言

    自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...

  3. 符号执行-基于python的二进制分析框架angr

    转载:All Right 符号执行概述 在学习这个框架之前首先要知道符号执行.符号执行技术使用符号值代替数字值执行程序,得到的变量的值是由输入变 量的符号值和常量组成的表达式.符号执行技术首先由Kin ...

  4. Websocket - Websocket原理(握手、解密、加密)、基于Python实现简单示例

    一.Websocket原理(握手.解密.加密) WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实 ...

  5. 看我如何基于Python&Facepp打造智能监控系统

    由于种种原因,最近想亲自做一个基于python&facepp打造的智能监控系统. 0×00:萌芽 1:暑假在家很无聊 想出去玩,找不到人.玩个lol(已卸载),老是坑人.实在是无聊至极,不过, ...

  6. TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具

    怀着鸡动的心情跟大家介绍一款国产开源运维软件TriAquae,轻松帮你搞定大部分运维工作!TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具,可以允许用户通过一台控制端管理上千 ...

  7. 通过nginx搭建基于python的web环境

    前言: 在搭建开始前,我们先来梳理下web服务工作流程,先看下图: 1.用户(PC)向web服务器发起http请求 2.web服务器判断用户请求文件是否为静态文件,是则直接读取静态文件并返回给用户,不 ...

  8. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  9. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  10. 关于《selenium2自动测试实战--基于Python语言》

    关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...

随机推荐

  1. (java 实现开箱即用基于 redis 的分布式锁

    项目简介 lock 为 java 设计的分布式锁,开箱即用,纵享丝滑. 开源地址:https://github.com/houbb/lock 目的 开箱即用,支持注解式和过程式调用 基于 redis ...

  2. 搭建漏洞环境及实战——搭建XSS测试平台

    XSS测试平台是测试XSS漏洞获取cookie并接收Web页面的平台,XSS可以做成JS能做的所有事,包括但不限于窃取cookie.后台增删文章.钓鱼.利用CSS漏洞进行传播.修改网页代码.网站重定向 ...

  3. javascript计算器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 跳石头(NOIP2015)

    AcWing 洛谷 解题思路 这题看到最短跳跃距离尽可能长就会想到二分 但是我们二分的\(check\)函数怎么写呢 可以看到限制条件移走的石头最多只能是\(m\)块 我们二分这个最短距离 容易想到一 ...

  5. 绿色版MySQL8.0.26安装流程

    下载  5.7 8.0 官网 https://dev.mysql.com/downloads/mysql/ 国内镜像网站 https://developer.aliyun.com/mirror/ ​  ...

  6. 【转载】ADOX.Catalog中文帮助详细说明chm文档

    首先给个完全版的地址,如果您机器上装过OFFICE应该可以打开的:ADOX 对象模型, 地址是:"C:\Program Files\Common Files\Microsoft Shared ...

  7. [cocos2d-x]关于菜单项

    菜单项的分类 MenuItem:菜单项类,它是一个虚基类,因此必须实现它的子类,再把子类对象赋给父类指针. MenuItemFont:字体菜单项. MenuItemAtlasFont:字体菜单项,和第 ...

  8. 解决 requests cookies 为空的坑

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/5d14f0d7.html 你好,我是测试蔡坨坨. 我们在做接口自动化测试的时候,一般会通过调用登录接口来获取cookies. ...

  9. STM32F103和AIR32F103的FreeRTOS中断优先级

    关于 Arm Cortex M 系列内核的中断优先级 https://community.arm.com/arm-community-blogs/b/embedded-blog/posts/cutti ...

  10. 工作这么多年,我总结的数据传输对象 (DTO) 的最佳实践

    前言 数据传输对象 (DTO) 是一种设计模式,常用于软件开发不同层或者不同系统之间传输数据.DTO 的主要目的是封装数据并防止它被其他层或系统直接访问或修改.通过遵循一组最佳实践,开发人员可以确保他 ...