TwoAssetsPortfolio {fPortfolio} | R Documentation |
A collection and description of functions
to investigate the efficient frontier for
a two assets portfolio from a given return
series in the mean-variance and CVaR sense
when short selling is forbidden.
The functions are:
twoAssetsMarkowitz | Efficient frontier for Markowitz PF, |
twoAssetsCVaR | Efficient frontier for CVaR PF. |
frontierTwoAssetsMarkowitz(x, length = 100, title = NULL, description = NULL) frontierTwoAssetsCVaR(x, length= 100, alpha = 0.05, title = NULL, description = NULL) ## S3 method for class 'fPFOLIO2': print(x, ...) ## S3 method for class 'fPFOLIO2': plot(x, ...) ## S3 method for class 'fPFOLIO2': summary(object, ...)
alpha |
a numeric value, the confidence interval, by default 0.05. |
description |
a character string, assigning a brief description to an
"fPFOLIO" object.
|
length |
the number of equidistand return points on the efficient frontier. |
object |
[summary] - cr
an object of class "fPFOLIO2" .
|
title |
a character string, assigning a title to an "fPFOLIO"
object.
|
x |
[frontier*] - a numeric matrix or multivariate time series consisting of a series of returns. [print][plot] - cr an object of class "fPFOLIO2" .
|
... |
optional arguments to be passed. |
frontierTwoAssetsMarkowitz
frontierTwoAssetsCVaR
return a S4 object class of class "fPFOLIO2"
, with the following
slots:
@call |
the matched function call. |
@data |
the input data in form of a data.frame. |
@description |
allows for a brief project description. |
@pfolio |
the results as a list returned from the underlying analytical results. |
@method |
the selected method used by the optimization algorithm, here "Exact Analytical Solution". |
@model |
the model used for the optimization, here "Two Assets Markowitz Portfolio" or "Two Assets CVaR Portfolio. |
@title |
a title string. |
pm, ps |
the portfolios mean (the return) and standard deviation (the risk) values . |
Diethelm Wuertz for the Rmetrics port.
Elton E.J., Gruber M.J. (1991); Modern Portfolio Theory and Investment Analysis, 4th Edition, Wiley, NY, pp. 65–93.
## SOURCE("fBasics.A0-SPlusCompatibility") ## SOURCE("fPortfolio.B3-TwoAssetsPortfolio") ## Not run: ## berndtInvest - xmpPortfolio("\nStart: Load monthly data set of returns > ") data(berndtInvest) # Select "IBM" and "DEC" twoAssets = berndtInvest[, c("IBM", "DEC")] rownames(twoAssets) = berndtInvest[, 1] head(twoAssets) ## Compute Efficient Frontier: myPortfolio = frontierTwoAssetsMarkowitz(twoAssets) ## Print Efficient Frontier: print(myPortfolio) ## Plot Efficient Frontier: plot(myPortfolio) ## Compute Efficient Frontier: myPortfolio = frontierTwoAssetsCVaR(twoAssets) ## Print Efficient Frontier: print(myPortfolio) ## Plot Efficient Frontier: plot(myPortfolio) show = function(i,j) { w = (0:100)/100 alpha = 0.04 par(mfrow = c(2,2), cex = 0.5) print(c(i, j)) twoAssets = cbind(berndtInvest[, i], berndtInvest[, j]) print(head(twoAssets)) means = apply(twoAssets, 2, mean) x.Return = y.VaR = y.CVaR = y.CVaRplus = NULL for (k in 1:101) { weights = c(w[k], 1-w[k]) x.Return = c(x.Return, weights y.VaR = c(y.VaR, -VaR(twoAssets, weights, alpha)) y.CVaR = c(y.CVaR, -CVaR(twoAssets, weights, alpha)) y.CVaRplus = c(y.CVaRplus, -CVaRplus(twoAssets, weights, alpha)) } plot(x = range(x.Return), y = range(c(y.VaR, y.CVaR, y.CVaRplus)), xlab = as.character(i), ylab = as.character(j), type = "n") lines(x.Return, as.vector(y.VaR), col ="red") lines(x.Return, as.vector(y.CVaR), col = "green") lines(x.Return, as.vector(y.CVaRplus), col = "blue") } par(mfrow = c(1,1)) w = (0:200)/200 alpha = 0.04 for (i in 2:17) { for (j in (i+1):18) { twoAssets = cbind(berndtInvest[, i], berndtInvest[, j]) means = apply(twoAssets, 2, mean) x = NULL y = NULL for (k in 1:201) { weights = c(w[k], 1-w[k]) x = c(x, weights y = c(y, -CVaRplus(twoAssets, weights, alpha)) } s = round(100*abs( y[201] - y[1] ) / ( max(y) - min(y))) print(c(i, j, s)) plot(x, y, main = paste(as.character(i), as.character(j))) } } i = 5; j = 13 twoAssets = cbind(berndtInvest[, i], berndtInvest[, j]) means = apply(twoAssets, 2, mean) x = y = NULL for (k in 1:201) { weights = c(w[k], 1-w[k]) x = c(x, weights y = c(y, -VaR(twoAssets, weights, alpha)) } s = round(100*abs( y[201] - y[1] ) / ( max(y) - min(y))) plot(x, y, main = paste(as.character(i), as.character(j))) ## End(Not run)