精华内容
下载资源
问答
  • 条件风险价值CVaR
    万次阅读
    2019-07-05 20:59:19

    产生背景

                 \;\;\;\;\;\; CVaR即条件风险价值,是由RockafeUar和Uryasev等于1997年提出的一种较VaR更优的风险计量技术,其含义为在投资组合的损失超过某个给定VaR值的条件下,该投资组合的平均损失值。
                 \;\;\;\;\;\; CVaR(条件风险价值)是在VaR(风险价值)的基础上发展出来的一种投资风险计量方法。VaR作为风险计量方法不仅具有概念简单、易于沟通和理解的优点,而且为不同金融工具构成的复杂的投资组合提供了一个统一的、综合性的风险测量框架圄。因此,VaR现在被广泛应用于各金融机构,并且正在成为计量金融风险的国际标准。然而,许多实证研究表明,VaR方法具有其本身无法克服的缺陷:其一,VaR不满足一致性公理,这就意味着用VaR来计量风险,投资组合的风险不一定小于或等于该组合中各种资产分别计量的风险值之和,这与风险分散化的市场现象相违背;其二,VaR尾部损失测量的非充分性,它无法考察超过分位点的下方风险信息;其三,VaR应用的前提必须是股票收益率服从正态分布,而许多实证研究表明, 目前中国的股票收益葺茜并不服从正态分布。
                 \;\;\;\;\;\; 为了克服VaR的缺陷,Rockafeller和Uryasev在2000年提出了条件风险价值——CVaR的风险计量技术[91o CVaR是指投资组合的损失大于某个给定的VaR值的条件下,该投资组合损失的平均值。与VaR相比,CVaR满足次可加性、正齐次性、单调性及传递不变性,因而CVaR是一种一致性的风险计量方法。另外。研究表明,CVaR可以通过使用线性规划算法来进行优化。CVaR以其优点正在被越来越多的机构投资者所重视。

    定义

    VaR(Value at Risk, 风险价值),表示金融产品在给定置信水平 α \alpha α 下的最小损失。用 X X X 表示该随机波动的金融产品, 则 VAR 的数学表示式为:
    VaR α ( X ) = inf ⁡ { t : P ( x ≤ t ) ≥ α } \text{VaR}_{\alpha}(X)=\inf\{t:\mathbf{P}(x\leq t)\ge\alpha\} VaRα(X)=inf{t:P(xt)α}

    CVaR(conditional value at risk, 条件风险价值),表示金融产品在既定置信水平 α \alpha α 下,损失超过 VAR 的期望损失,数学表达式为:
    CVaR α = − ∫ 0 α VaR r ( X ) d r α \text{CVaR}_{\alpha}=-\frac{\int_{0}^{\alpha}\text{VaR}_{r}(X)dr}{\alpha} CVaRα=α0αVaRr(X)dr

    假定投资组合的随机损失为 − X ( − X &lt; 0 ) -X(-X&lt;0) X(X<0), VaR α \text{VaR}_{\alpha} VaRα 是置信度为 1 − α 1-\alpha 1α 的 VaR 值,则
    CVaR α = E ( − X ∣ − X ≥ VaR α ) \text{CVaR}_{\alpha}=\mathbf{E}\left(-X|-X\ge\text{VaR}_{\alpha} \right) CVaRα=E(XXVaRα)
    在这里插入图片描述

    性质

    (1) 平移不变性,对于任意一个固定的常数 c c c,有 C α ( Y + c ) = C α ( Y ) + c C_{\alpha}(Y + c) = C_{\alpha}(Y) + c Cα(Y+c)=Cα(Y)+c

    (2) 正齐次性,对于任意正数 c c c,有 C α ( Y + c ) = C α ( Y ) + c C_{\alpha}(Y + c) = C_{\alpha}(Y) + c Cα(Y+c)=Cα(Y)+c

    (3) 单调可加性,对于任意非递增函数 f f f g g g,若两复合函数 f ⋅ Y f\cdot Y fY g ⋅ Y g\cdot Y gY 有意义,则 C α ( f ⋅ Y + g ⋅ Y ) = C α ( f ⋅ Y ) + C α ( g ⋅ Y ) C_{\alpha}(f·Y+g·Y)=C_{\alpha}(f·Y)+C_{\alpha}(g·Y) Cα(fY+gY)=Cα(fY)+Cα(gY)

    (4) 某种程度上具有关于零的对称性, E ( Y ) = ( 1 − α ) C α ( Y ) − α C 1 − α ( − Y ) E(Y) = (1 − \alpha)C_{\alpha}(Y) − \alpha C_{1-\alpha}( − Y) E(Y)=(1α)Cα(Y)αC1α(Y)

    (5) CVaR 具有次可加性:若 0 &lt; λ &lt; 1 0&lt;\lambda &lt;1 0<λ<1,对任意两个损失变量 Y 1 Y_1 Y1 Y 2 Y_2 Y2 C α ( λ Y 1 + ( 1 − λ Y 2 ) ≤ λ C α ( Y 1 ) + ( 1 − λ ) C α ( Y 2 ) C_{\alpha}(\lambda Y_1+(1- \lambda Y_2)≤\lambda C_{\alpha}(Y_1)+(1-\lambda)C_{\alpha}(Y_2) Cα(λY1+(1λY2)λCα(Y1)+(1λ)Cα(Y2)

    因此无论投资组合的回报是否是正态分布,CVaR 都是一致性风险度量。此外,由上式我们可以发现 CVaR 是凸性的风险计量,因此基于CVaR的投资组合优化必定存在最小风险的解,而 VaR 并不是一个凸性的风险计量,可能不存在最优的解。
      
    参考文献

    1. Chen et al. (2015) The Impact of a Target on Newsvendor Decisions.
    2. Delage and Ye (2009) Distributionally Robust Optimization under Moment Uncertainty with Application to Data-Driven Problems
    更多相关内容
  • 此示例显示了条件风险价值 (CVaR) 投资组合优化工作流程,其中包括: * 如何基于正态分布和经验分布模拟资产场景*如何使用PortfolioCVaR对象构建投资组合* 如何评估有效前沿* 如何提取投资组合权重* 如何计算投资...
  • 基于假设的金融资产收益分布,建立了条件风险价值 CVaR计算模型,并对分布的参数采用贝叶斯统计 推断进行估计,然后利用蒙特卡洛模拟计算 CVaR。选取沪深300中的股票数据进行实证分析,并与经典统计 方法作比较研究,研究...
  • 基于条件风险价值方法提出风柴储孤岛微网经济风险评估模型。对孤岛微网中风机与柴油发电机故障情况进行抽样,结合其出力分别建立可靠性模型;综合考虑储能放电深度和充放电次数对储能容量衰减的影响以及储能运行策略...
  • 通过运用条件风险价值(CVaR)对企业的风险偏好进行测度,构建了分散供应链和集中供应链两种情况下的企业决策模型,并根据数值实验对模型作了进一步的分析。研究结果表明:零售商越担心风险,其对创新的投入越少,并...
  • 研究风险偏好和需求不确定性对库存系统的影响, 证明最优订货量和最优利润关于缺货惩罚成本和风险水 平的单调性. 利用随机比较方法证明随机大需求导致较高的最优订货量, 当不考虑缺货惩罚成本时随机大需求导致 较高...
  • 运用随机占优研究风险偏好和需求不确定性对混合条件风险价值约束供应链系统的影响. 证明在批发价和收益共享契约下零售商的最优订货量和利润随风险偏好系数的增加而减小; 只有在零售商为风险追求型时, 批发价契约才能...
  • 论文研究-基于条件风险价值的智能区域代理商报价策略及EV充电管理.pdf, 智能区域代理商整合区域内电动汽车(electric vehicle,EV)参与电力市场交易,然而在联营市场...
  • 基于条件风险价值的含风电电力系统旋转备用效益研究.pdf
  • 考虑条件风险价值的含多风电场电力系统经济调度.pdf
  • 计及条件风险价值的含储热光热电站与风电电力系统经济调度.pdf
  • 本资源包含,用matlab实现历史模拟法、蒙特卡罗法、参数模型法等三种方法求解VaR
  • 在开始之前,请注意,标准VaR计算假定以下条件:收益的正态分布 -VaR假设投资组合的收益是正态分布。对于大多数资产而言,这当然是不现实的,但允许我们使用更为简单的计算来制定基准。(可以对VaR进行修改来说明不同...

    在开始之前,请注意,标准VaR计算假定以下条件:

    收益的正态分布 -VaR假设投资组合的收益是正态分布。对于大多数资产而言,这当然是不现实的,但允许我们使用更为简单的计算来制定基准。

    (可以对VaR进行修改来说明不同的分布,但是这里我们将重点介绍标准VaR计算)

    标准市场条件 -与许多金融工具一样,VaR最适合用于考虑标准市场中的损失,并且不适用于极端/异常事件。

    计算投资组合的VaR的步骤

    为了计算投资组合的VaR,您可以按照以下步骤操作:

    计算投资组合中股票的定期收益

    根据收益创建协方差矩阵

    计算投资组合均值和标准差

    (根据投资组合中每只股票的投资水平加权)

    用指定的置信区间,标准差和均值计算正态累积分布(PPF)的反函数

    通过从步骤(4)的计算中减去初始投资,估算投资组合的风险价值(VaR)

    1)计算投资组合中股票的定期收益

    # 创建我们的股票投资组合

    tickers = ['AAPL','FB', 'C', 'DIS']

    #设置投资权重

    weights = np.array([.25, .3, .15, .3])

    # 设定初始投资水平

    initial_investment = 1000000

    # 下载收盘价

    data = pdr.get_data_yahoo(tickers, start="2018-01-01", end=dt.date.today())['Close']

    #从收盘价计算定期收益

    returns = data.pct_change()

    returns.tail()

    20278134174d884229e7732304e8c9a5.png

    2)根据收益建立协方差矩阵

    # 生成Var-Cov矩阵

    cov_matrix = returns.cov()

    cov_matrix

    2ddaa9826912ba7cced7644cebcb425d.png

    这将使我们能够计算整个投资组合的标准差和收益平均值。

    3)计算投资组合的平均值和标准差

    # 计算每只股票的平均收益

    returns.mean()

    # 计算整个投资组合的平均回报,

    # 对投资权重进行归一化

    avg_rets.dot(weights)

    # 计算投资组合标准差

    np.sqrt(weights.T.dot(cov_matri

    # 计算投资平均值

    (1+port_mean) * initial_investment

    # 计算投资标准差

    initial_investment * port_st

    接下来,我们可以将这些变量插入下面的百分比函数(PPF)中。

    4)计算具有指定置信区间,标准偏差和均值的正态累积分布(PPF)的逆

    # 选择我们的置信区间(我将在此处选择95%)

    conf_level1 = 0.05

    #逆累积分布函数为正态分布

    #插入我们投资组合的均值,标准差

    cutoff1 = norm.ppf(conf_level1, mean_investment, stdev_investment)

    5)通过从步骤4的计算中减去初始投资,估算投资组合的风险价值(VaR)

    #最后,我们可以在置信区间内计算VaR

    var_1d1

    #output

    #22347.7792230231

    在这里,我们有95%的信心说,我们的100万投资组合在一天之内不会超过损失超过2.23万元的损失。

    n天时间段内的风险价值

    如果我们想在更大的时间范围内计算该怎么办?只需获取1天的VaR并将其乘以 时间段的平方根即可 (这是由于股票收益的标准偏差往往随时间的平方根而增加)。

    # 计算n天VaR

    var_array = []

    var_array.append(np.round(var_1d1 * np.sqrt(x),2))

    # 绘制图形

    plt.title("Max portfolio loss (VaR) over 15-day period")

    1 day VaR @ 95% confidence: 10635.31

    2 day VaR @ 95% confidence: 13534.26

    ...

    14 day VaR @ 95% confidence: 73456.51

    15 day VaR @ 95% confidence: 83564.53

    10d35c5fcd5397b009d73c47da9982d2.png

    对照正态分布检查我们的股票分布

    如计算部分所述,我们假设在计算VaR时,我们投资组合中股票的收益呈正态分布。

    当然,我们无法预测这种情况,但我们至少可以检查历史收益如何分配,以帮助我们评估VaR是否适合用于我们的投资组合。

    plt.plot(x, scipy.stats.norm.pdf(x, port_mean, port_stdev), "r")

    plt.show()

    收益与正态分布比较

    dcafd822740b5e43ea0892a7c2a1f8dc.png

    c5a5d2370e8031936eed504b66c8e2a5.png

    6c98612e8895ddd7b51d0a2780c912f6.png

    15acee2e5fe244e78744b472a8fa1248.png

    从上面我们可以看到,自2018年以来,我们选择的股票的收益都已经符合正态分布。

    6a47dccc2629321487e63ac84cf9142f.png

    最受欢迎的见解

    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模型的不同类型的脉冲响应分析

    cbe652882696e6528ae5aa2b0527c2bf.png

    展开全文
  • 运用条件风险价值(conditional value at risk,CVaR)风险度量准则对制造商的风险偏好进行测度,综合考虑制造商风险中性情况下的成本目标和制造商风险规避情况下的风险目标,构建了供应链失效风险下以成本和风险...
  • 为了量化分析源荷双侧预测误差引起的电力系统备用缺额风险,提出了一种基于全概率公式和条件风险价值的风险度量,作为表征随机误差潜在风险的评估指标。为了明确不同的风险等级,以风险价值为临界点,将常规机组的...
  • GARCH-EVT-Copula模型用于估计货币汇率的投资组合风险价值(VaR)。 首先,单变量ARMA-GARCH模型用于过滤收益序列。 然后拟合广义帕累托分布,以对标准化残差的尾部分布进行建模。 转换后的残差之间的依赖关系结构...
  • 金融分析与风险管理——风险价值(VaR)1. 风险价值(VaR)简述1.1 Python可视化风险价值2. VaR值的测度方法2.1 方差-协方差法2.2 历史模拟法2.3 蒙特卡洛模拟法3. 回溯检验4. 压力测试5. 压力VaR 1. 风险价值(VaR...

    1. 风险价值(VaR)简述

    风险价值(value at risk,VaR)是指在一定的持有期和给定的置信水平下,利率、汇率、股价等风险因子发生变化时可能对投资组合造成的潜在最大损失。例如:持有期 1 天、置信水平 95% 的情况下,计算得到的 VaR 值为 1000 万元,则表明该投资组合在1天中有 95%的可能性损失不会超过1000万,换句话说,1 天中,有5%的可能性损失会超过 1000 万元。

    VaR的大小取决于两个参数:持有期(N)、置信水平(X)。由于 VaR 度量的是投资组合的亏损,其对应于投资组合盈亏分布的左端尾部,为了表述方便,通常 VaR 值用绝对值表示。

    VaR 的数学表达式如下:

    P r o b ( Δ P < − V a R ) = 1 − X P r o b : 概 率 函 数 Δ P : 投 资 组 合 亏 损 金 额 X : 置 信 水 平 Prob(\Delta P < - VaR) = 1 - X \\[10pt] Prob:概率函数 \\[10pt] \Delta P:投资组合亏损金额 \\[10pt] X:置信水平 Prob(ΔP<VaR)=1XProbΔPX

    根据巴塞尔协议的明确规定:银行需要计算持有期10天、置信水平99%的VaR。在实际计算中,通常先计算 N=1 时的VaR,在计算相同置信水平下 N>1 时的 VaR,其表达式如下:

    N 天 V a R = 1 天 V a R ∗ N N天VaR = 1天VaR*\sqrt{N} NVaR=1VaRN

    上式成立的条件是:投资组合价值在不同交易日之间的变化是相互独立并服从期望值为0的相同正态分布,其他情况下,该等式只是一个近似值。

    1.1 Python可视化风险价值

    利用Python对VaR进行可视化,图中阴影部分右侧的临界值就是对应置信水平的VaR,其程序如下:

    import numpy as np
    import pandas as pd
    import scipy.stats as st
    '''
    st.norm中的子模块
    pdf:概率密度函数
    cdf:累计概率分布函数
    ppf:分位点函数,cdf的反函数
    '''
    
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] #中文显示问题
    plt.rcParams['axes.unicode_minus'] = False #负数显示问题
    
    
    a = 0.95 #置信水平
    z = st.norm.ppf(q=1-a) #返回q对应的分位点
    x = np.linspace(-4,4,200) #组合的盈亏数组
    y = st.norm.pdf(x) #组合盈亏对应的概率密度数组
    x1 = np.linspace(-4,z,100) #组合最小亏损值与返回的分位点构成的盈亏数组
    y1 = st.norm.pdf(x1)
    
    plt.figure(figsize=(8,6))
    plt.plot(x,y)
    plt.fill_between(x1, y1)
    plt.grid('True')
    

    在这里插入图片描述

    2. VaR值的测度方法

    2.1 方差-协方差法

    数学假定:

    • 1 投资组合的各风险因子服从联合正态分布
    • 2 线性假定,持有期内,投资组合的风险暴露与风险因子之间是线性相关的

    其表达式如下:

    V a R = V p [ z c σ p − E ( R p ) ] E ( R p ) = ∑ w i E ( R i ) σ 2 = W c o v ( R i , R j ) W T V p : 投 资 组 合 的 最 新 价 值 z c : 显 著 性 水 平 c 对 应 的 分 位 数 绝 对 值 E ( R p ) : 投 资 组 合 的 期 望 收 益 VaR = V_p[z_c\sigma_p - E(R_p)] \\[10pt] E(R_p) = \sum w_iE(R_i) \\[10pt] \sigma^2 = Wcov(R_i,R_j)W^{T} \\[10pt] V_p:投资组合的最新价值 \\[10pt] z_c:显著性水平 c 对应的分位数绝对值 \\[10pt] E(R_p):投资组合的期望收益 \\[10pt] VaR=Vp[zcσpE(Rp)]E(Rp)=wiE(Ri)σ2=Wcov(Ri,Rj)WTVp:zccE(Rp)

    本文通过一个案例来说明如何运用方差-协方差法计算投资组合的 VaR,该投资组合有 5 个不同的资产构成,投资组合当前的市值为1亿元,其权重权重配比如下表:

    资产名称贵州茅台交通银行嘉实增强信用基金华夏恒生ETF基金博时标普500ETF基金
    权重0.150.20.50.050.1

    案例中投资组合2015年—2018年完整的数据可以通过百度网盘获取,提取码:zbbx。

    Python程序如下:

    data = pd.read_excel(r'C:\Users\Administrator\Desktop\投资组合配置的资产情况.xlsx',header = 0,index_col = 0)
    
    #初始数据的归一化处理
    R = np.log(data/data.shift(1))
    #处理缺失数据
    R = R.dropna() 
    
    R_mean = R.mean() #计算均值
    R_cov = R.cov() #计算协方差
    R_corr = R.corr() #计算相关系数
    R_vol = R.std() #计算标准差
    
    # 方差协方差方法
    def VaR_VCM(value,Rp,Vp,X,N):
        '''
        Parameters
        ----------
        value : 投资组合的价值
        Rp : 投资组合的日收益率
        Vp : 投资组合的日波动率
        X : 置信水平
        N : 持有天数
        
        '''
        import scipy.stats as st
        import numpy as np
        
        z = np.abs(st.norm.ppf(q=1-X))
        
        return np.sqrt(N)*value*(z*Vp-Rp)
    
    weights = np.array([0.15,0.20,0.5,0.05,0.1])
    #计算投资组合的期望收益率
    Rp_daily = np.sum(weights*R_mean)
    #计算投资组合的日波动率
    Vp_daily = np.sqrt(np.dot(weights,np.dot(R_cov,weights.T)))
    
    print('投资组合日收益率:',Rp_daily)
    print('投资组合日波动率:',Vp_daily)
    
    D1 = 1
    D2 = 10
    X1 = 0.99
    X2 = 0.95
    value_port = 100000000
    
    VaR99_1day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X1, N=D1)
    VaR99_10day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X1, N=D2)
    VaR95_1day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X2, N=D1)
    VaR95_10day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X2, N=D2)
    
    print('1天、99%的VaR:',VaR99_1day_VCM)
    print('10天、99%的VaR:',VaR99_10day_VCM)  
    print('1天、95%的VaR:',VaR95_1day_VCM)
    print('10天、99%的VaR:',VaR95_10day_VCM)  
    

    计算结果表明:持有期10天、置信水平99%的VaR=464.34万;持有期10天、置信水平95%的VaR=325.83万。

    2.2 历史模拟法

    历史模拟法:从当前回溯一定时期投资组合的历史盈亏,并把历史盈亏按照由大到小的顺序排列,从中找出符合给定置信水平的盈亏值。例如:1天、置信水平95%的VaR,把历史盈亏由大到小排列,VaR为95%的位置对应盈亏值的绝对值,或者由小到大排列,VaR为5%位置对应盈亏值的绝对值。

    本文仍然使用上述案例数据进行说明,其Python程序如下:

    #各资产配置
    value_asset = value_port*weights
    #历史交易日投资组合的盈亏值
    Return_history = np.dot(R,value_asset)
    Return_history = pd.DataFrame(Return_history,index=R.index,columns=['投资组合模拟日收益'])
    
    #盈亏数据描述
    Return_history.describe()
    Return_history.plot()
    
    #盈亏数据分布直方图
    plt.hist(Return_history,bins=30)
    plt.grid('True')
    
    #投资组合盈亏值的正态性检验
    #KS检验,返回统计量及P值
    st.kstest(rvs=Return_history['投资组合模拟日收益'], cdf='norm')   
    #AD检验,返回统计量、显著性水平对应的临界值(统计量)、显著性水平
    st.anderson(x=Return_history['投资组合模拟日收益'], dist='norm')   
    #返回统计量及P值
    st.shapiro(Return_history['投资组合模拟日收益'])   
    #返回统计量及P值
    st.normaltest(Return_history['投资组合模拟日收益'])   
    

    在这里插入图片描述
    由频数分布直方图、正态性检验的P值(P<1%)结果可知,投资组合的日收益数据不服从正态分布,运用方差—协方差方法计算的投资组合VaR值会存在偏差。使用历史模拟法的计算程序如下:

    #计算历史模拟的VaR
    VaR99_1day_history = np.abs(np.percentile(a=Return_history['投资组合模拟日收益'],q=(1-X1)*100))
    VaR95_1day_history = np.abs(np.percentile(a=Return_history['投资组合模拟日收益'],q=(1-X2)*100))
    
    VaR99_10day_history = np.sqrt(10)*VaR99_1day_history
    VaR95_10day_history = np.sqrt(10)*VaR95_1day_history
    
    print('1天、99%的VaR:',VaR99_1day_history)
    print('10天、99%的VaR:',VaR99_10day_history)  
    print('1天、95%的VaR:',VaR95_1day_history)
    print('10天、99%的VaR:',VaR95_10day_history)  
    

    计算结果表明:持有期10天、置信水平99%的VaR=675.38万;持有期10天、置信水平95%的VaR=274.21万。

    2.3 蒙特卡洛模拟法

    蒙特卡洛模拟法又称随机抽样或统计试验方法,即从一个给定的分布中,随机抽取随机数并进行计算,该方法能较好地逼近实际分布情况。

    在投资组合的模拟抽样步骤如下:

    • 1 利用第 i i i 个资产的当前价值(最新价值) S i S_i Si 加总计算投资组合的当前价值 S p S_p Sp
    • 2 在第 i i i 个资产价值的日百分比变化 X i X_i Xi 所服从的分布中进行一次抽样得到 x i x_i xi
    • 3 利用抽样获取的 x i x_i xi 计算第 i i i 个资产下一个交易日的收益金额变动 x i S i x_iS_i xiSi
    • 4 计算本次抽样获取的下一交易日投资组合的盈亏 Δ S p = ∑ x i S i \Delta S_p = \sum x_iS_i ΔSp=xiSi
    • 5 重复上述第2-4步,并将获取的 Δ S p \Delta S_p ΔSp按大小顺序排列,从而构建投资组合在下一交易日的盈亏概率分布。
    • 6 计算持有期 1 天、置信水平 X 的 VaR 值,然后计算 N 天 的 V a R N天的VaR NVaR(公式: N 天 V a R = 1 天 V a R ∗ N N天VaR = 1天VaR*\sqrt{N} NVaR=1VaRN

    本文仍然使用上述案例数据进行说明,在模拟过程中,需要用到金融资产价格服从的随机过程公式,即

    S t = S t − Δ t e ( μ − 1 2 σ 2 ) Δ t + σ ε t Δ t S_t = S_{t-\Delta t}e^{(\mu-\frac{1}{2}\sigma^2)\Delta t + \sigma \varepsilon_t\sqrt{\Delta t}} St=StΔte(μ21σ2)Δt+σεtΔt

    上式中 ε t \varepsilon_t εt 的模拟过程中假定服从 t t t 分布或者正态分布。

    其服从 t t t 分布的 Python 程序如下:

    #蒙特卡洛模拟法
    import numpy.random as npr 
    I = 10000 #模拟次数
    #从学生t分布进行I次模拟
    epsilon = npr.standard_t(df=len(R),size=I)
    
    #获取最新收盘价
    S1 = data.iloc[-1,0]  #第一个资产的最新价格
    S2 = data.iloc[-1,1]  
    S3 = data.iloc[-1,2]  
    S4 = data.iloc[-1,3]  
    S5 = data.iloc[-1,4]  
    
    R_mean = R.mean()*252 #投资组合各资产的年化收益
    R_vol = R.std()*np.sqrt(252) #投资组合各资产的年化波动率
    dt = 1/252 #年化单个交易日
    
    #模拟投资组合下一个交易日各资产的收盘价
    S1_new = S1*np.exp((R_mean[0]-0.5*R_vol[0]**2)*dt + R_vol[0]*epsilon*np.sqrt(dt))
    S2_new = S2*np.exp((R_mean[1]-0.5*R_vol[1]**2)*dt + R_vol[1]*epsilon*np.sqrt(dt))
    S3_new = S3*np.exp((R_mean[2]-0.5*R_vol[2]**2)*dt + R_vol[2]*epsilon*np.sqrt(dt))
    S4_new = S4*np.exp((R_mean[3]-0.5*R_vol[3]**2)*dt + R_vol[3]*epsilon*np.sqrt(dt))
    S5_new = S5*np.exp((R_mean[4]-0.5*R_vol[4]**2)*dt + R_vol[4]*epsilon*np.sqrt(dt))
    
    #模拟投资组合下一个交易日各资产的盈亏
    S1_delta = (S1_new/S1 - 1)*value_port*weights[0]
    S2_delta = (S2_new/S2 - 1)*value_port*weights[1]
    S3_delta = (S3_new/S3 - 1)*value_port*weights[2]
    S4_delta = (S4_new/S4 - 1)*value_port*weights[3]
    S5_delta = (S5_new/S5 - 1)*value_port*weights[4]
    #计算投资组合下一个交易日的盈亏
    Sp_delta = S1_delta + S2_delta + S3_delta + S4_delta + S5_delta
    
    #下一交易日投资组合盈亏的可视化
    plt.figure(figsize=(10,8))
    plt.hist(Sp_delta,bins=30)
    plt.ylabel('频数')
    plt.grid(True)
    
    #蒙特卡洛模拟法计算VaR
    VaR99_1day_MS = np.abs(np.percentile(a=Sp_delta,q=(1-X1)*100))    
    VaR95_1day_MS = np.abs(np.percentile(a=Sp_delta,q=(1-X2)*100))
    
    VaR99_10day_MS = np.sqrt(10)*VaR99_1day_MS
    VaR95_10day_MS = np.sqrt(10)*VaR95_1day_MS
    
    #由于抽样随机数的原因,结果可能会有不同
    print('1天、99%的VaR:',VaR99_1day_MS)
    print('10天、99%的VaR:',VaR99_10day_MS)  
    print('1天、95%的VaR:',VaR95_1day_MS)
    print('10天、95%的VaR:',VaR95_10day_MS) 
    

    在这里插入图片描述
    计算结果表明:持有期10天、置信水平99%的VaR=640.81万;持有期10天、置信水平95%的VaR=436.52万。

    其服从正态分布的 Python 程序如下:

    #服从正态分布进行模拟
    epsilon_norm = npr.standard_normal(I)
    
    S_new = np.zeros(shape=(I,len(R_mean)))
    
    S1_new = S1*np.exp((R_mean[0]-0.5*R_vol[0]**2)*dt + R_vol[0]*epsilon*np.sqrt(dt))
    
    for i in range(len(R_mean)):
        S_new[:,i] = data.iloc[-1,i]*np.exp((R_mean[i]-0.5*R_vol[i]**2)*dt + R_vol[i]*epsilon_norm*np.sqrt(dt))
        
    S = np.array(data.iloc[-1])
    
    Sp_delta_norm = (np.dot(S_new/S-1,weights))*value_port
    
    
    plt.figure(figsize=(10,8))
    plt.hist(Sp_delta_norm,bins=30)
    plt.ylabel('频数')
    plt.grid(True)
    
    VaR99_1day_MSnorm = np.abs(np.percentile(a=Sp_delta_norm,q=(1-X1)*100))    
    VaR95_1day_MSnorm = np.abs(np.percentile(a=Sp_delta_norm,q=(1-X2)*100))
    
    VaR99_10day_MSnorm = np.sqrt(10)*VaR99_1day_MSnorm
    VaR95_10day_MSnorm = np.sqrt(10)*VaR95_1day_MSnorm
    
    print('1天、99%的VaR:',VaR99_1day_MSnorm)
    print('10天、99%的VaR:',VaR99_10day_MSnorm)  
    print('1天、95%的VaR:',VaR95_1day_MSnorm)
    print('10天、95%的VaR:',VaR95_10day_MSnorm) 
    

    在这里插入图片描述
    计算结果表明:持有期10天、置信水平99%的VaR=626.17万;持有期10天、置信水平95%的VaR=451.86万。

    3. 回溯检验

    回溯检验又称为后检验,即通过模型获取的VaR与实际发生的损益进行比较,以检验模型的准确性、可靠性,并据此对模型进行改进及优化。

    本文仍然使用上述案例进行说明,其Python程序如下:

    #回溯检测
    Return_2015 = Return_history.loc['2015-01-01':'2015-12-31']
    Return_2016 = Return_history.loc['2016-01-01':'2016-12-31']
    Return_2017 = Return_history.loc['2017-01-01':'2017-12-31']
    Return_2018 = Return_history.loc['2018-01-01':'2018-12-31']
    
    days_2015 = len(Return_2015)
    days_2016 = len(Return_2016)
    days_2017 = len(Return_2017)
    days_2018 = len(Return_2018)
    
    VaR_2015 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2015),index=Return_2015.index)
    VaR_2016 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2016),index=Return_2016.index)
    VaR_2017 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2017),index=Return_2017.index)
    VaR_2018 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2018),index=Return_2018.index)
    
    
    plt.figure(figsize=(9,15))
    plt.subplot(4,1,1)
    plt.plot(Return_2015)
    plt.plot(VaR_2015)
    plt.ylabel('频数')
    plt.grid(True)
    
    plt.subplot(4,1,2)
    plt.plot(Return_2016)
    plt.plot(VaR_2016)
    plt.ylabel('频数')
    plt.grid(True)
    
    plt.subplot(4,1,3)
    plt.plot(Return_2017)
    plt.plot(VaR_2017)
    plt.ylabel('频数')
    plt.grid(True)
    
    plt.subplot(4,1,4)
    plt.plot(Return_2018)
    plt.plot(VaR_2018)
    plt.ylabel('频数')
    plt.grid(True)
    
    #计算超出VaR的天数
    dayexcept_2015 = len(Return_2015[Return_2015['投资组合模拟日收益']<-VaR95_1day_VCM])
    dayexcept_2016 = len(Return_2016[Return_2016['投资组合模拟日收益']<-VaR95_1day_VCM])
    dayexcept_2017 = len(Return_2017[Return_2017['投资组合模拟日收益']<-VaR95_1day_VCM])
    dayexcept_2018 = len(Return_2018[Return_2018['投资组合模拟日收益']<-VaR95_1day_VCM])    
    
    print('2015年超出风险天数:',dayexcept_2015)
    print('2015年超出风险天数在全年的占比:',dayexcept_2015/days_2015)
    
    print('2016年超出风险天数:',dayexcept_2016)
    print('2016年超出风险天数在全年的占比:',dayexcept_2016/days_2016)
    
    print('2017年超出风险天数:',dayexcept_2017)
    print('2017年超出风险天数在全年的占比:',dayexcept_2017/days_2017)
    
    print('2018年超出风险天数:',dayexcept_2018)
    print('2018年超出风险天数在全年的占比:',dayexcept_2018/days_2018)
    

    在这里插入图片描述
    计算结果表明:2015年超出风险天数为22天,全年占比为9.05%,明显高于5%;2016年超出风险天数为9天,全年占比为3.69%;2017年超出风险天数为1天,全年占比为0.4%;2018年超出风险天数为6天,全年占比为2.47%。

    4. 压力VaR

    压力测试是一种以定量分析为主的风险分析方法,进而测算在小概率事件及极端情况下可能面临的损失。压力情景通常分为如下两种方法:头脑风暴和历史重现法。

    压力风险价值具体是指当市场变量在一定压力市场条件下通过历史模拟法计算得到的风险价值,其计算步骤与历史模拟法相同。

    本文仍然使用上述案例进行说明,2015年6月持续数月的股灾及2016年1月初的股市熔断可以看做案例数据中的极端情况。其Python程序如下:

    #压力测试
    return_stress = Return_history.loc['2015-06-15':'2016-01-07']
    
    return_stress.describe()
    
    return_zero = pd.DataFrame(np.zeros_like(return_stress),index = return_stress.index)
    
    #投资组合盈亏与0的可视化比较
    plt.figure(figsize=(8,6))
    plt.plot(return_stress)
    plt.plot(return_zero)
    plt.grid(True)
    
    
    SVaR99_1day = np.abs(np.percentile(a=return_stress,q=(1-X1)*100))    
    SVaR95_1day = np.abs(np.percentile(a=return_stress,q=(1-X2)*100)) 
    
    SVaR99_10day = np.sqrt(10)*SVaR99_1day
    SVaR95_10day = np.sqrt(10)*SVaR95_1day
    
    print('1天、99%的VaR:',SVaR99_1day)
    print('10天、99%的VaR:',SVaR99_10day)  
    print('1天、95%的VaR:',SVaR95_1day)
    print('10天、95%的VaR:',SVaR95_10day) 
    

    在这里插入图片描述
    计算结果表明:持有期10天、置信水平99%的压力VaR=1102.12万;持有期10天、置信水平95%的压力VaR=670.14万。

    展开全文
  • 其次,以各投资商年均建设运维成本最小为目标函数,考虑分时电价、建设补贴等因素,分别运用条件风险价值度量风、光、负荷不确定性带来的经济风险,并将其与目标函数相结合,构建多投资商虚拟电厂容量配置模型;...
  • VaR - 风险价值 - 蒙特卡罗法 - Python

    千次阅读 2020-12-19 02:16:11
    风险价值(VaR):即在市场正常波动的条件下,在一定概率水平P%下,某一金融资产或金融资产组合的VaR是在未来特定一段时间Δt内最大可能损失。现在我们使用蒙特卡罗模拟法进行风险价值的估算。简单来说,蒙特卡罗模拟...

    风险价值(VaR):即在市场正常波动的条件下,在一定概率水平P%下,某一金融资产或金融资产组合的VaR是在未来特定一段时间Δt内最大可能损失。 现在我们使用蒙特卡罗模拟法进行风险价值的估算。简单来说,蒙特卡罗模拟法即运用历史数据对未来进行多次模拟,以求得未来股价结果的概率分布。蒙特卡罗模拟法的公式如下, 其中S为股票的价格,

    为股价变动大小(有正负),μ为期望收益率(平均),Δt为时间间隔,σ为股票风险,ε为随机变量。将S移项可得:

    将S移项可得:

    表示股价的波动大小是由前一天的波动期望和一个服从正态分布的随机波动影响

    所以下一个

    的股价可以表示为

    以美的股价为例,先贴上程序代码如下,回头有空再详细解析:

    #环境&数据准备

    import sys as sy

    import numpy as np

    import pandas as pd

    import tushare as ts

    import pyecharts as pye

    from sklearn import datasets as ds

    import matplotlib as mpl

    from matplotlib import pyplot as plt

    import seaborn as sns

    import pyecharts as pye

    def stock_monte_carlo(start_price,days,mu,sigma):

    ''' This function takes in starting stock price, days of simulation,mu,sigma, and returns simulated price array'''

    # Define a price array

    price = np.zeros(days)

    price[0] = start_price

    # Schok and Drift

    shock = np.zeros(days)

    drift = np.zeros(days)

    # Run price array for number of days

    for x in range(1,days):

    # 假设股票的价格波动可以分为两部分,第一部分为drift,即股票会根据收益率波动,第二部分为shock,即随机波动

    shock[x] = np.random.normal(loc=mu * dt, scale=sigma * np.sqrt(dt))

    # Calculate Drift

    drift[x] = mu * dt

    # 当天价格 = 前一天价格 + 价格波动

    #其中价格波动 = 前一天价格×(drift + shock)

    price[x] = price[x-1] + (price[x-1] * (drift[x] + shock[x]))

    return price

    #读入美的“000333”2017-01-01 到 2018-11-08复权后数据

    df = ts.get_h_data('000333', start='2017-01-01', end='2018-11-8')

    #计算日均收益率

    df1 = df['close'].sort_index(ascending=True)

    df1 = pd.DataFrame(df1)

    df1['date'] = df1.index

    df1['date'] = df1[['date']].astype(str)

    df1["rev"]= df1.close.diff(1)

    df1["last_close"]= df1.close.shift(1)

    df1["rev_rate"]= df1["rev"]/df1["last_close"]

    df1 = df1.dropna()

    print(df1.head(10))

    # 设定365天

    days = 365

    # Now our delta

    dt = 1/days

    # Now let's grab our mu (drift) from the expected return data we got for AAPL

    mu = df1["rev_rate"].mean()

    # Now let's grab the volatility of the stock from the std() of the average return

    sigma = df1["rev_rate"].std()

    # Get start price

    start_price = 40.63

    runs = 1000

    simulations = np.zeros(runs)

    np.set_printoptions(threshold=5)

    for run in range(runs):

    tmpAr = stock_monte_carlo(start_price,days,mu,sigma)

    simulations[run] = tmpAr[days-1];

    plt.plot(tmpAr)

    del tmpAr

    plt.xlabel("Days")

    plt.ylabel("Price")

    plt.title('Monte Carlo Analysis for Tesla')

    plt.show()

    展开全文
  • 采用 Monte Carlo法估计资产组合时变风险价值;讨论了模型的检验问题,给出了 相关的检验方法。以上证综指与深证成指数据为样本,选用广义误差分布拟合误差分布并选取 BB1 Copula进行实 证分析,实证结果表明所建模型是...
  • 这是一项预测亚洲主要经济体风险价值(VaR)的实证研究。 首先使用不同的竞争模型来预测新加坡,马来西亚,中国香港,印度尼西亚,韩国,菲律宾,泰国,中国,中国台湾和印度的VaR。 然后使用无条件覆盖率测试,有...
  • 本文采用了不同的方法来计算四种货币汇率的投资组合的一日风险价值(VaR)预测。 首先回顾了研究中考虑的常规方法的概念和技术。 这些方法都有缺点,因此无法捕捉金融时间序列收益的典型特征,例如: 非正态分布,...
  • 为了防范借款人利用主动高估对评估报告的间接操纵行为,建立关于借款人和银行的不完全信息动态博弈模型,...最后,提出银行应当引入抵押品评估复审机制,并且实施“银行委托评估”的模式来降低抵押品价值高估的风险
  • 在不确定条件下,决定了...研究了风险需要补偿条件下的投资项目的价值;并将投资项目价值的评价模型推广到投资项目具有某一固定寿命和随机寿命的情形;同时探讨了具有指数随机寿命的投资项目的期权价值和投资的临界价格.
  • 1. 风险价值(Var) VaR(Value at Risk,风险价值或风险溢价)是度量一项投资或投资组合可能产生的下跌风险的方法,它描述的是在一定的概率水平下(即所谓的“置信水平”),在一定的时间内,持有一种正确或资产...
  • 研究结果表明,均衡定价与订货策略可以最小化品牌企业的条件风险价值,且最大化OEM供应商的期望利润;风险厌恶程度影响品牌企业的订货量,风险厌恶程度越大,订货量越小;品牌企业通过按缺货数量收取罚金,并向OEM供应商...
  • VaR、CoVaR、delta CoVaR计算方法综述 案例与代码

    万次阅读 多人点赞 2020-04-06 15:32:48
    在金融市场上,金融机构的风险不仅受其自身因素的影响,还受其他金融机构风险的冲击,这种机构之间的风险波动传导机制即为风险溢出效应,然而,传统的度量风险的主流方法VaR(在险价值)只能衡量机构自身的风险,却...
  • 针对一个考虑风险规避供应商与质量和服务水平的二级VMI供应链,应用条件风险价值(CVaR)准则刻画供应商的风险规避行为,提出由期权和成本分担构成的组合契约,构建以零售商为主导的Stackelberg博弈模型,探讨供应链协调...
  • 风险价值(VaR)用于尝试量化指定时间范围内公司或投资组合中的财务风险水平。VaR提供了一段时间内投资组合的最大损失的估计,您可以在各种置信度水平上进行计算。
  • 柔性契约, 零售商将条件在险价值作为其风险度量准则. 首先得到了零售商的初始订货量及期权购买量与风险厌恶 程度之间的解析表达式, 并分析了解的性质; 然后通过数值实验分析了风险厌恶程度及各个系统参数对最优...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,233
精华内容 26,093
关键字:

条件风险价值

友情链接: mysqlLearn.zip