从环境中的行情列表中计算特定数量数据的函数
Function to calculate an specific quantile of volume data from a list of tickers in environment
我正在尝试使用股票列表的正缺口开盘值计算列数据的特定四分位数(在此示例中为 Q2)。
我试着向你解释我的方法:
从 .csv 文件加载我的代码列表,创建包含所有代码的列表(确定)
library(quantmod)
Tickers <- read.csv("nasdaq_tickers_list.csv", stringsAsFactors = FALSE)
getSymbols(Tickers$Tickers,from="2018-08-01", src="yahoo" )
stock_data = sapply(.GlobalEnv, is.xts)
all_stocks <- do.call(list, mget(names(stock_data)[stock_data]))
我有以下函数可以很好地计算列的四分位数 (Stock_name.Postitivegap) 并将它们分成相应的四分位数等级:
Posgapqrank <- 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$posgapqrank <- as.integer(cut(x[, grep(".Positivegap", colnames(x))],quantile(x[,grep(".Positivegap",colnames(x))],probs=0:4/4),include.lowest=TRUE))
x <- setNames(x, column_names)
return(x)
}
现在我想要一个函数来计算同一原始数据列的特定分位数,“.Positivegap”,即 Q2
为此,我在四分位数函数中引入了 0.25,但出现错误...这里有什么帮助吗?
Q2 <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Q2")
column_names <- c(names(x), stock_name)
x$gapq2 <- as.integer(quantile(x[,grep(".Positivegap",colnames(x))],0.25)))
x <- setNames(x, column_names)
return(x)
}
非常感谢您的评论。
让我们让它更简单,从一个不太复杂的例子开始
getSymbols("SQ", from="2018-01-01", src="yahoo")
quantile(SQ$SQ.Volume, 0.25)
#How do I ad a new column to the SQ dataset with the Q2 volume data for each day?
我创建了 2 个函数。 Q2 和 rolling_Q2。
我在列名“.Volume”的 grep 上测试了它们,两者都有效。 Q2 函数将从您提供的整个数据集中计算 Q2。 rolling_Q2 将根据滚动 window 计算 Q2 的值。默认 22.
Q2 <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Q2")
column_names <- c(names(x), stock_name)
x$gapq2 <- as.integer(quantile(x[,grep(".Positivegap",colnames(x))], 0.25))
x <- setNames(x, column_names)
return(x)
}
rolling_Q2 <- function(x, width = 22) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Q2")
column_names <- c(names(x), stock_name)
x$gapq2 <- rollapply(x[,grep(".Positivegap",colnames(x))], width = width, FUN = function(x) as.integer(quantile(x, 0.25)))
x <- setNames(x, column_names)
return(x)
}
我正在尝试使用股票列表的正缺口开盘值计算列数据的特定四分位数(在此示例中为 Q2)。
我试着向你解释我的方法:
从 .csv 文件加载我的代码列表,创建包含所有代码的列表(确定)
library(quantmod)
Tickers <- read.csv("nasdaq_tickers_list.csv", stringsAsFactors = FALSE)
getSymbols(Tickers$Tickers,from="2018-08-01", src="yahoo" )
stock_data = sapply(.GlobalEnv, is.xts)
all_stocks <- do.call(list, mget(names(stock_data)[stock_data]))
我有以下函数可以很好地计算列的四分位数 (Stock_name.Postitivegap) 并将它们分成相应的四分位数等级:
Posgapqrank <- 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$posgapqrank <- as.integer(cut(x[, grep(".Positivegap", colnames(x))],quantile(x[,grep(".Positivegap",colnames(x))],probs=0:4/4),include.lowest=TRUE))
x <- setNames(x, column_names)
return(x)
}
现在我想要一个函数来计算同一原始数据列的特定分位数,“.Positivegap”,即 Q2
为此,我在四分位数函数中引入了 0.25,但出现错误...这里有什么帮助吗?
Q2 <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Q2")
column_names <- c(names(x), stock_name)
x$gapq2 <- as.integer(quantile(x[,grep(".Positivegap",colnames(x))],0.25)))
x <- setNames(x, column_names)
return(x)
}
非常感谢您的评论。
让我们让它更简单,从一个不太复杂的例子开始
getSymbols("SQ", from="2018-01-01", src="yahoo")
quantile(SQ$SQ.Volume, 0.25)
#How do I ad a new column to the SQ dataset with the Q2 volume data for each day?
我创建了 2 个函数。 Q2 和 rolling_Q2。
我在列名“.Volume”的 grep 上测试了它们,两者都有效。 Q2 函数将从您提供的整个数据集中计算 Q2。 rolling_Q2 将根据滚动 window 计算 Q2 的值。默认 22.
Q2 <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Q2")
column_names <- c(names(x), stock_name)
x$gapq2 <- as.integer(quantile(x[,grep(".Positivegap",colnames(x))], 0.25))
x <- setNames(x, column_names)
return(x)
}
rolling_Q2 <- function(x, width = 22) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Q2")
column_names <- c(names(x), stock_name)
x$gapq2 <- rollapply(x[,grep(".Positivegap",colnames(x))], width = width, FUN = function(x) as.integer(quantile(x, 0.25)))
x <- setNames(x, column_names)
return(x)
}