回報

年化夏普比率計算

  • October 14, 2015

我試圖複製道瓊斯工業平均指數的買入並持有策略的年化夏普比率,該策略由多年組成。我得到了每日 DJIA(收盤價)價格指數(變數:“價格”)和無風險利率(以一年百分比為單位,變數:“rf”)。

我遵循的程序:

  • 通過以下方式計​​算每日日誌回報:log_returns = log(1+(price(t)/price(t-1)-1))
  • 通過以下方式計​​算每日對數無風險利率:log_rf = log(1+(rf/100))/252
  • 通過以下方式計​​算每日超額收益:excess_returns = log_returns-log_rf
  • 通過以下方式計​​算每日夏普比率:daily_sharpe = mean(excess_returns)/std(excess_returns)
  • 通過以下方式計​​算年化夏普比率:annualized_sharpe = sqrt(252)*daily_sharpe

然而,年化的夏普比率與報告的數字並不對應。我是否錯過了一步/做錯了什麼(使用日誌?)?

編輯:

論文使用的計算方法(Bajgrowicz & Scaillet,2012 年 12 月): 夏普比率計算

這就是人們通常使用 logreturns 計算 SR 的方式:

library(quantmod)
getSymbols('DJIA', src='yahoo', from = '2009-01-01')
price <- Cl(DJIA)
log_ret <- log(price/lag(price,1))
mean_log_ret <- mean(log_ret, na.rm=T)
sd_log_ret <- sd(log_ret, na.rm=T)
rf <- 0.0025 # benchmark
SR <- (252 * mean_log_ret - log(1+rf))/(sd_log_ret*sqrt(252))
SR

[1] 0.5565204

更新。具有幾何復合回報的 SR:

g_ret <- (price/lag(price,1) - 1)[-1]
n_periods <- length(g_ret)
avg_g_ret <- prod(1 + coredata(g_ret)) ^ (1/n_periods)
annual_g_return <- avg_g_ret^252 - 1
annual_sd_g_return <- sd(g_ret) * sqrt(252)
SR <- (annual_g_return - rf)/annual_sd_g_return
SR

[1] 0.5844989

另一種給貓剝皮的方法:

   # risk-free = 0
require(quantmod)
require( PerformanceAnalytics)
getSymbols('DJIA', src='yahoo', from = '2009-01-01', to ='2014-12-31')
price       <- Cl(DJIA)
simple.ret  <- price/lag(price)-1
table.AnnualizedReturns(simple.ret,Rf=0)[3,]
# [1] 0.7267

log.ret <- na.omit(ROC(price))
SD <- sd(log.ret)*sqrt(252)
R <- exp(mean(log.ret)*252)-1
SR <- R/SD
SR 
# [1] 0.7263711

引用自:https://quant.stackexchange.com/questions/21210