Я довольно новичок в 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))