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

Я использую getSymbols для загрузки данных из нескольких запасов.

Меня интересуют данные тома, поэтому я разделил столбец данных тома на (0-4), чтобы выделить данные каждого тома его корреспонденту.квартиль (1,2,3,4) в новом столбце с именем xxx.Volqrank

Теперь я хотел бы взглянуть на столбец xxx.Volqrank в последней доступной строке списка и сказать мне, какойтикеры имеют значение 3.

Желаемый результат, который я ищу, - получить новый список с акциями, данные о его квартильном объеме равны 3 в последних доступных данных списка.

#Reproducible example

library(quantmod)

library(xts)

Symbols <-     c("XOM","MSFT","JNJ","IBM","MRK","BAC","DIS","ORCL","LW","NYT","YELP")

start_date=as.Date("2018-06-01")


getSymbols(Symbols,from=start_date)


# Put all stocks in big list, by checking which xts objects are in the global environment.

stock_data = sapply(.GlobalEnv, is.xts)

all_stocks <- do.call(list, mget(names(stock_data)[stock_data]))


#function to split volume data quartiles into 0-4 results

Volume_q_rank <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Volqrank")
column_names <- c(names(x), stock_name)
x$volqrank <- as.integer(cut(quantmod::Vo(x),
                               quantile(quantmod::Vo(x),probs=0:4/4),include.lowest=TRUE))
x <- setNames(x, column_names)
return(x)
}

all_stocks <- lapply(all_stocks, Volume_q_rank)

Мой первоначальный подход состоял в том, чтобы использовать

lapply(all_stocks, function(x) which(x[, grep("\\.Volqrank",names(x))]==3

Но это не работает, какие-либо идеи?

Я бы хотел, чтобы новый список снова использовался для загрузки позжеданные о запасах, но на этот раз с использованием другого интервала (например, 5 минут)

Любая помощь будет оценена.

Спасибо.

1 Ответ

0 голосов
/ 23 декабря 2018

Один из способов получения того, что вы хотите упомянуть в комментариях, выглядит следующим образом:

sapply возвращает именованный вектор со значением TRUE или FALSE на акцию.Использование names с which вернет названия интересующих вас акций.

stock3 <- sapply(all_stocks, function(x) {last(x[, grep("\\.Volqrank",names(x))]) == 3})
stocks_with3 <- names(which(stock3 == TRUE))
...