【发布时间】:2016-10-03 14:00:44
【问题描述】:
我是 R 新手,对使用 Portfolio Analytics 软件包计算 VaR 和 CVaR 有一些疑问。
我在 csv 文件中有历史返回数据。例如如下:
time return of stock1 return of stock2 return of stock3
2016-01-01 -0.6184181087 -0.126394629 0.2537283152
2016-01-02 -0.1738764113 -0.8100882955 -0.3162766513
2016-01-03 -0.8229430174 -0.5007778048 -0.880233143
... ... ... ...
(I) 我想计算这个投资组合的风险价值和条件风险价值,权重相同(后来权重不同)。我想使用历史数据。 (我确实不想对概率分布做出假设,尤其是不要假设高斯分布。)例如对于 VaR,我基本上想找到百分位数。
(II) 我想通过优化 CVaR 来优化权重。 (再次按历史方法)。
我有以下问题:
如果我使用 VaR 函数并选择 method = c("historical"),它会计算我的历史数据的相应百分位数吗?
-
在一些在线教程的帮助下,到目前为止我已经尝试过(但没有完全理解)以下内容:
*Loading data into file* testData_return <- Return.read(filename = "myTest.csv", frequency = "d",format = "%Y-%m-%d", header = TRUE) *Create the portfolio specification object* Wcons <- portfolio.spec(assets = colnames(testData_return)) * Add box constraints * Wcons <- add.constraint(portfolio = Wcons, type='box', min=0, max=1) Wcons <- add.constraint( portfolio=Wcons, type = "weight_sum", min_sum=0.99, max_sum=1.01) * why can't I put min_sum=1, max_sum=1 ? * * Add an objective * ObjSpec = add.objective(portfolio = Wcons, type = "risk", name = "VaR", arguments=list(p=0.95), enabled=TRUE) * value of the objective function * constrained_objective(w=rep(1/3,3), R=testData_return,portfolio = ObjSpec)给我“VaR 0.5707718”。
为了测试这个结果,我选择了 VaR 函数
VaR(testData_return, p = 0.95, method = c("historical"), clean = c("none"), portfolio_method = c("single"))
这会将我作为结果返回:
"stock1 stock2 stock3
VaR -0.8836453 -0.9002575 -0.9151286"
因此,我不明白为什么会得到不同的结果,也不明白为什么最后一行会得到三个结果。
为了进一步测试,我使用python如下:
我通过将每天的收益相加并除以 3 来合并收益,得到一个包含一列的 csv 文件。
-0.1636948075
-0.433413786
-0.7346513217
...
然后我计算了这些回报的第 95 个百分位(同上)。
percentile = 0.95
* fname is the name of my file with the one column of data *
returns_values = np.loadtxt(fname, skiprows=0, usecols=[0], unpack=True)
print(np.percentile(returns_values, percentile))
结果是 -0.74321324。
所以,我不明白为什么这个结果与我的第一个结果(-0.74 != 0.57)有很大不同。
另外,我不明白为什么我的第二种方法给了我每只股票的 VaR。
【问题讨论】:
-
抱歉,我是一个学究,但要指出的是,您仍在对概率分布做出假设——特别是未来的价格分布将与您选择的历史窗口和权重中的数据一致.这与使用高斯函数一样大。并不是说这是一个糟糕的假设,但重要的是要注意它。
-
嗨,是的,确实如此!感谢您的评论。下次我会注意用更好的方式表达它。 ;)
标签: r optimization var