R: Расчет совокупной доходности портфеля - PullRequest
0 голосов
/ 04 марта 2019

Я загрузил скорректированные цены закрытия из Yahoo, используя пакет quantmod, и использовал его для создания портфеля, состоящего из 50% AAPL - и 50% FB -стоков.

Когда я строю график совокупной эффективности моего портфеля, я получаю производительность, которая (подозрительно) высока, так как она выше 100%:

library(ggplot2)
library(quantmod)

cmp <- "AAPL"
getSymbols(Symbols = cmp)
tail(AAPL$AAPL.Adjusted)

cmp <- "FB"
getSymbols(Symbols = cmp)
tail(FB$FB.Adjusted)


df <- data.frame("AAPL" = tail(AAPL$AAPL.Adjusted, 1000),
                 "FB"   = tail(FB$FB.Adjusted, 1000))

for(i in 2:nrow(df)){
  df$AAPL.Adjusted_prc[i] <- df$AAPL.Adjusted[i]/df$AAPL.Adjusted[i-1]-1
  df$FB.Adjusted_prc[i] <- df$FB.Adjusted[i]/df$FB.Adjusted[i-1]-1
}

df <- df[-1,]
df$portfolio   <- (df$AAPL.Adjusted_prc + df$FB.Adjusted_prc)*0.5
df$performance <- cumprod(df$portfolio+1)-1
df$idu <- as.Date(row.names(df))

ggplot(data = df, aes(x = idu, y = performance)) + geom_line()

enter image description here

Совокупная производительность выше 100% кажется мне очень нереальной.Это привело меня к мысли, что, возможно, необходимо отрегулировать / масштабировать загруженные данные с quantmod перед их использованием?

1 Ответ

0 голосов
/ 04 марта 2019

Я действительно боролся с этой проблемой, и у меня есть ощущение, что под ней есть проблема с данными.Чтобы продемонстрировать это, я вычисляю совокупную доходность, используя два подхода.Результаты показывают некоторые различия, которые я не могу объяснить - поэтому вы могли бы сначала взглянуть на них.

Сначала я запускаю ваш код:

library(quantmod)
library(tidyverse

cmp <- "AAPL"
getSymbols(Symbols = cmp)
tail(AAPL$AAPL.Adjusted)

cmp <- "FB"
getSymbols(Symbols = cmp)
tail(FB$FB.Adjusted)


df <- data.frame("AAPL" = tail(AAPL$AAPL.Adjusted, 1000),
                 "FB"   = tail(FB$FB.Adjusted, 1000))

for(i in 2:nrow(df)){
  df$AAPL.Adjusted_prc[i] <- df$AAPL.Adjusted[i]/df$AAPL.Adjusted[i-1]-1
  df$FB.Adjusted_prc[i] <- df$FB.Adjusted[i]/df$FB.Adjusted[i-1]-1
}

Затем явычисление совокупного дохода вручную путем деления текущего значения на начальное значение (т. е. цены в строке № 1) и вычитания 1. Кроме того, я cumsum 'извлекаю две акции' отдельно.

df$aapl_man <- df$AAPL.Adjusted / df$AAPL.Adjusted[1] - 1
df$fb_man <- df$FB.Adjusted / df$FB.Adjusted[1] - 1

df <- df[-1,]
df$portfolio   <- (df$AAPL.Adjusted_prc + df$FB.Adjusted_prc)*0.5
df$performance <- cumprod(df$portfolio+1)-1
df$idu <- as.Date(row.names(df))

df <- mutate_at(df, vars(contains("_prc")), cumsum)

Теперь я строю графики cumsum (синим цветом) с вычисленными вручную доходами (красным).

df %>%
  ggplot(aes(x = idu)) +
  geom_line(aes(y = AAPL.Adjusted_prc), colour = "blue") +
  geom_line(aes(y = aapl_man), colour = "red") +
  ggtitle("Apple")

df %>%
  ggplot(aes(x = idu)) +
  geom_line(aes(y = FB.Adjusted_prc), colour = "blue") +
  geom_line(aes(y = fb_man), colour = "red") +
  ggtitle("Facebook")

enter image description here enter image description here

В частности, для Facebook мы видим довольно существенную разницу между этими двумя подходами.Мне жаль, что я не смог решить вашу проблему, но я надеюсь, что это приведет вас к решению.

...