У меня есть рама данных о запасе ежедневно, с которого обращение получения Коэффициента Шарпа
> head(df)
Date .SXQR .SXTR .SXNR .SXMR .SXAR .SX3R .SX6R .SXFR .SXOR .SXDR
1 2000-01-03 364.94 223.93 489.04 586.38 306.56 246.81 385.36 403.82 283.78 455.39
2 2000-01-04 345.04 218.90 474.05 566.15 301.13 239.24 374.64 390.41 275.93 434.92
3 2000-01-05 338.22 215.88 464.20 542.29 298.22 239.55 373.26 383.48 272.54 430.05
4 2000-01-06 343.13 218.18 470.82 529.33 300.69 249.75 377.26 383.48 272.47 434.15
5 2000-01-07 349.46 220.10 478.87 531.65 306.50 255.17 381.19 390.23 273.76 447.02
6 2000-01-10 356.20 223.01 484.07 581.82 310.84 252.75 387.74 393.75 278.76 453.80
Мне хотелось бы использовать функцию Ретурн.екссесс де Перформансеаналитикс, потом вычислять пропорцию Шарпа вручную. Уже у меня есть месячные возвраты:
percent_change2 <- function(x)last(x)/first(x) - 1
monthly_return <- df %>%
group_by(gr = floor_date(Date, unit = "month")) %>%
summarize_at(vars(-Date, -gr), percent_change2) %>%
ungroup() %>%
select(-gr) %>%
as.matrix()
Однако, когда мы прибываем в Коэффициент Шарпа используя:
portfolio_excess_returns <- Return.excess(portfolio_monthly_returns,
Rf = .0003)
sharpe_ratio_manual <- round(
mean(portfolio_excess_returns) / StdDev(portfolio_excess_returns), 4
)
У меня есть следующая ошибка:
> portfolio_excess_returns <- Return.excess(monthly_return,
+ Rf = .0003)
Error in checkData(R) :
The data cannot be converted into a time series. If you are trying to pass in names from a data object with one column, you should use the form 'data[rows, columns, drop = FALSE]'. Rownames should have standard date formats, such as '1985-03-15'.
Действительно, мои месячные возвраты оказываются такими: все числовое:
.SXQR .SXTR .SXNR .SXMR .SXAR .SX3R
[1,] -0.09048063 -0.070602420 -0.05688696 0.138527917 -0.079429802 -0.07370042
[2,] -0.02547240 -0.017752597 0.08995378 0.227683167 -0.007488398 0.02070630
[3,] 0.04344800 0.072023472 -0.04419912 -0.118953102 0.042191076 0.05908376
[4,] 0.07704088 -0.001580195 0.03846154 -0.009596822 -0.030854538 0.01882887
[5,] -0.02398056 -0.058094333 -0.05729563 -0.193718178 -0.034808588 0.02313015
[6,] 0.05252934 0.007013127 -0.04359662 -0.016661155 -0.051900140 0.02085395
Нет времени. Как я могу менять функцию, которая способствует тому, чтобы группа добавила время, которое он группирует?
Здесь soluci¦n используя monthlyReturn
и (s)lapply
library(quantmod)
portfolio_monthly_returns=lapply(xts(df[,-1],order.by = df$Date),monthlyReturn)
portfolio_excess_returns <- lapply(portfolio_monthly_returns,Return.excess,
Rf = .0003)
sharpe_ratio_manual <- function(portfolio_excess_returns){
md=mean(portfolio_excess_returns)
sd=StdDev(portfolio_excess_returns)
is=round(
mean(portfolio_excess_returns) / StdDev(portfolio_excess_returns), 4
)
c(MD=md,SD=sd,IS=is)}
sapply(portfolio_excess_returns,sharpe_ratio_manual)
Или результат serÃ: сходный в:
#> sapply(portfolio_excess_returns,sharpe_ratio_manual)
# .SXQR .SXTR .SXNR .SXMR .SXAR .SX3R
# MD 0.007662462 0.004811897 0.004427923 0.0009964127 0.008533315 0.007904365
# SD 0.044747675 0.051776959 0.055490708 0.0594352491 0.078777333 0.036180954
# IS 0.171200000 0.092900000 0.079800000 0.0168000000 0.108300000 0.218500000