首页 > 编程语言 >单一资产VaR风险--基于python

单一资产VaR风险--基于python

时间:2023-02-02 15:26:18浏览次数:45  
标签:1day -- ret python value VaR np history

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

一、获取数据:

计算日收益率:

import pandas as pd
import numpy as np
import akshare as ak
import scipy.stats as st

# 读入中国平安 「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}万元') 

 

标签:1day,--,ret,python,value,VaR,np,history
From: https://www.cnblogs.com/leon507/p/17086103.html

相关文章

  • 浮动布局
    概念:当元素浮动以后可以向左或向右移动,直到它的外边缘碰到包含它的框或者另一个浮动元素为止元素浮动以后就会脱离正常的文档流,所以文档的普通流中的框就变得好像浮动......
  • 【达梦数据库】MySQL 的ON DUPLICATE KEY UPDATE语句在达梦数据库中使用的方式
    背景想要做数据同步,但不知道待同步的数据是新增或更新于是想,如果数据库可以识别InsertOrUpdate就好了使用的是达梦数据库but:1、达梦是没有ONDUPLICATEKEYUPDAT......
  • axios封装+根据环境请求不同的url
    封装axios的时候,会创建一个axios实例,然后配置他的baseUrl,今天搞了好久才搞定,特来记录下首先安装axiosnpminstallaxios然后新建文件夹utils,建个js文件,用来封装axio......
  • Linux 的目录查看 tree
    一、安装Ubuntuapt-getinstalltreecentosyum-yinstalltree不是root权限别忘了加sudo二、使用最常用的几个命令:tree-L4#查看当前目录下4层tree-a......
  • Java里面为什么搞了双重检查锁,写完这篇文章终于真相大白了
    双重检查锁定与延迟初始化在java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时程序员可能会采用延迟初始化。但要......
  • git常用命令
    git提交代码1.一般先拉取代码后再提交gitpull2.将文件加入到暂存区gitadd.3.提交代码gitcommit-m"此处为提交描述"4.推送代码到远程仓库gitpushgit切换分......
  • Otter实现mysql数据库指定多个表实时单向同步
    背景生产库接入太多应用程序,现需要搭建从库用于测试并数据分析,由于并发量大,mysql自带的主从同步存在瓶颈,主从同步延迟增大,因此通过otter的方案实现主从同步。计划192.16......
  • 基础
    泛型工具Required将类型的属性变成必选interfacePerson{name?:string;age?:number;hobby?:string[];}typeRequired<T>={[KeyinkeyofT]-?:T[......
  • 《Vue.js 设计与实现》读书笔记 - 第7章、渲染器的设计
    第7章、渲染器的设计7.1渲染器与响应系统的结合渲染器需要有跨平台的能力。在浏览器端会渲染为真实的DOM元素。const{effect,ref}=VueReactivity//VueRea......
  • gdb 打印出错行 Find Where a C++ Exception is Thrown
    https://www.digitalpeer.com/blog/find-where-a-cpp-exception-is-thrownHere'sasimpleexampleofhowtofindwhereaC++exceptionisthrownusinggdb.There's......