Как создать новый столбец, рассчитывающий изменение цены без использования лаговых значений? - PullRequest
0 голосов
/ 19 сентября 2018

Все.Спасибо, что нашли время, чтобы просмотреть мой вопрос.Я ценю это.

Так что у меня возникли проблемы с запаздывающими значениями в R, например - у меня есть таблица ниже:

Semiannual    Price    Start    End    Multiplier   
  2010 Q1      121      .04     .06         1
  2010 Q2      121      .065    .059       1.083
  2011 Q1      121      .061    .063       1.0338
  2011 Q2      121      .057    .087       0.904

Выше приведены примеры данных запаса, которые у меня есть для некоторыхпортфель азбука.По сути, у меня есть цена портфеля в t-0 (которая равна 121), и столбец Start - это цена открытия в начале полугодового периода, а столбец end - это цена закрытия в полугодовом периоде.Я делаю ребалансировку в конце каждого полугодового периода, следовательно, мне нужно, чтобы цена (или моя база) оставалась неизменной на всем протяжении, и это требует, чтобы я умножил цену (121) на процентное изменение цены открытияновый период / цена закрытия завершающего периода.Поэтому в идеале мои результаты должны быть такими:

Semiannual    Price    Start    End    Multiplier   Actual Price
  2010 Q1      121      .04     .06         1         121
  2010 Q2      121      .065    .059       1.083      131.043
  2011 Q1      121      .061    .063       1.0338     135.4723
  2011 Q2      121      .057    .087       0.904      122.4669

Но я не могу на всю жизнь получить код для умножения отстающего значения фактической цены на множитель, поскольку столбец не определен при запускерасчеты.

Надеюсь, у меня есть какой-то смысл ...

По сути, принимая отстающее значение фактической цены * Множитель для каждого квартала, но 1 квартал - это сам по себе (121).

Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

0 голосов
/ 19 сентября 2018

Не нужно смотреть на предыдущие строки ... Множитель может быть вычислен с помощью cumprod(), который я называю temp_multiplier .. после этого, расчет цены прост .. удалите временный множитель впоследствии.

df <- read.table(text="Semiannual    Price    Start    End    Multiplier   
2010-Q1      121      .04     .06         1
2010-Q2      121      .065    .059       1.083
2011-Q1      121      .061    .063       1.0338
2011-Q2      121      .057    .087       0.904", header = T)

library( tidyverse )

df %>% mutate ( temp_Multiplier = cumprod( Multiplier ),
                Actual_price = temp_Multiplier * Price ) %>%
  select ( -temp_Multiplier )

#   Semiannual Price Start   End Multiplier Actual_price
# 1    2010-Q1   121 0.040 0.060     1.0000     121.0000
# 2    2010-Q2   121 0.065 0.059     1.0830     131.0430
# 3    2011-Q1   121 0.061 0.063     1.0338     135.4723
# 4    2011-Q2   121 0.057 0.087     0.9040     122.4669
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...