Last data update: 2014.03.03

R: Compute the Sharpe ratio of a hedged Markowitz portfolio.
as.del_sroptR Documentation

Compute the Sharpe ratio of a hedged Markowitz portfolio.

Description

Computes the Sharpe ratio of the hedged Markowitz portfolio of some observed returns.

Usage

as.del_sropt(X,G,drag=0,ope=1,epoch="yr")

## Default S3 method:
as.del_sropt(X, G, drag = 0, ope = 1, epoch = "yr")

## S3 method for class 'xts'
as.del_sropt(X, G, drag = 0, ope = 1, epoch = "yr")

Arguments

X

matrix of returns, or xts object.

G

an g x q matrix of hedge constraints. A garden variety application would have G be one row of the identity matrix, with a one in the column of the instrument to be 'hedged out'.

drag

the 'drag' term, c0/R. defaults to 0. It is assumed that drag has been annualized, i.e. has been multiplied by sqrt(ope). This is in contrast to the c0 term given to sr.

ope

the number of observations per 'epoch'. For convenience of interpretation, The Sharpe ratio is typically quoted in 'annualized' units for some epoch, that is, 'per square root epoch', though returns are observed at a frequency of ope per epoch. The default value is 1, meaning the code will not attempt to guess what the observation frequency is, and no annualization adjustments will be made.

epoch

the string representation of the 'epoch', defaulting to 'yr'.

Details

Suppose xi are n independent draws of a q-variate normal random variable with mean mu and covariance matrix Sigma. Let G be a g x q matrix of rank g. Let xbar be the (vector) sample mean, and S be the sample covariance matrix (using Bessel's correction). Let

zeta(w) = (w'xbar - c0)/sqrt(w'Sw)

be the (sample) Sharpe ratio of the portfolio w, subject to risk free rate c0.

Let w* be the solution to the portfolio optimization problem:

max {zeta(w) | 0 < w'Sw <= R^2, G S w = 0},

with maximum value z* = zeta(w*).

Note that if ope and epoch are not given, the converter from xts attempts to infer the observations per epoch, assuming yearly epoch.

Value

An object of class del_sropt.

Author(s)

Steven E. Pav shabbychef@gmail.com

See Also

del_sropt, sropt, sr

Other del_sropt: del_sropt, is.del_sropt

Examples

nfac <- 5
nyr <- 10
ope <- 253
# simulations with no covariance structure.
# under the null:
set.seed(as.integer(charToRaw("be determinstic")))
Returns <- matrix(rnorm(ope*nyr*nfac,mean=0,sd=0.0125),ncol=nfac)
# hedge out the first one:
G <- matrix(diag(nfac)[1,],nrow=1)
asro <- as.del_sropt(Returns,G,drag=0,ope=ope)
print(asro)
G <- diag(nfac)[c(1:3),]
asro <- as.del_sropt(Returns,G,drag=0,ope=ope)
# compare to sropt on the remaining assets
# they should be close, but not exact.
asro.alt <- as.sropt(Returns[,4:nfac],drag=0,ope=ope)
## Not run: 
# using real data.
if (require(quantmod)) {
  get.ret <- function(sym,...) {
    OHLCV <- getSymbols(sym,auto.assign=FALSE,...)
    lrets <- diff(log(OHLCV[,paste(c(sym,"Adjusted"),collapse=".",sep="")]))
    # chomp first NA!
    lrets[-1,]
  }
  get.rets <- function(syms,...) { some.rets <- do.call("cbind",lapply(syms,get.ret,...)) }
  some.rets <- get.rets(c("IBM","AAPL","A","C","SPY","XOM"))
  # hedge out SPY
  G <- diag(dim(some.rets)[2])[5,]
  asro <- as.del_sropt(some.rets,G)
}

## End(Not run)

Results


R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(SharpeR)

Attaching package: 'SharpeR'

The following object is masked from 'package:base':

    summary

> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/SharpeR/as.del_sropt.Rd_%03d_medium.png", width=480, height=480)
> ### Name: as.del_sropt
> ### Title: Compute the Sharpe ratio of a hedged Markowitz portfolio.
> ### Aliases: as.del_sropt as.del_sropt.default as.del_sropt.xts
> ### Keywords: univar
> 
> ### ** Examples
> 
> nfac <- 5
> nyr <- 10
> ope <- 253
> # simulations with no covariance structure.
> # under the null:
> set.seed(as.integer(charToRaw("be determinstic")))
> Returns <- matrix(rnorm(ope*nyr*nfac,mean=0,sd=0.0125),ncol=nfac)
> # hedge out the first one:
> G <- matrix(diag(nfac)[1,],nrow=1)
> asro <- as.del_sropt(Returns,G,drag=0,ope=ope)
> print(asro)
       SR/sqrt(yr) 2.5 % 97.5 % F value Pr(>F)
Sharpe      0.5412     0 0.9456  0.7308   0.57
> G <- diag(nfac)[c(1:3),]
> asro <- as.del_sropt(Returns,G,drag=0,ope=ope)
> # compare to sropt on the remaining assets
> # they should be close, but not exact.
> asro.alt <- as.sropt(Returns[,4:nfac],drag=0,ope=ope)
> ## Not run: 
> ##D # using real data.
> ##D if (require(quantmod)) {
> ##D   get.ret <- function(sym,...) {
> ##D     OHLCV <- getSymbols(sym,auto.assign=FALSE,...)
> ##D     lrets <- diff(log(OHLCV[,paste(c(sym,"Adjusted"),collapse=".",sep="")]))
> ##D     # chomp first NA!
> ##D     lrets[-1,]
> ##D   }
> ##D   get.rets <- function(syms,...) { some.rets <- do.call("cbind",lapply(syms,get.ret,...)) }
> ##D   some.rets <- get.rets(c("IBM","AAPL","A","C","SPY","XOM"))
> ##D   # hedge out SPY
> ##D   G <- diag(dim(some.rets)[2])[5,]
> ##D   asro <- as.del_sropt(some.rets,G)
> ##D }
> ## End(Not run)
> 
> 
> 
> 
> 
> dev.off()
null device 
          1 
>