RcmdrPlugin.RiskDemo (version 1.9)

portfOptim: Portfolio optimization for an index model

Description

Finds an optimal portfolio for long-term investments and plots a return distribution.

Usage

portfOptim(i, symbol, yield, vol, beta, 
  indexVol = 0.2, nStocks = 7, total = 1, balanceInt = 1, C = 0.05, 
  riskProportion = 1, riskfreeRate = 0, sim = FALSE)

Arguments

i

vector of the indices of the included risky investments

symbol

character vector of the symbols of the risky investments

yield

vector of expected yields (in euros)

vol

vector of volatilities

beta

vector of betas

indexVol

portfolio index volatility

nStocks

number of stocks in the portfolio

total

total sum invested (in euros)

balanceInt

balancing interval of the portfolio (in years)

C

expected portfolio return (in euros)

riskProportion

proportion of risky investments

riskfreeRate

risk-free interest rate

sim

is the return distribution simulated and plotted (logical value)?

Value

portfolio

numeric vector of allocations to each stock (in euros)

returnExpectation

expected value of the return distribution (in euros)

returnDeviation

standard deviation of the return distribution (in euros)

VaR

0.5%,1%,5%,10% and 50% percentiles of the return distribution (in euros)

Details

The arguments vol, beta, indexVol, riskProportion and riskfreeRate are given in decimals. The portfolio is optimized by minimizing the variance of the portfolio yield for a given expected yield. The returns are assumed to be log-normally distributed. The covariance matrix is computed using the single index model and the properties of the log-normal distribution.

References

Bodie, Kane, and Marcus (2014) Investments, 10th Global Edition, McGraw-Hill Education, (see Section 7.4 The Markowitz Portfolio Optimization Model and Section 8.2 The Single-Index Model).

See Also

drawFigure

Examples

Run this code
# NOT RUN {
data(stockData, package="RcmdrPlugin.RiskDemo")
with(stockData,portfOptim(i=1:5,symbol=rownames(stockData),
  yield=divYield/100,vol=vol/100,beta=beta/100,total=100, sim=TRUE))
# }

Run the code above in your browser using DataLab