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

单一资产VBA风险--基于python处理

时间:2023-02-02 15:14:22浏览次数:39  
标签:10 VBA -- 模拟法 ret python np value VaR

数据来源:AKShare包;介绍:https://www.akshare.xyz/index.html;它是一个免费、开源的 Python 财经数据接口包。

一、计算日收益率;

import pandas as pd
import numpy as np
import akshare as ak
import scipy.stats as st
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}万元')  

结果:

方差-协方差法1天、99%的VaR:5.16万元
方差-协方差法10天、99%的VaR:16.32万元
方差-协方差法1天、95%的VaR:3.65万元
方差-协方差法10天、95%的VaR:11.54万元

三、历史模拟法

 

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}万元')  

结果:

历史模拟法1天、99%的VaR:6.13万元
历史模拟法10天、99%的VaR:19.37万元
历史模拟法1天、95%的VaR:3.17万元
历史模拟法10天、95%的VaR:10.02万元

 

四、蒙特卡罗模拟法:

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不一致

 

标签:10,VBA,--,模拟法,ret,python,np,value,VaR
From: https://www.cnblogs.com/leon507/p/17086069.html

相关文章

  • [转]windows下redis的下载安装
    参考文章地址:1.http://m.biancheng.net/redis/windows-installer.html2.https://www.cnblogs.com/yyee/p/15835952.html 下载地址:Releases·tporadowski/redis(g......
  • maven资源文件打包过程
    一般地,我们的src/main/resources目录下有很多配置文件,比如jdbc.properties配置文件;当编译或打包的时候,会使用插件maven-resources-plugin的resources目标,将src/main/resou......
  • 检查Chrome收藏夹链接是否有效
    检查Chrome浏览器标签,通过Chrome导出的收藏夹文件,挨个使用httpget请求检查url是否有效packagemainimport( "bufio" "errors" "flag" "fmt" "io" "net" "net/h......
  • 智能学习灯赛道竞争日趋激烈 火山引擎 VeDI 用数据技术助力打造新优势
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群智能学习灯的赛道正变得越来越拥挤。2021年3月2日,腾讯教育联合暗物智能科技联合发布......
  • Java Iterator(迭代器)的作用?
    JavaIterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合。获取迭代器的方法:arrayList.Iterator()。参考1:https://www.runoo......
  • pandas 基础
    安装及导入安装可以使用pip安装pipinstallpandas导入importpandasaspd数据结构SeriesSeries是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类......
  • maven自定义替换的分隔符
    自定义分隔符,需要我们配置maven-resources-plugin插件的参数,如下<plugins>    <plugin>        <groupId>org.apache.maven.plugins</groupId>     ......
  • ubuntu22.04安装完后硬盘变小
    1、200G的硬盘,安装完后发现只有不足100G可用  2、fdisk查看明明有个198GB 3、发现有99G,25344没有分配  4、分配并退出lvextend-l+25344/dev/mapper/ubun......
  • 销量预测的方法与流程
    销量预测:评价指标:单个原子颗粒度,Acc=1-MAPE=1-abs(真实销量-预测销量)/真实销量全部的预测准确率,每个商品的实际销量加权平均 解题思路:销量可以分为日销和大促分开,......
  • maven资源文件排除某些资源的配置
    <resource>    <!--指定资源文件的目录-->    <directory>${project.basedir}/src/main/resources</directory>    <!--是否开启过滤替换配置,默认是不开启......