我在Portfolio Analytics包中加入自定义预期回报时遇到问题.通常预期回报是一些专业期望/观点,或与基本指标分开计算.Portfolio Analytics允许创建自定义时刻函数来计算过去回报的时刻,但我不明白如何将已经计算的回报合并到优化问题中.感谢任何帮助,这里是一个小示例数据集:
#Download package and sample returns
library(PortfolioAnalytics)
library(PerformanceAnalytics)
data(edhec)
returns <- tail(edhec[,1:4], 10)
#Example expected return xts that I'm usually working with. Calculated separately.
N <- 10
M <- 4
views <- as.xts(data.frame(matrix(rnorm(N*M,mean=0,sd=0.05), N, M)), order.by = index(returns))
colnames(views) <- colnames(returns)
Run Code Online (Sandbox Code Playgroud)
让我们创建一些基本的投资组合.
pf <- portfolio.spec(assets = colnames(returns))
pf <- add.constraint(portfolio = pf, type = "full_investment")
pf <- add.constraint(portfolio = pf, type = "long_only")
pf <- add.objective(portfolio = pf, type = "return", name = "mean")
pf <- add.objective(portfolio = …Run Code Online (Sandbox Code Playgroud) 这只是关于我可以在r performanceanalytics优化器函数中使用的最大库存数量的一般问题.
我的代码适用于优化大约110个资产的任何东西,但是超出这个范围的任何东西都会产生错 我找不到任何有关实际资产数量限制的文档.任何帮助表示赞赏.
除此之外,我在下面添加了可重现的代码示例:
library(xts)
library(PortfolioAnalytics)
num_stocks = 300
num_periods = 200
rets = replicate(num_stocks, rnorm(num_periods))
colnames(rets) = paste0('stock', 1:num_stocks)
dates = seq(as.Date('2000-01-01'), by = 'month', length.out = num_periods) - 1
#100 stocks, returns optimal weights
equity.data = xts(rets, order.by = dates)[,1:100]
stocks <- colnames(equity.data)
# Specify an initial portfolio
portf.init <- portfolio.spec(stocks)
# Add constraints
# weights sum to 1
portf.minvar <- add.constraint(portf.init, type="full_investment")
# box constraints
portf.minvar <- add.constraint(portf.minvar, type="box", min=0.00, max=0.10)
# Add objective
# objective …Run Code Online (Sandbox Code Playgroud) 希望有人可以帮助或经历过类似情况,指出我的方向是什么问题.
这是我的设置(请参阅下面的希望可重现的代码):
问题:
使用重新指定价格的回报似乎在几个月的再平衡时产生了不正确的结果(见图),因为回报不能保证这样的回报曲线,因为大多数投资组合都投资于"TLT" - 20年期美国国债.
这将给出优化结果,如下图所示:
这是一个更大系统的一部分,但我希望我创建了一个可重现的代码,它显示了在使用重新平衡时似乎只适用的问题,这表明可能存在index或日期问题.但是,当将两个返回xts导出到Excel时,我看不出任何差异.
我在代码的末尾添加了多个图表,因为目前我不允许发布两张以上的图片.
任何帮助或提示非常感谢指出我正在发生的事情......
packages <- c('quantmod', 'FinancialInstrument', 'PortfolioAnalytics', 'Quandl')
for(i in 1:length(packages))
library(packages[i], character.only = TRUE, quietly = TRUE)
.baseOptions <- list()
# set base CCY
.baseOptions$portf$portfolio.base.ccy <- "EUR"
# set date from which the analysis should be started
.baseOptions$portf$analyse.from <- "2004-03-31/"
# set symbols
symbol.list <- c("LQD", #iShares Investment Grade Corporate Bonds
"SHY", #iShares 1-3 year TBonds
"IEF", #iShares 3-7 year TBonds …Run Code Online (Sandbox Code Playgroud) 有没有办法在PortfolioAnalytics包中创建有效的边界,而无需指定资产回报的xts对象?相反,我想提供预期收益的向量和协方差矩阵.
finance portfolio r quantitative-finance r-portfolioanalytics
我花了几个小时试图了解成功利用PortfolioAnalytics包中的optimize.portfolio()函数需要什么,但我收到了多个错误,尽管尝试了各种optimize_methods(例如,"DEoptim","ROI").
安装PortfolioAnalytics之后,我在指定组合约束后尝试运行optimize.portfolio(),但是我收到了以下错误:
错误:%search()||中的paste0("package:",插件)%requireNamespace(插件,....不是TRUE
尝试下载"插件",但我收到:
Warning in install.packages : package ‘plugin’ is not available (for R version 3.3.1)
Run Code Online (Sandbox Code Playgroud)
我首选的optimize_method是"ROI",我已经安装了"ROI"包但我仍然收到需要"插件"的错误.
我尝试通过手动安装"DEoptim"来解决这个问题,但我仍然无法成功运行optimize.portfolio():
pspec <- portfolio.spec(assets=names(fxreturns))
pspec <- add.constraint(pspec,type = "diversification", div_target = 0.5)
pspec <- add.constraint(pspec,type = "return",return_target=0.05)
pspec <- add.constraint(pspec,type = "leverage")
optimize.portfolio(fxreturns,portfolio = pspec,optimize_method = "DEoptim")
Run Code Online (Sandbox Code Playgroud)
尽管下载了多个软件包(为什么当我第一次安装"PortfolioAnalytics"时R不会自动安装所需的软件包?),当我运行"DEoptim"时收到以下错误:
seq.default中的错误(from = round(min,rounding),to = round(max,rounding),:'from'不能是NA,NaN或无限
作为参考,这里是我加载的所有包:
library(quantmod)
library(tseries)
library(PerformanceAnalytics)
library(PortfolioAnalytics)
library(xts)
library(timeSeries)
library(TTR)
require(Rblpapi)
require(reshape2)
require(xlsx)
require(Hmisc)
require(ROI)
require(data.table)
require(DEoptim)
Run Code Online (Sandbox Code Playgroud)