2

给定历史每日回报,我如何计算单个股票头寸的投资组合分配,基于在 21 天内损失不超过初始投资组合价值的 10%?(有 95% 的置信度。)

基于例如的一些起始代码

import numpy as np
from scipy.stats import norm

returns = [-0.01, -0.02, -0.01, 0.04, 0.02, 0.01, -0.03]
mu = np.mean(returns)
std = np.std(returns)
valueAtRisk = norm.ppf(0.05, mu, sigma)

但是,以上仅告诉我我 1 天的风险。我的问题是另一个方向;假设我不想在 21 天内损失超过 10%,那么在给定回报分布的情况下,我可以分配什么。

我更喜欢可以直接计算的答案,但蒙特卡洛的答案是可以接受的。

感谢您的帮助。

4

1 回答 1

6
import numpy as np

returns = np.random.randn(1000)

假设收益是独立同分布的(iid),那么 T 天的波动率等于 sqrt(T) 乘以一日波动率的乘积。

# one-way 5% quantile, critical value is 1.64
VaR_21 = returns.std() * np.sqrt(21) * 1.645
VaR_21
Out[72]: 7.4161618430166989

或者,您可以执行引导程序。这是从历史数据集中随机选择 21 天,计算随机抽取的 21 天的回报。绘制直方图并获得 5% 分位数。

def generate_random_index(n=21):
    # could set replace to False as well
    return np.random.choice(np.arange(1000), size=n, replace=False)  

VaR_simulated_21 = []
n_bootstrap = 10000
for _ in range(n_bootstrap):
    VaR = returns[generate_random_index(21)].sum()
    VaR_simulated_21.append(VaR)

plt.hist(VaR_simulated_21)
np.percentile(VaR_simulated_21, q=5)
Out[108]: -8.0686958215041216

在此处输入图像描述

于 2015-06-17T15:09:43.403 回答