An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20100309/39e1c48e/attachment.pl>
Portfolio Optimization
4 messages · Whit Armstrong, Heiko Mayer
You can do this w/ solve.QP. use something like this: solve.QP(lambda*2*vcv,fcst,Amat,bvec) and set up Amat and bvec to be the appropriate duration constraints. -Whit
On Tue, Mar 9, 2010 at 3:35 PM, Heiko Mayer <Heiko-Mayer at gmx.de> wrote:
Dear all, I am looking for a smart way of portfolio optimization. Currently, I am using solve.QP from quadprog package which is quite useful for MV optimization. However, I would like to create a bond portfolio with duration constraints. It would be possible to use solve.QP as well, but instead of setting a target return and getting the optimal MV portfolio given the duration constraints, I would like to set a target risk, expected returns and the covariance matrix to maximize the portfolio return. So far, I was unlucky finding something the SIG archive and I am afraid solve.QP is not applicable for this task. Any ideas are highly appreciated. Thanks, Heiko -- http://portal.gmx.net/de/go/dsl02 ? ? ? ?[[alternative HTML version deleted]]
_______________________________________________ R-SIG-Finance at stat.math.ethz.ch 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.
1 day later
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20100311/b03424fe/attachment.pl>
well, solve.QP is going to do this optim:
max[ x'E(R) - lambda * x' VCV x ]
Where x is your wgts vector.
You need to set lambda to reflect the amt of risk you want to take.
you can use Grinold and Kahn to decide what lambda should be:
target.lambda <- function(residual.risk, expected.IR, freq) {
## Grinold & Kahn page 122
expected.IR/(2 * residual.risk * sqrt(freq))
}
On Thu, Mar 11, 2010 at 2:48 PM, Heiko Mayer <Heiko-Mayer at gmx.de> wrote:
Whit,
Thank your for your comment. I have attached the current code that uses a
target return. As mentioned before, I would like to set a target risk
instead and solve for the maximum return. Could you please give me a sample
according to your suggestion below?
library(quadprog)
# Input
eReturn=c(0.04,0.05,0.045,0.055) #expected return
Duration=c(6,7,6.5,7.5) #current duration
Treturn=0.01 #Target return
TDuration=2 #Target duration
# Solver data
CovMat=cov(matrix(rnorm(400,mean=0,sd=0.05),nrow=100,ncol=4))
VM=c(rep(0,4))
A1=cbind(eReturn,Duration)
CV=c(Treturn,TDuration)
meq=2
# Solver
Res=solve.QP(Dmat=CovMat,dvec=VM,Amat=A1,bvec=CV,meq=meq)
# Solution summary
print(Res)
cat("Duration in years: ",sum(as.matrix(Res$solution) *
as.matrix(Duration)),"\n")
cat("Volatility: ",sqrt(Res$value*2),"\n")
cat("exp. return: ",sum(Res$solution*eReturn),"\n")
cat("Sum of weights: ",round(sum(Res$solution),digits=2),"\n")
Thank you,
Heiko
-------- Original-Nachricht --------
Datum: Tue, 9 Mar 2010 16:19:20 -0500
Von: Whit Armstrong <armstrong.whit at gmail.com>
An: Heiko Mayer <Heiko-Mayer at gmx.de>
CC: r-sig-finance at stat.math.ethz.ch
Betreff: Re: [R-SIG-Finance] Portfolio Optimization
You can do this w/ solve.QP.
use something like this:
solve.QP(lambda*2*vcv,fcst,Amat,bvec)
and set up Amat and bvec to be the appropriate duration constraints.
-Whit
On Tue, Mar 9, 2010 at 3:35 PM, Heiko Mayer <Heiko-Mayer at gmx.de> wrote:
Dear all, I am looking for a smart way of portfolio optimization. Currently, I am using solve.QP from quadprog package which is quite useful for MV optimization. However, I would like to create a bond portfolio with duration constraints. It would be possible to use solve.QP as well, but instead of setting a target return and getting the optimal MV portfolio given the duration constraints, I would like to set a target risk, expected returns and the covariance matrix to maximize the portfolio return. So far, I was unlucky finding something the SIG archive and I am afraid solve.QP is not applicable for this task. Any ideas are highly appreciated. Thanks, Heiko -- http://portal.gmx.net/de/go/dsl02 ? ? ? ?[[alternative HTML version deleted]]
_______________________________________________ R-SIG-Finance at stat.math.ethz.ch 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.
-- GMX DSL: Internet, Telefon und Entertainment f?r nur 19,99 EUR/mtl.! http://portal.gmx.net/de/go/dsl02