数据源:使用 AKShare包。它是一个免费、开源的 Python 财经数据接口包。网址https://www.akshare.xyz/index.html

一、获取数据:

计算日收益率:

import pandas as pd
import numpy as np
import akshare as ak

# 读入中国平安 「000001」 2015-01-01 到 2021-12-31 日收盘价数据
data = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20150101", end_date='20211231', adjust="")
data.index = pd.to_datetime(data['日期'],format='%Y-%m-%d') #设置日期索引
close = data['收盘'] #日收盘价
ret = np.log(close/close.shift(1)) #日收益率
ret = ret.dropna()

二、方差-协方差法:

value = 1000000 #中国平安股票价值为100万元
R_mean = ret.mean() #计算均值
R_vol = ret.std() #计算标准差 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,R_mean,R_vol, 0.99, 1)
VaR99_10day_VCM = VaR_VCM(value,R_mean,R_vol, 0.99, 10)
VaR95_1day_VCM = VaR_VCM(value,R_mean,R_vol, 0.95, 1)
VaR95_10day_VCM = VaR_VCM(value,R_mean,R_vol,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}万元')

三、历史模拟法:

value = 1000000 #中国平安股票价值为100万元

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,ret,0.99,1)
VaR99_10day_history = VaR_history(value,ret,0.99,10)
VaR95_1day_history = VaR_history(value,ret,0.95,1)
VaR95_10day_history = VaR_history(value,ret,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}万元')

四、蒙特卡罗模拟法:

value = 1000000 #中国平安股票价值为100万元

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=1
S=np.zeros(m) #存放模拟次数个模拟价格数据
#代入随机过程
S=S0*(np.exp((R_mean_year-0.5*R_vol_year**2)*dt+R_vol_year*e1*np.sqrt(dt)))
F_ret=S/S0-1 #模拟未来收益率 #蒙特卡洛模拟法计算VaR
VaR99_1day_MS = value*abs(np.percentile(F_ret,1))
VaR99_10day_MS = np.sqrt(10)*VaR99_1day_MS
VaR95_1day_MS = value*abs(np.percentile(F_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}万元')

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

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

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

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

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

  3. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...

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

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

  5. Python 基于python操纵redis入门介绍

    基于python操纵redis入门介绍 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...

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

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

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

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

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

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

  9. 基于Python的SQL Server数据库对象同步轻量级实现

    缘由 日常工作中经常遇到类似的问题:把某个服务器上的某些指定的表同步到另外一台服务器.类似需求用SSIS或者其他ETL工作很容易实现,比如用SSIS的话就可以,但会存在相当一部分反复的手工操作.建源的 ...

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

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

随机推荐

  1. 一篇文章教你实战Docker容器数据卷

    在上一篇中,咱们对Docker中的容器数据卷做了介绍.已经知道了容器数据卷是什么?能干什么用.那么本篇咱们就来实战容器数据卷,Docker容器数据卷案例主要做以下三个案例 1:宿主机(也就是Docke ...

  2. Redis基础学习笔记

    技术分类: 1.解决功能性的问题:Java.Jsp.RDBMS.Tomcat.HTML.Linux.JDBC.SVN 2.解决扩展性的问题:Struts.Spring.SpringMVC.Hibern ...

  3. 90%的Java开发人员都会犯的5个错误

    前言 作为一名java开发程序员,不知道大家有没有遇到过一些匪夷所思的bug.这些错误通常需要您几个小时才能解决.当你找到它们的时候,你可能会默默地骂自己是个傻瓜.是的,这些可笑的bug基本上都是你忽 ...

  4. [OpenCV实战]15 基于深度学习的目标跟踪算法GOTURN

    目录 1 什么是对象跟踪和GOTURN 2 在OpenCV中使用GOTURN 3 GOTURN优缺点 4 参考 在这篇文章中,我们将学习一种基于深度学习的目标跟踪算法GOTURN.GOTURN在Caf ...

  5. [R语言] ggplot2入门笔记4—前50个ggplot2可视化效果

    文章目录 通用教程简介(Introduction To ggplot2) 4 ggplot2入门笔记4-前50个ggplot2可视化效果 1 相关性(Correlation) 1.1 散点图(Scat ...

  6. dfs学习笔记

    题目链接 可以通过参考一道例题来加深对dfs的认知和学习 题意描述 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数 字序列中不允许出现重复的数字. 输出格式 ...

  7. GC耗时高,原因竟是服务流量小?

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 最近,我们系统配置了GC耗时的监控,但配置上之后,系统会偶尔出现GC耗时大于1s的报警,排查花了一些力气,故在这里 ...

  8. VMware Workstation Pro 16安装CentOS7超详细图文步骤

    安装的需要 VMware官方网站安装VMware Workstation Pro 16: https://download3.vmware.com/software/wkst/file/VMware- ...

  9. DVWA靶场实战(二)——Command Injection

    DVWA靶场实战(二) 二.Command Injection: 1.漏洞介绍: Command Injection,中文叫做命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令 ...

  10. [WPF]创建系统栏小图标

    隐藏窗体任务栏图标 /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class Ma ...