## Realized portfolio returns and volatility

Compute the returns for a portfolio over one or more time periods, and compute the realized volatility.

## Preparation

This presumes that you have or  can create a portfolio object.  For example, that you have mastered “Passive, no benchmark (minimum variance)”.

• portfolio object
• Portfolio Probe

You need a portfolio object with which to create valuations.

You also need to have the Portfolio Probe package loaded into your R session:

`require(PortfolioProbe)`

If you don’t have Portfolio Probe, see “Demo or Buy”.

### Doing the example

`require(pprobeData)`

## Doing it

• compute the returns for a portfolio object
• get the realized volatility of the portfolio

### Compute the returns for a portfolio object

We give the `valuation` function a price matrix that covers the period in which we are interested, and we specify which type of returns we want (the default is, of course, to return valuations rather than returns):

```retOpMinVarDaily07 <- valuation(opMinVar,
xassetPrices[251:502,], returns="log")```

The prices given are the daily closing prices during 2007.

The result is a vector of the log return of the portfolio for each day:

```> summary(retOpMinVarDaily07 * 100)
Min.   1st Qu.    Median      Mean   3rd Qu.
-2.533000 -0.331700  0.080790  0.007378  0.398000
Max.
2.908000```

### Get the realized volatility of the portfolio

Now that we have returns for the portfolio, we can compute its realized volatility over that time frame.

Volatility is merely the annualized standard deviation (and often expressed in percent):

```volOpMinVarDaily07 <- sd(retOpMinVarDaily07) *
sqrt(252) * 100```

The result is:

```> volOpMinVarDaily07
 11.57053```

### One annual return

We want to get the simple return for the entire year of 2007 for our portfolio.  The command to do that is:

```sretOpMinVarAnn07 <- valuation(opMinVar,
xassetPrices[c(251, 502),], returns="simple")```

There are two small changes from the creation of `retOpMinVarDaily07` above.  The row subscript of the prices matrix changes from ‘`251:502`‘ to ‘`c(251, 502)`‘.  The colon operator gives us all the integers from 251 to 502 while we get just the extremes with the second version.  With this second version we get just one return.

The other change is of course that we are asking for simple returns instead of log returns.

The result is:

```> sretOpMinVarAnn07
2007-12-31
0.01869028
attr(,"timestamp")
 "Thu Sep 27 16:53:37 2012"
attr(,"call")
valuation.portfolBurSt(x = opMinVar, prices = xassetPrices[c(251,
502), ], returns = "simple")```

This has some attributes that give information about the object, but the heart of it is just one number (about 1.87%).

## Explanation

The `valuation` function is multi-talented.

## Further details

We have given the `valuation` function an object that was the result of a call to `trade.optimizer`.  But we didn’t need to.  We would get the same thing if we gave it a vector that described the portfolio — that is, a vector of the number of units of each asset where the names are the asset identifiers.

In particular, these commands give us the same answer:

```retOpt <- valuation(opMinVar, xassetPrices[500:503,],
returns="simple")
retVec <- valuation(opMinVar\$new.portfolio,
xassetPrices[500:503,], returns="simple")```

We compare the two return vectors by binding them into a matrix, and show the vector that we give to `valuation` in the second instance:

```> rbind(retOpt, retVec)
2007-12-28   2007-12-31   2008-01-02
retOpt 0.001850554 -0.006919563 -0.009832901
retVec 0.001850554 -0.006919563 -0.009832901
> opMinVar\$new.portfolio
XA105 XA280 XA298 XA643 XA675 XA709 XA731 XA778
2659 17920  2906 20192  7182  6485  4166  6840
XA891 XA966
5200  6247```