Hello,
I tried all instructions and it works well with the EW payout. But for the GMV Payout i got another error while executing my code (The same payout GMV proposed by M. Clauss in the last publication). Here is it :
myPayout_GMV = function(features)
{
df = getTickersGlobalAllocationChallenge()
bbLive = subset(features, tickers=df[df$field==“bb live”, “ticker”], fields=“bb_live”)
bbLive = bbLive@pxs
# Covariance matrix
n <- ncol(bbLive)
T <- nrow(bbLive)
e <- rep(1, n)
returns <- matrix(0, T, n)
for (j in 1:n) returns[, j] <- Delt(bbLive[, j], type = ‘arithmetic’)
Sigma <- cov(returns[2:T,]) * (T - 1) / (T - n - 2)
# Empirical constrained GMV with no short selling and a maximum weight of 0.2 by asset
# min(-d^T b + 1/2 b^T D b) with the constraints A^T b >= b_0
dvec <- numeric(n)
# Constraints of sum of the weights equal to 1 and weights between 0 and 0.2
Amat <- cbind(e, diag(1, n, n), -diag(1, n, n))
bvec <- cbind(1, t(numeric(n)), t(rep(-0.2, n)))
omega <- solve.QP(Sigma, dvec, Amat, bvec, meq = 1)$solution
signal = xts(x = matrix(0, nrow(bbLive), ncol(bbLive)), order.by = index(bbLive))
for(i in 1:T) signal[i, ] = omega
colnames(signal) = df[df$field==“bb live”, “ticker”]
return(signal)
}
# recreate object using this
portAllocation = portfolio(as.list(allocation[allocation$field==“bb live”, “ticker”]))
# payout only added after above line is ran
portAllocation = payout(portAllocation, myPayout_GMV)
portAllocation = eval(portAllocation, zoom=“2004::2015”)
backtest(portAllocation, tc=0.01, rebalancePenalty=0.02, rebalancePenaltyPerAsset=FALSE)
portTest = portfolio.createMissingData(portAllocation)
head(portTest@features@pxs)
portTest = eval(portTest)
head(portTest@weightsMatrix)
head(portTest@returnsMatrix)
Error in solve.QP(Sigma, dvec, Amat, bvec, meq = 1): NA/NaN/Inf in foreign function call (arg 1)