could you please take a look at my code (which would only take a few minutes) and point out the problem? Thanks very much. Here is my code:

# download price data
data(SP500_symbols)
allStock <- stockDataDownload(stock_symbols = SP500_symbols, 
                    from = "2010-01-01", to = "2019-12-31")  
#tried to download all 505 stocks, 
#but some cannot be downloaded so around 450+ stocks
#some stocks were not listed so I have to fill in the NAs with the earlist value

#fill NAs in adjusted prices with the next nearest value 
allStock$adjusted <- na.locf(allStock$adjusted, fromLast = TRUE)   
colSums(is.na(allStock$adjusted)) # all 0, indicating no NAs
anyNA(allStock$adjusted) #FALSE, indicating no NAs

#the following 2 functions have no problems as I copied the code from 
#*Fast Design of Risk Parity Portfolios*

# define portfolios to be backtested
# risk parity portfolio
#this func returns a weight vector
risk_parity <- function(dataset, ...) {
  prices <- dataset$adjusted
  log_returns <- diff(log(prices))[-1]

  Sigma <- cov(log_returns)
  rpp <- riskParityPortfolio(Sigma)
  return(rpp$w)
}

# tangency portfolio (maximum sharpe ratio)
# this func returns a weight vector
library(quadprog)
max_sharpe_ratio <- function(dataset, ...) {
    prices <- dataset$adjusted
    log_returns <- diff(log(prices))[-1]
    
    N <- ncol(prices)
    Sigma <- cov(log_returns)
    mu <- colMeans(log_returns)
    if (all(mu <= 1e-8))
        return(rep(0, N))
    Dmat <- 2 * Sigma
    Amat <- diag(N)
    Amat <- cbind(mu, Amat)
    bvec <- c(1, rep(0, N))
    dvec <- rep(0, N)
    res <- solve.QP(Dmat = Dmat, dvec = dvec, Amat = Amat, bvec = bvec, meq = 1)
    w <- res$solution
    return(w/sum(w))
}

#when I run this, 'Error in (function (portfolio_fun, data, price_name, shortselling, leverage,  : prices contain NAs.'
bt <- portfolioBacktest(list("risk parity portfolio" = risk_parity,
                             "tangency portfolio" = max_sharpe_ratio),
                        list(allStock),
                        benchmarks = c("index","1/N"),
                        lookback = 252,
                        optimize_every = 3*20, #quarterly
                        rebalance_every = 3*20,
                        shortselling = TRUE,
                        execution = 'next period')

Given this problem I tried to extract only two lists from allStock variable, which is a list of 7 containing 'open''high' ... 'adjusted' and 'index'. Here is my code:

adjustedAndIndex <- list('adjusted' = allStock$adjusted, 'index' = allStock$index)

#run portfolioBacktest again
bt <- portfolioBacktest(list("risk parity portfolio" = risk_parity,
                             "tangency portfolio" = max_sharpe_ratio),
                        list(adjustedAndIndex),
                        benchmarks = c("index","1/N"),
                        lookback = 252,
                        optimize_every = 3*20, #quarterly
                        rebalance_every = 3*20,
                        shortselling = TRUE,
                        execution = 'next period')

And this time there's another problem, when I run round(backtestSummary(bt)$performance, 4) ,I expect to get the results like this:

#                   risk parity portfolio tangency portfolio       1/N     index
#Sharpe ratio                      1.1955             1.1966    1.2032    0.7928
#max drawdown                      0.1851             0.2785    0.2167    0.1978
#annual return                     0.1830             0.2493    0.2032    0.1139
#annual volatility                 0.1531             0.2083    0.1689    0.1437
#Sortino ratio                     1.6932             1.7286    1.7058    1.1063
#downside deviation                0.1081             0.1442    0.1191    0.1030
#Sterling ratio                    0.9889             0.8951    0.9377    0.5758
#Omega ratio                       1.2353             1.2321    1.2357    1.1565
#VaR (0.95)                        0.0151             0.0206    0.0168    0.0150
#CVaR (0.95)                       0.0226             0.0306    0.0249    0.0226
#rebalancing period               59.5526            59.5526   59.5526 2263.0000
#turnover                          0.0015             0.0157    0.0013    0.0000
#ROT (bps)                      4671.1538           577.7948 5974.2958        NA
#cpu time                          0.0007             0.0007    0.0004    0.0010
#failure rate                      0.0000             0.0000    0.0000    0.0000

But I only get

> round(backtestSummary(bt)$performance, 4)
                   risk parity portfolio tangency portfolio       1/N     index
Sharpe ratio                          NA                 NA    1.0864    0.7928
max drawdown                          NA                 NA    0.2015    0.1978
annual return                         NA                 NA    0.1558    0.1139
annual volatility                     NA                 NA    0.1434    0.1437
Sortino ratio                         NA                 NA    1.5283    1.1063
downside deviation                    NA                 NA    0.1019    0.1030
Sterling ratio                        NA                 NA    0.7733    0.5758
Omega ratio                           NA                 NA    1.2153    1.1565
VaR (0.95)                            NA                 NA    0.0147    0.0150
CVaR (0.95)                           NA                 NA    0.0222    0.0226
rebalancing period                    NA                 NA   59.5526 2263.0000
turnover                              NA                 NA    0.0013    0.0000
ROT (bps)                             NA                 NA 4718.1301        NA
cpu time                              NA                 NA    0.0005    0.0010
0

There are 0 answers