r语言 - 用于从环境中的股票代码列表中计算交易量数据的特定分位数的函数



我正在尝试使用股票列表的正缺口开仓值计算列数据的特定四分位数(在本例中为 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)
}

现在我想要一个函数来计算同一原始数据列的特定分位数,".正差距",即第二季度

为此,我在四分位数函数中引入了 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 个函数。第 2 季度和第 rolling_Q2 季度。

我在列名的 grep 上测试了它们"。卷",两者都有效。Q2 函数将根据您提供给它的整个数据集计算 Q2。rolling_Q2将根据滚动窗口计算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)
}

最新更新