Скользящая замена значений в строке на основе условия для стратегии Momentum - PullRequest
0 голосов
/ 08 апреля 2020

Я довольно новичок в R и мне нужна ваша помощь!

Я пытаюсь построить стратегию Momentum с данными CRSP в R. В моем коде я создал матрицу xts, которая содержит ряды активы, основанные на их доходах за каждый месяц. Мой следующий шаг состоял в том, чтобы заменить все ранги на NA, если их ранг выше, чем N. Таким образом, я могу запустить импульсную стратегию, которая инвестирует в N наиболее эффективных акций.

Однако моя проблема в том, что я хочу инвестировать в 10% лучших акций образца. Поскольку длина строки меняется каждый месяц, применение N = ncol(x)/10 не работает. Я думал о применении функции rollapply, которая вычисляет оптимальное n для строки: ((ncol(x)-rowSums(is.na(x))/10) и заменяет все значения примерно на это значение на NA, но каждый мой подход не работал и у меня абсолютно Понятия не имею, если я на правильном пути. Не могли бы вы помочь мне с этой функцией?

Я добавлю свой код, чтобы прояснить мою точку зрения. Я также применил ту же стратегию для короткого вектора, где рейтинг меняется на противоположный, а оставшиеся значения заменяются на -1. Я благодарен за каждый намек, который улучшает мою стратегию:)

ranking <- as.xts(t(apply(-monthly.returns12, 1, rank, na.last = "keep")))

lag.ranking <- lag(ranking, k = 1, na.pad = TRUE)

lag.ranking <- as.matrix(lag.ranking)

lag.ranking[lag.ranking > n] <- NA

lag.ranking[lag.ranking <= n] <- 1

long <- as.matrix(monthly.returns) * lag.ranking

vec.long.ret <- rowMeans(long, na.rm = TRUE)

vec.long.ret <- xts(x = vec.long.ret, order.by = index(monthly.returns))
...