精华内容
下载资源
问答
  • 一、知识点介绍1.1 历史模拟法我们在之前有用到Delta-Normal的GARCH和RiskMetrics方法来计算VaR和ES,假设的是残差满足正态分布,对残差进行二次相关序列的建模并拟合残差,能够得到未来的预测值。而这里说的历史...

    一、知识点介绍

    1.1 历史模拟法

    我们在之前有用到Delta-Normal的GARCH和RiskMetrics方法来计算VaR和ES,假设的是残差满足正态分布,对残差进行二次相关序列的建模并拟合残差,能够得到未来的预测值。而这里说的历史模拟法和蒙特卡罗模拟法跟上面有点不太一样,所基于的前提跟GARCH和RiskMetrics方法认为残差存在着二次自相关不同,本节所涉及到的两种方法也是认为历史可以预测未来(即趋势存在着一定的平稳性),历史模拟法认为历史的分布和未来的分布是一致的,因此历史所计算出来的VaR和ES可以用来代替未来的VaR和ES。有点像电影《土拨鼠之日》不断重复的一天。

    1.2 蒙特卡罗模拟法

    跟历史模拟法不同,蒙特卡罗模拟法认为的是标准化残差是满足某种分布的(比如说学生t分布),它跟《土拨鼠之日》有些不同,并不是每天的简单重复,有点类似于《楚门的世界》,每天都会有向前一点点的变化,而在这个波动率的变化当中,这里的一点点变化就是标准化残差沿着学生t分布在变动。在这里我有必要解释下标准化残差的概念,其实一开始对这个概念也是糊里糊涂的,但是后来看到代码的实现,其实发现跟标准化正态分布的数据点有点类似。实际上我们在刻画残差的时候,假设说没有其他无关的扰动,数据的数值变动(也就是残差)是完全遵循我们模型算出来的总体标准差sigma的变动的,如果是正态分布,我们应该能看到所有数据点都整整齐齐排在正态分布的曲线上(注意跟数据点出现的顺序无关,并且样本要足够大),但实际上不可能这么理想,本身模拟出来sigma也要变动,并且这个变动(err)我们假设是满足t 学生分布的,那么残差=sigama * err,这里的err是均值为0,标准差为1,自由度为df的标准的t分布,相当于t分布的err其实是一个标准,sigma*err相当于是一个线性的作用(思考利率一定的情况下,本金越多,收益当然越大)。

    我们绘制一下自由度为4的t分布图。

    curve(dt(x,df=4),from=-3, to=3, las='1', main='t distribution', cex.main=0.8)

    ff311e551554

    二、数据处理

    2.1 历史模拟法

    2.1.1 读取数据

    dd

    head(dd)#打印出前几行看一看

    dim(dd)#看看data的维度请款

    输出结果

    ff311e551554

    输出结果

    ff311e551554

    输出结果

    从返回的结果来看,数据一共有7列,有1258行。

    接下来,我们以收盘价计算出收益率的大小,同样是对数取差。

    dd

    head(dd)#打印出前6行看看结果

    ff311e551554

    2.1.2 计算VaR值

    #接下来我重新命名下改为loss,并每个值都转换成百分比的值

    loss

    #计算置信水平为95%的分位数

    VaR

    ff311e551554

    接下来我们知道了单日VaR的值是2.072488%,也就是在95%置信水平下的波动率不会超过这个值,这个是单日的,如果是多日的,则要乘以sqrt(T),然后再乘以投资金额就可以了。当然也可以用5天为一个滚动窗口,求平均值以及求这个5天窗口形成的数据的分位数VaR值,这样就不用乘以sqrt(T),但结果应该是有差别的。

    2.1.3 计算ES值

    ES是指当损失大于VaR以后的损失均值,因此我们通过排序把95%置信区间以后的最大数筛选出来,然后求算术平均就可以了。

    sloss

    ES

    ES

    ff311e551554

    所计算的单日头寸ES为2.942944%。

    2.2 蒙特卡罗模拟法

    我们接下来试着用代码来建模预测

    步骤如下:

    建立GARCH模型,预测出均值和方差方程

    进行蒙特卡罗模拟

    其中蒙特卡罗模拟计算VaR和ES的方法思路如下:

    ff311e551554

    最终得到的数据点分布还是按照之前的95%分位点的方法去取得VaR以及计算尾部均值ES。

    2.2.1 建立GARCH模型

    在这里我们加多一个参数distribution.model='std'表明标准化残差是满足t分布的。

    spec3

    #拟合模型

    fit3

    #查看模型的拟合结果

    show(fit3)

    输出结果

    ff311e551554

    我们之后还要用到这些参数来计算当天的方差->经过标准化t 学生分布转化后的残差->计算出当天的损失率的值->计算出5天损失率的总和

    我们先把这些参数都存储起来

    mu

    alpha

    beta

    df

    #从拟合结果当中提取历史波动率

    sig

    2.2.2 进行蒙特卡罗模拟

    接下来要初始化一开始的数据值

    #设置天数为一周,也就是5天

    t

    #迭代次数

    nround

    #设置随机性,这样你再重新运行代码也是相同的满足随机分布的数字

    set.seed(42)

    #生成t分布的一个矩阵,行为天数,列为迭代次数

    err

    #设置迭代的起始点,取历史数据的最后一行,包括数据点和标准差

    init

    #初始化x_t为空值

    xt

    输出结果

    ff311e551554

    ff311e551554

    #以init为起点,进行nround轮迭代

    for (j in 1:nround){

    lt

    at

    vart

    for (i in 1:t){

    var

    vart

    at

    lt

    }#此循环结束后,得到未来5期的损失变量序列的一次模拟值lt

    xt

    }#此循环结束后就得到5期损失变量总和的3000次模拟值

    输出结果

    ff311e551554

    ff311e551554

    #计算VaR值

    VaR2

    #计算ES

    sxt

    ES2

    VaR2

    ES2

    ff311e551554

    ff311e551554

    idxVaR2]#筛选出大于VaR2值的索引

    ES3

    ES3

    ff311e551554

    以另外一种方法打印出ES的均值与排列后的尾部均值是一致的,说明结果比较靠谱。

    结果表明,用蒙特卡罗模拟法得到一周的VaR值和尾部均值ES为4.376929%和5.841472%。也就是说在95%的置信水平下,未来一周最大损失率不超过4.376929%,万一发生95%外的损失均值为5.841472%。

    三、总结

    本文介绍了历史模拟法和蒙特卡罗模拟法计算VaR和ES的实现,历史模拟法比较好理解,但是蒙特卡罗模拟法的流程需要花点心思研究下,并且不同模型的前提是不同的,要关注模型成立的前提条件决定使用什么样的模型。

    参考资料

    展开全文
  • 历史模拟法VAR

    2015-04-26 21:19:19
    历史模拟法计算var,希望对同学们有所帮助
  • 基于历史模拟法的VaR计算及其优化,陈玉峰,孙洪祥,VaR是20世纪90年代初期开始发展起来的一种金融市场风险测量方法,近来已经成为金融机构的一个重要的管理测度,VaR的计算有多种方法�
  • python金融历史模拟法

    2020-09-24 14:16:24
    python金融历史模拟法 import numpy as np import pandas as pd from pylab import mpl mpl.rcParams["font.sans-serif"] = ["KaiTi"] mpl.rcParams["axes.unicode_minus"] = False # 打开表格取出里边的数据 stock...

    python金融历史模拟法

    import numpy as np
    import pandas as pd
    from pylab import mpl
    mpl.rcParams["font.sans-serif"] = ["KaiTi"]
    mpl.rcParams["axes.unicode_minus"] = False
    
    # 打开表格取出里边的数据
    stock_price = pd.read_excel("D:\python代码\\first\daorutry.xlsx",sheet_name="Sheet1",header =0,index_col=0)
    # print(stock_price)
    
    # 股票日收益
    stock_return = np.log(stock_price/stock_price.shift(1))
    # 删除缺失行
    stock_return = stock_return.dropna()
    # print(stock_return)
    # a为各自天数的收益率
    a = stock_return.loc[:,"收盘/最新价"]
    # print(a)
    
    # 设P0为固值
    P0 = 1000
    
    b = []
    for i in a * P0:
        b.append(i)
    b.sort()
    b1=[]
    for i in b:
        i = "%.2f"%i
        b1.append(i)
    print(b1)
    
    arf = float(input("请输入置信水平:"))
    # f为分位数
    f = (1-arf)*len(b1)
    #f若为1则取排序下来的第一个值(索引第一个是0)
    var = b1[int(f-1)]
    var = np.abs(float(var))
    print(var)
    
    # N为持有期
    N = int(input("请输入持有天数:"))
    var1 = np.sqrt(N)*float(var)
    print("%.8f"%var1)
    
    展开全文
  • 计算VaR的两种常用方法:参数法(正态VaR和对数正态VaR)和非参数法(历史模拟法),主要使用的函数是scipy.stats的求特定分布分位点的函数ppf,以及np.percentile求样本中的分位数。

    参数法

      正态VaR:假设资产组合的收益率服从正态分布,那么VaR也服从正态分布,VaR=-(μ-Z·σ)×P0,算出来的是loss,如果为负则为收益。μ为资产组合的期望收益率,用往年平均收益率替代;σ为组合收益率的波动率;Z=Φ-1( c )为正态分布的分位数(取正数);P0为组合的价值。证明如下:
    在这里插入图片描述

      对数正态VaR:假设资产组合的对数收益率服从正态分布,那么资产价格P和VaR服从对数正态分布,VaR=(1-eμ-z·σ)×P0,各参数的含义同上。可按照以下思路简单证明:假设资产原始价格为P0,在某一置信水平下受到一个极端冲击后价格下降为P(比如在95%的置信水平下最低价格为P),这一过程的对数收益率为R,即P=P0×eR,那么根据定义VaR=|P0-P|=|P0(1-eR)|,假设R服从正态分布,那么在此置信水平下的极端收益率为μ-z·σ,代入到R中即得VaR公式。

      注意如果要求%VaR,那么公式中就不用乘P。对数正态VaR的值会比正态VaR要小。

      假定有一家国内金融机构在2018年12月28日(最后一个交易日)的投资组合市值为1亿元,组合中配置的5种金融资产配置为:贵州茅台股票15%,交通银行股票20%,嘉实增强信用基金50%,华夏恒生ETF基金5%,博时标普500ETF基金10%。管理层要求计算持有期分别为1天和10天、置信水平为99%情况下的VaR,同时假定整个投资组合收益率是服从正态分布或对数正态分布。

    data=pd.read_excel('C:/Users/lenovo/Desktop/投资组合.xlsx',index_col=0)
    data
    Out[7]: 
                贵州茅台  交通银行  嘉实增强信用基金  华夏恒生ETF  博时标普500ETF
    日期                                                     
    2015-01-05  202.52  7.05     1.071   1.0955      1.1205
    2015-01-06  197.83  6.90     1.073   1.0860      1.1105
    2015-01-07  192.94  6.76     1.074   1.0964      1.1239
    2015-01-08  191.76  6.53     1.074   1.1042      1.1446
    2015-01-09  190.31  6.50     1.075   1.1075      1.1346
               ...   ...       ...      ...         ...
    2018-12-24  568.00  5.61     1.285   1.4505      1.5116
    2018-12-25  565.79  5.63     1.286   1.4488      1.5116
    2018-12-26  560.08  5.68     1.286   1.4475      1.5814
    2018-12-27  563.00  5.72     1.286   1.4393      1.5963
    2018-12-28  590.01  5.79     1.287   1.4358      1.5885
    R=np.log(data/data.shift(1)).dropna()
    w=np.array([0.15,0.2,0.5,0.05,0.1])
    Rmean=R.mean();Rcov=R.cov()
    Rp=np.sum(R.mean()*w)
    volp=np.sqrt(w@Rcov@w.T)
    print('投资组合的μ={:.6f},σ={:.6f}'.format(Rp,volp))
    投资组合的μ=0.000268,σ=0.006427
    def VaR_norm(miu,sigma,x,P,n):#n参数为持有期,x为置信水平
    	import scipy.stats as st
    	z=abs(st.norm.ppf(q=1-x))#标准正态分布中1-x的概率对应的分位点
    	return -(miu-z*sigma)*P*np.sqrt(n)
    def VaR_lognorm(miu,sigma,x,P,n):
    	import scipy.stats as st
    	z=abs(st.norm.ppf(q=1-x))
    	return (1-np.exp(miu-z*sigma))*P*np.sqrt(n)
    print('99%置信水平下1天的normal VaR为{:.2f},lognormal VaR为{:.2f}'.format(\
    VaR_norm(Rp,volp,0.99,1e8,1),VaR_lognorm(Rp,volp,0.99,1e8,1)))
    99%置信水平下1天的normal VaR为1468366.22,lognormal VaR为1457638.30
    print('99%置信水平下10天的normal VaR为{:.2f},lognormal VaR为{:.2f}'.format(\
    VaR_norm(Rp,volp,0.99,1e8,10),VaR_lognorm(Rp,volp,0.99,1e8,10)))
    99%置信水平下10天的normal VaR为4643381.70,lognormal VaR为4609457.03
    

      以第二个结果为例,在99%的置信水平、持有期为10天的情况下,VaR达到了464.34万元,意味着从理论上来说未来的10个交易日内,有99%的把握认为1亿元的投资组合累计最大亏损不会超过464.34万元。

    非参数法(历史模拟法)

      历史模拟法的思路是将所有样本的收益率或收益额进行排序,根据置信水平找出对应分位数的值(数值小的一端),再取绝对值就是VaR。依然以上述案例为例,用历史模拟法计算持有期分别为1天和10天、置信水平为99%情况下的VaR。

      step1:生成投资组合的日收益序列:

    rp=pd.Series((1e8*R)@w,index=R.index)#投资组合的日收益额
    import matplotlib.pyplot as plt
    from pylab import mpl
    mpl.rcParams['font.sans-serif']=['SimHei']
    mpl.rcParams['axes.unicode_minus']=False
    plt.hist(rp,bins=40,edgecolor='k')
    plt.xlabel('投资组合日收益额')
    plt.ylabel('频数')
    plt.title('投资组合日收益额直方图')
    plt.grid()
    

    在这里插入图片描述
      step2:对投资组合的日收益额序列进行正态性检验,计算投资组合的VaR:

    st.normaltest(rp)
    Out[15]: NormaltestResult(statistic=192.37738470012968, pvalue=1.681828434884396e-42)
    #显然p<0.01,拒绝服从正态分布的原假设,因此用参数法计算VaR可能会产生偏差
    def VaR_daily(a,x):
    	#求a数列第(1-x)%分位的数值的绝对值,默认升序排序
    	return abs(np.percentile(a,(1-x)*100))
    print('99%置信水平下1天的VaR为{:.2f},10天的VaR为{:.2f}'.format(\
    VaR_daily(rp,0.99),VaR_daily(rp,0.99)*np.sqrt(10)))
    
    99%置信水平下1天的VaR为2135730.95,10天的VaR为6753774.29
    

      在99%的置信水平下历史模拟法计算出的10天VaR=675.38万元>正态VaR=464.34万元,可见在本案例中历史模拟法具有对尾部极端风险更强的捕捉能力。

      还有一种改进的参数法叫非参数密度估计(Non-parametric Density Estimation),将损失额直方图的每一根立柱的顶部中点进行连线,那么在线下的区域就可以当做该分布的概率密度函数,这样我们就能根据求出任意置信水平下的VaR,可以解决传统历史模拟法下n个样本最多只能有n个置信水平的问题。
    在这里插入图片描述

    展开全文
  • VaR是指在给定的置信度下,资产组合在未来持有期内所遭受的最大可 能损失
  • 风险价值(VaR)及其所有相关问题仍然是风险管理中的主要模式。风险价值的一个关键问题是它没有适当地考虑波动率,这意味着危机期间风险被低估。 解决这个问题的一个强有力的方法是将VaR与GARCH模型结合起来考虑...

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

     

    风险价值(VaR)及其所有相关问题仍然是风险管理中的主要模型。风险价值的一个关键问题是它没有适当地考虑波动率,这意味着危机期间风险被低估。

    解决这个问题的一个强有力的方法是将VaR与GARCH模型结合起来考虑条件波动性。为了说明这种方法,我们将一个正态分布的GARCH(1,1)应用于股票市场指数。

    ##初始化
    #Load Packages
    library(fImport)
    library(fPortfolio)
    library(ggplot2)
    
    #输入
    from = "1995-11-20"
    to = "2015-12-17"
    symbol = "^SSMI"
    
    #获取数据
    TS <- yahooSeries(symbol, from = from, to = to)
    SMI <- TS[,ncol(TS)]
    SMI <- returns(SMI, method = "continuous")
    
    #绘制收益率 
    seriesPlot(TS[,4])

    从Yahoo获取数据

    histPlot(SMI, main = "SMI Returns")
    

     

    模型估计

    SMI收益数据有5078个观测值。我使用前3078个观察值对GARCH模型进行初始估计。其余的2000个观测值用于验证和测试。

    library(rugarch)
    library(zoo)
    
    SMIdf <- as.data.frame(SMI)
    
    #GARCH
    #GARCH定义 (改变分布类型)
    gspec11 <- ugarchspec(variance.model = list(model = "sGARCH", 
                          garchOrder = c(1, 1)),
                          mean.model=list(armaOrder=c(0,0), 
                          include.mean = FALSE), 
                          distribution="norm")
    
    

    结果

    
    #VaR 结果
    plot(Returns, type = "l", pch = 16, cex = 0.8,  col = gray(0.2, 0.5),
         ylab = "Returns", main = "95% VaR Forecasting", xaxt = "n")
    

    从图中我们可以看到,VaR-GARCH(黑线)组合更加符合实际,降低了发生波动时的VAR限制,而对于静态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模型的不同类型的脉冲响应分析

     

    展开全文
  • 参数法和模拟法计算VaR

    千次阅读 2012-01-16 15:24:00
    回顾VaR的定义,为未来收益的累计分布函数,那么 所以,VaR本质上为未来收益的分位点。要计算它,最重要的是估计未来收益的分布。...后一个方向成为模拟法,在实际使用中,又可分为历史模拟法和蒙特卡洛模拟法...
  • (四十四)蒙特卡洛模拟法计算VaR

    千次阅读 2020-03-18 13:46:58
    蒙特卡洛模拟计算VaR的思路是,模拟组合中每一个资产在下一个交易日的价格,得到收益率就可以计算组合收益了,重复这个过程多次再按照历史模拟法求VaR即可。
  • 文字投顾知识点总结

    2021-01-20 02:04:42
    计算 VaR 值的历史模拟法 克服了方差一协方差法的一些缺陷如考虑了肥尾现象 能度量非线性金融工具的风险等而且历史模拟法是通过历史数据构造收益率分布不 依赖特定的定价模型不存在模型风险但历史模拟
  • 风险价值(下称VaR)的计算方法主要有历史模拟法(非参数法)、分析方法、蒙特-卡罗模拟法三类。不同的计算方法、计算参数下所得的VaR都是不同的。若某机构宣称其产品的VaR较低即投资风险较低,投资者还需在投前明确其...
  • 模拟退火算法

    2019-01-17 11:14:18
     美国物理学家 N.Metropolis 和同仁在1953年发表研究复杂系统、计算其中能量分布的文章,他们使用蒙特卡罗模拟法计算多分子系统中分子的能量分布。这相当于是本文所探讨之问题的开始,事实上,模拟退火中常常被提到...
  • 1. 模拟运放的分类及特点  模拟运算放大器从诞生至今,已有40多年的历史了。最早的工艺是采用硅NPN工艺,后来改进为硅...为了便于初学者选用,本文对集成模拟运算放大器采用工艺分类和功能/性能分类分类等两种
  • 本资源包含,用matlab实现历史模拟法、蒙特卡罗法、参数模型法等三种方法求解VaR
  • 采用历史模拟法、蒙特卡罗模拟法、指数加权法、等权重法、GARCH法和极值理论法六种参数方法和非参数方法对国际有色金属期货市场风险值VaR建模, 并引入基于极值理论的预期...
  • 模拟退火算法的原理+应用

    万次阅读 多人点赞 2018-06-29 10:37:54
    本文转自... 一点历史——如果你不感兴趣,可以跳过 美国物理学家 N.Metropolis 和同仁在1953年发表研究复杂系统、计算其中能量分布的文章,他们使用蒙特卡罗模拟法计算多分子系统中分子的能量分...
  • 压力测试就是要评估压力情景下的损失对金融机构的影响,对于历史情景可以直接用历史模拟法,对于头脑风暴情景可以用蒙特卡洛模拟法,计算出来的Stressed VaR比VaR大,但是也较为主观。
  • 计算风险价值VaR

    2018-12-04 12:38:11
    主要内容: 1、数据可视化与标准化 2、历史模拟法 3、基于随机收益率序列的蒙特卡罗风险价值计算 4、基于几何布朗运动的蒙特卡罗模拟 等等
  • 模拟退火算法系列之(一):通俗理解

    万次阅读 多人点赞 2009-09-06 23:39:00
    为什么我的眼里常含泪水?...美国物理学家 N.Metropolis 和同仁在1953年发表研究复杂系统、计算其中能量分布的文章,他们使用蒙特卡罗模拟法计算多分子系统中分子的能量分布。这相当于是本文所探讨之问题的开始...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 197
精华内容 78
关键字:

历史模拟法