r - 在没有 xts 对象的情况下在 PortfolioAnalytics 中创建有效边界

标签 r finance portfolio quantitative-finance r-portfolioanalytics

有没有办法在不指定 Assets 返回的 xts 对象的情况下在 PortfolioAnalytics 包中创建有效边界?相反,我想提供预期返回向量和协方差矩阵。

最佳答案

有两种方法。首先,您可以提供一个包含具有如下所示结构的矩阵的列表,然后调用包含此列表作为参数的 optimize.portfolio。

# num_assets is the number of assets in the portfolio
  momentargs <- list()
  momentargs$mu <- matrix(0, nrow=num_assets, ncol=1 )
  momentargs$sigma <- matrix(0, nrow=num_assets, ncol=num_assets)
  momentargs$m3 <- matrix(0, nrow=num_assets, ncol=num_assets^2)
  momentargs$m4 <- matrix(0, nrow=num_assets, ncol=num_assets^3)

  optimize.portfolio(R, portfolio, momentargs=momentargs, ...)

或者,您可以提供自己的函数来计算矩。下面显示了一个简单的示例,它重现了一些 PortfolioAnalytics 选项。
 set.portfolio.moments.user=function(R, portfolio, user_moments=NULL, user_method=c(returns, input, two_moment)) {
 #  
 #  Sets portfolio moments to user specified values
 #
 #  R               asset returns as in PortfoloAnalytics
 #  portfolio       a portfolio object as in PortfolioAnalytics
 #  user_moments    a list of four matices containing user-specified
 #                  values for the first four return moments
 #  user_method     user-specified method for computing moment matrices
 #                  defaults to calculation used by PortfolioAnalytics "sample" method
 #                  which uses PerformanceAnalytics functions to computer the higher-order moments

 if( !hasArg(user_method) | is.null(user_method)) user_method <- "returns" 
  tmpR <- R
  switch( user_method,  returns = { 
     momentargs <- list()
     momentargs$mu  <-  matrix(as.vector(apply(tmpR,2, "mean")), ncol = 1)
     momentargs$sigma  <-  cov(tmpR)
     momentargs$m3  <-  PerformanceAnalytics:::M3.MM(tmpR)
     momentargs$m4  <-  PerformanceAnalytics:::M4.MM(tmpR)
  }, input = {
     momentargs <- user_moments
  }, two_moment = {
     momentargs <- list()
     momentargs$mu <- matrix(as.vector(apply(tmpR,2, "mean")), ncol = 1)
     momentargs$sigma <- cov(tmpR)
     momentargs$m3 <- matrix(0, nrow=ncol(R), ncol=ncol(R)^2)
     momentargs$m4 <- matrix(0, nrow=ncol(R), ncol=ncol(R)^3)
   } )

   return(momentargs)
 }

然后,您将调用 PortfolioAnalytics
 optimize.portfolio(R, portfolio, momentFUN = "set.portfolio.moments.user", ...)

举个例子。

关于r - 在没有 xts 对象的情况下在 PortfolioAnalytics 中创建有效边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745976/

相关文章:

r - 用 R 计算每月返回

javascript - 对投资组合进行排序后,div 高度可以平滑地动画到新的高度

r - 由于特殊字符而面临更改数据帧结构的问题

c++ - 在不知道实际内部数据类型的情况下返回给定 SEXP 的子集

python - 使用 Sympy 和 Scipy 求解欠定方程组和约束

sql - SQL 保修每年的总财务风险

html - 带有缩略图的作品集网站(使用 CSS 设计),更新作品的最佳方式是什么?

r - 在 `R` 中创建一个矩阵,该矩阵中的每个元素都是另一个矩阵

r - 给定 R 中的离散 CDF,创建一个分位数函数,该函数可以处理

finance - Google 财经 API 地址已更改