VaR

重采样计算VaR

实现方法:

  • 在历史数据中进行又放回的随机抽样,抽取300天的收益率,并计算样本对应的VaR
  • 多次重复以上步骤,得到若干样本对应的VaR
  • 对多次采样得到的VaR结果取平均值作为总体的VaR值
    以50ETF基金为例:
1
2
3
4
5
6
7
8
9
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn
%matplotlib inline
data = pd.read_csv('data/510050.txt', encoding='gbk', sep='\t', parse_dates=True, header=1, index_col=0,
usecols=[0,1,2,3,4,5], engine='python', skipfooter=2, skipinitialspace=True)
data['d_return'] = data['收盘'].pct_change()
data.head()


定义sample_VaR方法,实现随机抽取300天的收益率,计算样本对应VaR的值

1
2
3
4
5
def sample_VaR(data, size):
sample = np.random.choice(data, size, replace=True)
VaR_5 = np.percentile(sample, 5)
VaR_1 = np.percentile(sample, 1)
return (VaR_5, VaR_1)

产生N条收益率路径(N=1000),将得到的VaR结果取平均值作为总体的VaR值

1
2
3
4
samples = [sample_VaR(data_pool, 300) for i in range(1000)]
VaRs = pd.DataFrame(samples, columns=['VaR_5', 'VaR_1'])
VaR_mean = VaRs.mean()
VaR_mean

得到:

key value
VaR_5 -0.026690
VaR_1 -0.050181