[R-SIG-Finance] FPortfolio / MAxReturnPortfolio

Pierre Org pierre at lequeux.org
Mon Jul 7 17:48:13 CEST 2014


Hi Alexios

This is great stuff, exactly what I was after. Many thanks for this.

Kind regards

Pierre
-----Original Message-----
From: alexios ghalanos [mailto:alexios at 4dscape.com] 
Sent: 07 July 2014 15:55
To: Pierre Org; r-sig-finance at r-project.org
Subject: Re: [R-SIG-Finance] FPortfolio / MAxReturnPortfolio

I'm not too familiar with how fPortfolio works, but since you asked for
"alternative code" here is how you can do this with parma:

###############
library(parma)
spec = parmaspec(S = cov(datamatrix), riskB=0.1,
risk="EV",riskType="maxreward", LB = rep(0,8), UB = rep(1,8), budget=1,
forecast=colMeans(datamatrix))
weights(parmasolve(spec, solver="SOCP")) #############

Note the following:
1. The risk (riskB) is an upper bound since this is an inequality constraint
(less than or equal to), and is available to solve for covariance inputs
using an SOCP solver (you can also solve QCQP problems as well).
2. The solution can be completely dominated by one asset (as in the case
above) unless you change risk bound or constraints (UB, LB or some other
linear combinations ... see documentation) 3. You MUST provide a forecast
vector (which is not all zeros).

Regards,

Alexios

On 07/07/2014 12:04, Pierre Org wrote:
>  
> 
> I am working on a small allocation project and have tried to used the 
> maxreturnPortfolio function in the fPortfolio package to find the 
> portfolio that maximise return for a specified level of risk, However 
> the function does not seem to work. It returns zero weights 
> independently of the  level of risk provided as the target. Has anyone 
> had experience of working with that function or could provide an
alternative code ?
> 
>  
> 
>  
> 
> require(timeseries)
> 
> require(fPortfolio)
> 
> require(quantmod)
> 
>  
> 
> ETF <-  
> c('VGSIX','VUSTX','VGTSX','VFISX','VTSMX','VFITX','VEIEX','VIPSX')
> 
> getSymbols(ETF,source = 'yahoo')
> 
> datamat <-
> as.xts(cbind(get("VGTSX")[,4],get("VTSMX")[,4],get("VEIEX")[,4],get("V
> GSIX")
> [,4],get("VUSTX")[,4],get("VFITX")[,4],get("VFISX")[,4],get("VIPSX")[,
> 4]))
> 
> datamatrix <-  as.xts(apply(datamat,2,function(x) diff(log(x))))
> 
> colnames(datamatrix) <-  c('Global Equities Ex US','US 
> Equities','Emerging Markets Stocks',"REITs",'Treasuries 15 - 
> 30Y','Treasuries 5-10Y','Treasuries 1-4Y','US Inflation Linked 7 - 
> 20Y')
> 
>  
> 
> x <- timeSeries(datamatrix, charvec=as.Date(index(datamatrix)))
> 
> Constraints <-  "LongOnly"
> 
> Spec  <- portfolioSpec()
> 
> setTargetRisk(Spec) <- 0.1
> 
> getWeights(maxreturnPortfolio(x, Spec, Constraints)@portfolio)
> 
>  
> 
>  
> 
>  
> 
> VGTSX.Close VTSMX.Close VEIEX.Close VGSIX.Close VUSTX.Close 
> VFITX.Close VFISX.Close VIPSX.Close
> 
>           0           0           0           0           0           0
> 0           0 
> 
>  
> 
>  
> 
>  
> 
> Any help appreciated
> 
> 
> 	[[alternative HTML version deleted]]
> 
> _______________________________________________
> R-SIG-Finance at r-project.org mailing list 
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions
should go.
> 
>



More information about the R-SIG-Finance mailing list