用于根据环境中的行情清单计算体积数据的特定分位数

时间:2018-10-04 15:54:17

标签: r function quantmod quantile

我正在尝试使用库存列表的正缺口打开值来计算列数据的特定四分位数(在此示例中为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?

1 个答案:

答案 0 :(得分:1)

我创建了2个函数。 Q2和rolling_Q2。

我在列名“ .Volume”的grep上对它们进行了测试,两者均有效。 Q2函数将从您提供的整个数据集中计算Q2。 rolling_Q2将基于滚动窗口计算Q2的值。默认值22。

how to do this ?