pandas_VaR

目录

由来

概念

代码


由来

金融资产的分布相比于正态分布一般会是左偏、较陡峭、肥尾

pandas_VaR_第1张图片

不符合正态分布的金融资产,标准差不再是衡量风险的完美度量工具,所以VaR作为一个新的风险指标用以衡量风险

概念

1. VaR(Value at Risk),中文叫做风险价值,在给定的置信水平和目标时段下预期的最大损失(或最坏情况下的损失)。
2. VaR的计算方法有多种,本文使用“历史模拟法”,以历史数据为依据来预测将来,即借助过去一段时间内的投资组合收益频数分布,找到在既定置信水平下的最低收益率,将这个最低收益率作为VaR估算值【注意:历史模拟法需要的样本数据一般不能少于1500个】
3. 历史模拟法计算结果解读,如果历史数据是日数据,预测的是未来1天;如果历史数据是周数据,预测的是未来5天(未来一周);如果历史数据是月数据,预测的是未来20天(未来一月);以此类推

例如:

pandas_VaR_第2张图片

在95%的置信水平下,在未来N天内,最大损失不会超过|a|【a为负数,在表述时说的是损失所以加了绝对值符号】;也可以说是在未来N天内,只有5%的可能性,损失会超过|a| 

代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df_004 = pd.read_csv('600004.csv',encoding='utf-8')
df_004['ret'] = df_004['closePrice'].pct_change()
df = df_004.iloc[-2016:]
df['ret'].plot.hist(bins=200)

pandas_VaR_第3张图片

# 历史模拟法
def var_historic(r,level=5):
    '''
    给定一个DataFrame或者Series,计算VaR
    注意:5%的显著性水平要写成5,而不是0.05
    '''
    if isinstance(r,pd.Series):
        return abs(np.percentile(r,level))
    elif isinstance(r,pd.DataFrame):
        return r.aggregate(var_historic,level=level)
    else:
        raise TypeError('收益率必须为DataFrame或Series')
var_historic(df['ret'])

 

解读结果:
传入的是日数据,所以N=1
在95%的置信水平下(有95的信心认为),在未来一天内600004的损失不会超过3.2648%;也可以说,在未来一天内,只有5%的可能性,600004的损失会超过3.2648%

从日VaR得出月VaR

如果资产服从正态分布,并且资产的每一个天数之间是服从独立同分布(也就是互相之间没有联系),并且平均收益率为0,符合以上前提,我们才可以把日VaR扩展到月VaR,如果不符合,只能说是近似

monthly_var = var_historic(df['ret'])*np.sqrt(20)
monthly_var

解读结果:
在95%的置信水平下(有95的信心认为),在未来一月内600004的损失不会超过14.6008%;也可以说,在未来一天内,只有5%的可能性,600004的损失会超过14.6008%

你可能感兴趣的:(pandas基础与金融实例练习,python)