如何根据前一天交易量数据的四分位值对股票列表进行子集化以获取新列表
How to subset a list of stocks to get a new list based on quartile values of volume data of last day
我正在使用 getSymbols 从一些股票下载数据。
我对体积数据感兴趣,所以我将体积数据列拆分为 (0-4),以将每个体积数据分配到名为 [= 的新列中对应的四分位数 (1,2,3,4) 30=]
现在我想查看列表最后一行的 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 分钟)
我们将不胜感激。
谢谢。
获得您在评论中提到的想要的东西的一种方法是这样的:
应用 returns 一个命名向量,每只股票为 TRUE 或 FALSE。使用 names
和 which
将 return 您感兴趣的股票名称。
stock3 <- sapply(all_stocks, function(x) {last(x[, grep("\.Volqrank",names(x))]) == 3})
stocks_with3 <- names(which(stock3 == TRUE))
我正在使用 getSymbols 从一些股票下载数据。
我对体积数据感兴趣,所以我将体积数据列拆分为 (0-4),以将每个体积数据分配到名为 [= 的新列中对应的四分位数 (1,2,3,4) 30=]
现在我想查看列表最后一行的 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 分钟)
我们将不胜感激。
谢谢。
获得您在评论中提到的想要的东西的一种方法是这样的:
应用 returns 一个命名向量,每只股票为 TRUE 或 FALSE。使用 names
和 which
将 return 您感兴趣的股票名称。
stock3 <- sapply(all_stocks, function(x) {last(x[, grep("\.Volqrank",names(x))]) == 3})
stocks_with3 <- names(which(stock3 == TRUE))