Hasta los detalles de la presentación, la combinación de la función de distribución beta y Sharpe da los datos del gráfico. A continuación se muestra el código para calcular y trazar el valor de la mediana y una cinta entre el cuantil 25 y 75, donde las pruebas retrospectivas son en un solo año.
require(SharpeR)
require(dplyr)
require(ggplot2)
bt_len <- 252 # length of backtest
days_py <- 252 # number of days per year
back_lens <- exp(seq(log(1),log(1e6),length.out=1000))
# compute 0.25, 0.5, and 0.75 quantiles
qv <- data_frame(nbacktest=unique(round(back_lens))) %>%
mutate(q25=SharpeR::qsr(qbeta(0.25,nbacktest,1),df=bt_len-1,ope=days_py),
q50=SharpeR::qsr(qbeta(0.50,nbacktest,1),df=bt_len-1,ope=days_py),
q75=SharpeR::qsr(qbeta(0.75,nbacktest,1),df=bt_len-1,ope=days_py))
ph <- qv %>%
ggplot(aes(x=nbacktest,y=q50,ymin=q25,ymax=q75)) +
geom_line() + geom_ribbon(alpha=0.25) +
scale_x_log10() +
labs(x='number of independent backtests',
y='maximal Sharpe, annualized',
title='maximal Sharpe over many independent 1 year backtests, median and IQR')
print(ph)