精华内容
下载资源
问答
  • 历史模拟法VAR

    2015-04-26 21:19:19
    历史模拟法计算var,希望对同学们有所帮助
  • 基于历史模拟法VaR计算及其优化,陈玉峰,孙洪祥,VaR是20世纪90年代初期开始发展起来的一种金融市场风险测量方法,近来已经成为金融机构的一个重要的管理测度,VaR计算有多种方法�
  • VaR是指在给定的置信度下,资产组合在未来持有期内所遭受的最大可 能损失
  • 计算VaR的两种常用方法:参数法(正态VaR和对数正态VaR)和非参数法(历史模拟法),主要使用的函数是scipy.stats的求特定分布分位点的函数ppf,以及np.percentile求样本中的分位数。

    参数法

      正态VaR:假设资产组合的收益率服从正态分布,那么VaR也服从正态分布,VaR=-(μ-Z·σ)×P0,算出来的是loss,如果为负则为收益。μ为资产组合的期望收益率,用往年平均收益率替代;σ为组合收益率的波动率;Z=Φ-1( c )为正态分布的分位数(取正数);P0为组合的价值。证明如下:在这里插入图片描述
      对数正态VaR:假设资产组合的对数收益率服从正态分布,那么VaR服从对数正态分布,VaR=(1-eμ-Z·σ)×P0。可简单证明如下:受到冲击后的价格P=P0(eR),VaR=|P0-P|=|P0(1-eR)|,对数收益率R=ln(P/P0)服从正态分布,那么在此置信水平下的极端收益率为μ-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

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

    思路简介

      每一次蒙特卡洛模拟,对资产组合中的每一资产按照随机过程公式模拟出下一个交易日的价格,公式中的ε可以假定服从t分布或正态分布(即资产收益率服从的分布),然后可以得到每一资产的收益率,乘以各自的权重和市值就能得到每一资产在下一个交易日的收益,全部相加就是该资产组合在下一个交易日的模拟收益。
    在这里插入图片描述
      比如蒙特卡罗模拟法的抽样次数是10000次,通过重复以上的步骤可以得到组合收益的10000个不同的样本值,持有期1天、置信水平95%的投资组合风险价值就对应于样本数值中排在第500位最大损失的取值。

    案例分析

      依然以(四十三)中的案例为例,计算该资产组合持有期为1天、置信水平为99%情况下的VaR,同时假定ε在模拟过程中服从正态分布或t分布。ε服从t分布时:

    import numpy as np
    I=10000
    e1=np.random.standard_t(df=len(R),size=I)#自由度为收益率数据长度的t分布
    e2=np.random.standard_normal(size=I)
    S0=np.array(data.iloc[-1])#每一资产最后一个交易日的价格
    Rmean=R.mean()*252#计算每一资产的μ
    Rvol=R.std()*np.sqrt(252)#计算每一资产的σ
    dt=1/252#时间间隔
    S=np.zeros(shape=(I,len(w)))#存放10000×5个模拟价格数据
    for i in range(len(w)):#代入随机过程
    	S[:,i]=S0[i]*np.exp((Rmean[i]-0.5*Rvol[i]**2)*dt+Rvol[i]*e1*np.sqrt(dt))
    #每一行∑资产收益率×相应权重市值就得到一个资产组合的收益,一共10000行
    Sp=(np.dot(S/S0-1,w))*1e8
    import matplotlib.pyplot as plt
    from pylab import mpl
    mpl.rcParams['font.sans-serif']=['SimHei']
    mpl.rcParams['axes.unicode_minus']=False
    plt.hist(Sp,bins=40,edgecolor='k')
    plt.xlabel('模拟的投资组合日收益额')
    plt.ylabel('频数')
    plt.title('蒙特卡洛模拟投资组合日收益额直方图(t分布)')
    plt.grid()
    VaR99_1day=abs(np.percentile(Sp,1))
    VaR99_1day
    Out[11]: 2017308.9989261786
    

    在这里插入图片描述
      ε服从正态分布时:

    S=np.zeros(shape=(I,len(w)))
    for i in range(len(w)):
    	S[:,i]=S0[i]*np.exp((Rmean[i]-0.5*Rvol[i]**2)*dt+Rvol[i]*e2*np.sqrt(dt))
    Sp2=(np.dot(S/S0-1,w))*1e8
    VaR99_1day=abs(np.percentile(Sp2,1))
    VaR99_1day
    Out[11]: 2008156.813210965
    

      从结果来看,当资产收益率服从正态分布时,蒙特卡洛模拟计算的组合VaR值低于服从t分布的VaR值(大部分情况下)。

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

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

    回顾VaR的定义,为未来收益的累计分布函数,那么

    所以,VaR本质上为未来收益的分位点。要计算它,最重要的是估计未来收益的分布。在实际计算中有两种大的方向:

    1. 满足某种分布(通常使用正态分布)的假设上,估计该分布的参数,便可确定整个分布,然后求分位点。
    2. 进行抽样,通过样本的分位点估计整个分布的分位点。

    第一个方向被称为参数法;后一个方向成为模拟法,在实际使用中,又可分为历史模拟法和蒙特卡洛模拟法两种。对于这三种方法,不单需要知道它们的计算方法,更重要地是了解它们的假设和适用范围。以下提到的风险因子、风险映射、风险矩阵、估值等概念,已在【VaR Primer】风险因子和估值框架里详细描述。其它比如风险矩阵等计算方法将在【VaR Primer】VaR的参数选择和计算细节里给出。

    1.参数法

    在参数法中,通常假设未来收益满足正态分布,这个假设的合理性在于:

    1. 风险因子的短期表现如股票收益率、利率变动等可以用联合正态分布近似
    2. 大多数资产都可以表示为风险因子的线性组合,并且
    3. 正态分布的任意线性组合仍然是正态分布,故一个组合的预期收益分布还是正态分布,由其方差唯一确定。

    参数法的计算步骤:

    1. 选择风险因子
    2. 计算风险因子的风险矩阵(通常选取指数加权法,详情见【VaR Primer】VaR的参数选择和计算细节)。
    3. 计算组合分解到各个风险因子上的暴露市值(或者delta)
    4. 计算组合的事前波动率
    5. 然后将波动率转化为VaR:

    2.模拟法

    模拟法是在模拟场景下,计算组合的收益样本,通过大量的模拟场景,取这些模拟出来的收益样本的分位点得到VaR。根据生成样本的方法,有历史模拟法 和蒙特卡洛模拟法,其中历史模拟法使用历史实际场景,而蒙特卡洛模拟法则随机生成场景(基于某种假设的分布和用历史数据拟合的参数)。

    模拟法的合理性基于:当样本数量足够多时,样本分位点无限接近于真实的VaR,即样本分位点是VaR的无偏估计。

    2.1.历史模拟法

    历史模拟法指使用历史上实际发生的场景作为模拟场景,然后计算当前组合在历史场景下的损益情况。这有点像电影回放。

    历史模拟法无需对风险因子的收益分布作任何假设,这使得可以完美地描述尾部。但历史法基于一个重要的假设:过去历史会在未来重演。这一方面,可能忽略掉可能的尾部风险;另一方面,又可能将不可能发生的尾部带入到未来。

    2.2.蒙特卡洛模拟法

    历史模拟法的一个缺陷在于,计算结果依赖于少数几个极端历史样本,其它样本对结果几乎没有影响。蒙特卡洛模拟法则可补足这一点,它大概分为几步:

    1. 估计风险因子的分布:假设分布类型和计算分布参数。如果为联合正态分布,则计算风险矩阵。
    2. 根据分布生成随机场景(通常500个以上的场景)
    3. 计算组合中各个头寸在每个场景下的估值,得到在各个场景下的组合损益
    4. 根据上一步得到的组合损益样本,取对应的分位点

    蒙特卡洛模拟法与参数法一样的地方在于,它也需要对风险因子的分布做假设。但相较而言,参数法只能假设风险因子为联合正态分布,而蒙特卡洛法则不需要,因为它不基于“正态分布的线性组合还是正态分布”这个事实。

    虽然蒙特卡洛模拟法允许各种各样的分布,但最常用的还是联合正态分布。

    3.其他VaR指标的计算

    3.1.ES(Expected shortfall)

    对于参数法,ES可以使用下述转换公式:

    对于模拟法,ES即其样本分布的尾部平均值。比如计算95%的ES,只需取组合模拟场景下的收益的较小的5%部分的平均值。

    3.2.增量VaR、边际VaR和成分VaR

    增量VaR和成分VaR都用上一篇文章中的公式进行计算。因为不需要重新计算最耗费时间的风险因子分布参数估计和头寸估值,所增加的计算量很少。

    在用模拟法计算成份VaR时,由于模拟法本身就有一定的误差,使得直接使用成分VaR的计算公式得到的结果极为不稳定。由于资产的小幅度变化不改变 对各场景下的损益顺序,VaR总是在发生在同一个场景下。所以在实际中采取下面计算方法,这种方法可以消除重新估值和估计分位点带来误差:

    首先,在计算总VaR时,假设VaR在某个特定场合下取得,那么资产的成分VaR就是每个资产在该特定场合下的损益值。

    相对VaR指标

    上面所说的都是绝对指标,它们都可以推广到相对于某一基准上,即相对VaR等指标。在计算这些指标的过程中,需要将风险因子的收益换成风险因子相对于基准的相对收益即可。

    展开全文
  • 楼主您别怪我,你这东西·...*Avec ces deux méthodes ,vous n'aurez pas besoin de proc iml *//*1 ère méthode pour calculer la var hs */data zozo;input p1 p5;cards;run;%macro insert_percentile;proc sq...

    楼主您别怪我,你这东西···真的不值这个价钱。。。我发出来了。
    *Avec ces deux méthodes ,vous n'aurez pas besoin de proc iml */
    /*1 ère méthode pour calculer la var hs */
    data zozo;
    input p1 p5;
    cards;
    run;
    %macro insert_percentile;
    proc sql;
    insert into zozo
    values (&p1,&p5);
    quit;
    %mend insert_percentile;
    data toto;
    do t = 1 to 500;
    rdt= ranuni(-2)*t;
    output;
    end ;
    run;
    %macro creation_percentile;
    ods listing close;
    %do i=0 %to 249;
    data tata ;
    set toto (firstobs=%eval(1+&i) obs=%eval(250+&i));
    run;
    proc univariate data= tata;
    var rdt;
    output out= percentile p1= p1 p5=p5;
    run;
    data _null_;
    set percentile;
    call symput ('p1',p1);
    call symput ('p5',p5);
    call execute ('%insert_percentile');
    run;
    %end;
    %mend creation_percentile ;
    %creation_percentile;
    ods listing;
    *création d'une table temporaire zozo,qui va servir plutard à insérer les
    percentiles ;
    *macro 'insert_percentile' permettant d'insérer les percentiles estimés dans
    la table temporaire zozo avec sql;
    *ici j'ai pris une table 'toto' quelconque ressemblant à peu près à la table
    que vous allez utilisez,juste pour décrire ce que je fais;
    *création de la macro 'creation_percentile' ,qui va utiliser les facilités des
    data step: firstobs et obs pour faire une table glissante;
    * j'utilise ici 'ods listing close' pour bloquer toute sortie dans ma fenêtre
    de résultats,sans cette option on aurait compter 250 icones 'proc univariate'
    dans la fenêtre de résultats;
    *je prends le soin d'utiliser 'ods listing' à la fin de l'exécution de ma macro
    pour débloquer la fenêtre de résultats que j'avais bloqué;
    *création de macro variables contenant les percentiles avec 'call symput' dans
    le step 'data _null_';
    *cérise sur le gateau je fais tourner une procédure sas dans une étape data
    grace à la commande 'call execute' ;
    /*2ème méthode plus subtile ,plus short, et plus fast que la précédente , car
    je code en sql/macro*/
    data zozo;
    input p1 p5;
    cards;
    run;
    data toto;
    do t = 1 to 500;
    rdt= ranuni(-2)*t;
    output;
    end ;
    run;
    %macro creation_percentile;
    ods listing close;
    %do i=0 %to 249;
    data tata ;
    set toto (firstobs=%eval(1+&i) obs=%eval(250+&i));
    run;
    proc univariate data= tata;
    var rdt;
    output out= percentile p1= p1 p5=p5;
    run;
    proc sql;
    select p1,p5 into :p1,:p5 from percentile ;
    insert into zozo
    values (&p1,&p5);
    quit;
    %end;
    %mend creation_percentile ;
    %creation_percentile;
    ods listing;

    展开全文
  • Python金融实战之计算VaR

    千次阅读 多人点赞 2020-02-24 10:37:05
    一、历史模拟法计算VaR 1.VaR 定义:Value at Risk,在一定概率水平(置信度)下,某一金融资产或证券组合价值在未来特定时期内的最大可能损失。一日 5% VaR 可以理解为一天发生损失超过VaR的概率小于等于5%。 2....
  • 本资源包含,用matlab实现历史模拟法、蒙特卡罗法、参数模型法等三种方法求解VaR
  • VaR如何计算VaR计算方法

    万次阅读 2020-04-23 22:41:10
    VaR计算方法通常有三大类:分析法、历史模拟法和蒙特卡罗模拟法,这3种方法从不同角度来分析资产的风险价值。后面的案例中将对股指期货交易中金的最大损失值进行计算,即对金的VaR值进行估计。 1、分析法 ...
  • 计算均值还有收益率的std, 然后252/t和(252/t)^0.5年化, 一般历史模拟法计算证券投资组合的VaR容易高估,方差协方差法计算证券投资组合的VaR容易低估,这个结果是历史模拟法是低估,方差协方差法式高估 ,是因为...
  • 蒙特卡洛模拟计算风险价值VAR之R语言实现

    万次阅读 多人点赞 2018-04-08 12:46:54
    计算VAR,我们需要找到一个阈值(T),来确定显著性(如95%、99%、99.9%)。使用函数F的标准正态累计分布:将逆累积分布函数应用到1-α:虽然我们不知道非正态分布的累积函数和它的逆的数学公式,但我们可以用...
  • matlab 在险价值 VaR计算

    千次阅读 多人点赞 2019-04-17 12:13:26
    历史模拟法 蒙特卡罗模拟法 参数模型法 代码和数据下载 VaR 模型 Value at Risk 在险价值,即 VaR。是指一定时期内,一定置信水平下,某种资产组合面临的最大损失。 Prob(Δp≤VaR)=1−αProb(\Delta p \le VaR)...
  • 计算风险价值VaR

    2018-12-04 12:38:11
    主要内容: 1、数据可视化与标准化 2、历史模拟法 3、基于随机收益率序列的蒙特卡罗风险价值计算 4、基于几何布朗运动的蒙特卡罗模拟 等等
  • 如何使用Python通过蒙特卡洛模拟自动计算风险值(VaR)来管理投资组合或股票的金融风险。 金融和投资组合风险管理中的VaRVaR是 "风险价值 "的缩写,是许多公司和银行用来确定其公司内部金融风险水平的工具。...
  • 【FinE】在险价值(VaR)计算

    千次阅读 2020-08-30 18:01:39
    VaR计算
  • (五十三)Credit VaR计算

    千次阅读 2020-04-04 18:41:09
    UL=Credit VaR=WCL-EL,主要思想是二项分布+历史模拟法,适合估计组合中资产不相关的情况下的Credit VaR。注意求集合子集的方法以及df.map函数的使用。
  • 然后,基于蒙特卡罗模拟算法建立了随机过程模型,以计算股票的平均收益率与风险。通过计算得到股票位于99%置信水平下的VAR,从而对其投资风险进行评价。通过对股票编号为000001.SZ、300231.SZ、002332.SZ、2012年01...
  • 风险价值(VAR)

    千次阅读 2010-06-29 14:23:00
     风险价值(VAR) (一)概念 VAR实际上是要回答在概率给定情况下,银行投资组合价值在下一阶段最多可能损失多少。在风险管理的各种方法中,VAR方法最为引人瞩目。尤其是在过去的几年里,许多银行和法规制定...
  • 风险价值(VaR)用于尝试量化指定时间范围内公司或投资组合中的财务风险水平。VaR提供了一段时间内投资组合的最大损失的估计,您可以在各种置信度水平上进行计算
  • 计算给定回报组合的历史风险价值。 例如 置信水平 = 0.95; plot_flag = 真; 数字VAR_hist = computeHistoricalVaR(returns,confidence_level,plot_flag)
  • VaR - 风险价值 - 蒙特卡罗 - Python

    千次阅读 多人点赞 2018-11-15 00:47:06
    简单来说,蒙特卡罗模拟法即运用历史数据对未来进行多次模拟,以求得未来股价结果的概率分布。蒙特卡罗模拟法的公式如下, 其中S为股票的价格,为股价变动大小(有正负),μ为期望收益率(平均),Δt为时间间隔,σ为...
  • 风险控制之VaR

    千次阅读 2018-09-29 15:58:10
    什么是VaR VaR是value of risk的缩写称为风险价值,或者受险价值,指的是在一定的概率下,一个金融资产在未来一段时间内的最大可能损失。常用于金融机构的风险管理。它的数学定义为: 其中,的含义是金融资产在...
  • Python计算获得多资产投资组合的风险度量。 关键概念 随着价格的变动,投资经理所持有的市场价值也会发生变化。后者就是所谓的市场风险,衡量它的最流行的方法之一是定义为风险价值。风险本身被看作是实际收益和...
  • 压力测试就是要评估压力情景下的损失对金融机构的影响,对于历史情景可以直接用历史模拟法,对于头脑风暴情景可以用蒙特卡洛模拟法,计算出来的Stressed VaRVaR大,但是也较为主观。
  • 金融风险度量的 VaR 模型 作 者 郝芸芸 系 别 经济管理学院 专 业 金融学 ...历史模拟法蒙特卡洛模拟法以及方 差一 方差法各种方法均存在自身假设条件或固有的缺陷在选择 计算 VaR 的方法时需要在计算效率所需数据信息
  • VaR风险价值-Python版本

    万次阅读 多人点赞 2018-11-12 01:11:18
    3.1 历史模拟法 3.1.1 使用TUSHARE读入美的复权后估计数据 隆重介绍一下TUSHARE, 非常好的财经数据库, 能获取到国内股价信息 #环境&数据准备 import sys as sy import numpy as np import pandas as ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,528
精华内容 1,411
关键字:

历史模拟法计算var