Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # MORE INFO: http://www.reakkt.com/2012/07/calculating-sharpe-ratio-and.html
- SharpeRatio <- function(x,rf=0.05,fq=1,annualized=FALSE,visualize=FALSE) {
- # x - returns
- # rf - risk free or constant benchmark interest rate
- # fq - frequency of x per day; 1 - daily
- # reference: http://en.wikipedia.org/wiki/Sharpe_ratio
- n <- length(x)
- rft <- (1+rf)^(1/(252*fq))-1
- xrf <- -rft+x # -rep(rft,n)
- xrf.m <- mean(xrf) # mean
- xrf.sd <- sd(xrf) # standard deviation
- sharpe.ratio <- xrf.m / xrf.sd
- if (annualized) sharpe.ratio <- sqrt(252*fq)*sharpe.ratio
- if (visualize) {
- matplot(cbind(cumprod(1+x),cumprod(rep(1+rft,n))),type="l",main="Sharpe Ratio",ylab="")
- mtext(paste("value =",format(sharpe.ratio,digits=4),
- ifelse(annualized,"annualized,",""),
- "excess mean =",format(xrf.m,digits=4)),line=0.5)
- }
- return( sharpe.ratio )
- }
- InformationRatio <- function(x, rb, fq=1, annualized=FALSE, visualize=FALSE) {
- n <- length(x)
- xrb <- x-rb
- xrb.m <- mean(xrb)
- xrb.sd <- sd(xrb)
- information.ratio <- xrb.m / xrb.sd
- if (annualized) information.ratio <- sqrt(252*fq)*information.ratio
- if (visualize) {
- matplot(cbind(cumprod(1+x),cumprod(1+y)),type="l",main="Information Ratio",ylab="")
- mtext(paste("ratio =",format(information.ratio,digits=4),
- ifelse(annualized,"annualized,",""),
- "excess mean =",format(xrb.m,digits=4)),line=0.5)
- }
- return( information.ratio )
- }
- # example:
- x <- rnorm(252,mean=0.5,sd=2)/100 # 0.1/100 -> 0.1%
- y <- rnorm(252,mean=0.2,sd=1)/100
- summary(x)
- tail(cumprod(1+x),1)
- SharpeRatio(x,rf=0.05,fq=1,annualized=TRUE,visualize=TRUE)
- InformationRatio(x,y,fq=1,annualized=FALSE,visualize=TRUE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement