Given a predefined benchmark Sharpe ratio,the observed Sharpe Ratio can be expressed in probabilistic terms known as the Probabilistic Sharpe Ratio. PSR provides an adjusted estimate of SR, by removing the inflationary effect caused by short series with skewed and/or fat-tailed returns and is defined as the probability of the observed sharpe ratio being higher than the reference sharpe ratio.

ProbSharpeRatio(
  R = NULL,
  Rf = 0,
  refSR,
  p = 0.95,
  weights = NULL,
  n = NULL,
  sr = NULL,
  sk = NULL,
  kr = NULL,
  ignore_skewness = FALSE,
  ignore_kurtosis = TRUE
)

Arguments

R

an xts, vector, matrix, data frame, timeSeries or zoo object of the returns input

Rf

the risk free rate

refSR

a single value or a vector when R is multicolumn. It defines the reference Sharpe Ratio and should be in the same periodicity as the returns (non-annualized).

p

the confidence level

weights

(if R is multicolumn and the underlying assets form a portfolio) the portfolio weights

n

(if R is NULL) the track record length of the returns

sr

(if R is NULL) the sharpe ratio of the returns

sk

(if R is NULL) the skewness of the returns

kr

(if R is NULL) the kurtosis of the returns

ignore_skewness

If TRUE, it ignores the effects of skewness in the calculations

ignore_kurtosis

If TRUE, it ignores the effects of kurtosis in the calculations

Value

A list containing the below

  • The probability that the observed Sharpe Ratio is higher than the reference one

  • The p-level confidence interval of the Sharpe Ratio

References

Marcos Lopez de Prado. 2018. Advances in Financial Machine Learning (1st ed.). Wiley Publishing.

Author

Tasos Grivas <tasos@openriskcalculator.com>, Pulkit Mehrotra

Examples


data(edhec)
ProbSharpeRatio(edhec[,1],refSR = 0.23) 
#> $sr_prob
#>                                      Convertible Arbitrage (SR > 0.23 )
#> Probabilistic Sharpe Ratio(p= 95 %):                          0.9209357
#> 
#> $sr_confidence_interval
#>                       Lower Bound Sharpe Ratio Upper Bound
#> Convertible Arbitrage      0.2109       0.3455      0.4802
#> 
ProbSharpeRatio(refSR = 1/12^0.5,Rf = 0,p=0.95,sr = 2/12^0.5,sk=-0.72,kr=5.78,n=59)
#> $sr_prob
#> [1] 0.9597434
#> 
#> $sr_confidence_interval
#>   Lower Bound Sharpe Ratio Upper Bound
#> 1      0.3057       0.5774       0.849
#> 

### Higher moments are data intensive, kurtosis shouldn't be used for short timeseries
ProbSharpeRatio(edhec[,1:2],refSR = c(0.28,0.24), ignore_skewness = FALSE, ignore_kurtosis = FALSE)
#> Warning: The Reference Sharpe Ratio greater than the Observed Sharpe Ratio for the returns of:  NA 
#> $sr_prob
#> [1] 0.7601113
#> 
#> $sr_confidence_interval
#>   Lower Bound Sharpe Ratio Upper Bound
#> 1       0.193       0.3455      0.4981
#> 
ProbSharpeRatio(edhec[,1:2],refSR = c(0.28,0.24), ignore_skewness = FALSE, ignore_kurtosis = TRUE)
#> Warning: The Reference Sharpe Ratio greater than the Observed Sharpe Ratio for the returns of:  NA 
#> $sr_prob
#> [1] 0.7883343 0.7883343
#> 
#> $sr_confidence_interval
#>   Lower Bound Sharpe Ratio Upper Bound   <NA>   <NA>
#> 1      0.2109       0.2109      0.3455 0.4802 0.4802
#> 
ProbSharpeRatio(edhec[,1:2],refSR = c(0.28,0.24), ignore_skewness = TRUE, ignore_kurtosis = TRUE)
#> Warning: The Reference Sharpe Ratio greater than the Observed Sharpe Ratio for the returns of:  NA 
#> $sr_prob
#> [1] 0.8617196 0.8617196
#> 
#> $sr_confidence_interval
#>   Lower Bound Sharpe Ratio Upper Bound   <NA>   <NA>
#> 1      0.2465       0.2465      0.3455 0.4446 0.4446
#> 

ProbSharpeRatio(edhec[,1:2],refSR = 0.26,weights = c(0.5,0.5), 
                ignore_skewness = FALSE, ignore_kurtosis = FALSE)
#> $sr_prob
#>                                      portfolio.returns (SR > 0.26 )
#> Probabilistic Sharpe Ratio(p= 95 %):                      0.9552203
#> 
#> $sr_confidence_interval
#>                   Lower Bound Sharpe Ratio Upper Bound
#> portfolio.returns      0.2635       0.3735      0.4835
#>