将股票列表的最后可用值导出到 .csv 的功能
Function to export last available value of list of stocks to .csv
我正在尝试将一些来自 Quantmod 的数据导出到 .csv。
我想导出到 .csv 中的是代码的名称和我的列表中有关交易量 (Vol) 的最后可用数据
让我解释一下我的方法:
将代码列表从 .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]))
让我们来看看 MSFT
的 "Tail"
MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
2018-09-28 114.19 114.57 113.68 114.37 21647800 114.37
2018-10-01 114.75 115.68 114.73 115.61 18883100 115.61
2018-10-02 115.30 115.84 114.44 115.15 20787200 115.15
2018-10-03 115.42 116.18 114.93 115.17 16648000 115.17
2018-10-04 114.61 114.76 111.63 112.79 34821700 112.79
2018-10-05 112.63 113.17 110.64 112.13 29064300 112.13
如果我们使用 "last",我们会在我的列表中获得最新的可用数据量
last(MSFT$MSFT.Volume)
MSFT.Volume
2018-10-05 29064300
现在,我想创建一个函数来获取我的列表 (all_stocks) 中所有代码的最后可用 "Volume" 数据,并将其导出到 .csv 文件中。
所需的输出是一个 .csv 文件,其中包含代码名称和最后的交易量数据。
MSFT,29064300
stock1,volume1
stock2,volume2
有什么方法可以帮助吗?
非常感谢。
创建了一个函数来获取每只股票的最后成交量。然后你可以使用 lapply 来获取数据,但我用 rbind 将它包装在 Reduce
中,以便在 data.frame 中很好地获取所有内容以准备写入 csv。
stock_last_volume <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
volume <- last(quantmod::Vo(x))
colnames(volume) <- "volume"
my_df <- data.frame(stock = stock_name, volume = volume, stringsAsFactors = FALSE, row.names = NULL)
return(my_df)
}
all_volumes <- Reduce(rbind, lapply(all_stocks, stock_last_volume))
all_volumes[1:2, ]
stock volume
1 MSFT 29064300
2 GOOG 1184300
# write.csv to working directory
write.csv(all_volumes, file = "all_volumes.csv")
假设最后的注释中给出了设置,sapply
通过代码名称将卷提取到命名向量中 vols
。然后将其重新加工成数据框 DF
。如果指定了 file
,则将其写出。最后 return 数据框。
我们展示了几种不同的使用方法。
# create data frame of last volumes and optionally log to .csv
lastVols <- function(Names, file, envir = .GlobalEnv) {
vols <- sapply(Names, function(nm) Vo(last(get(nm, envir))))
DF <- data.frame(stock = names(vols), volume = unname(vols), stringsAsFactors = FALSE)
if (!missing(file)) write.csv(DF, file, row.names = FALSE, quote = FALSE)
DF
}
给予:
# return volumes and display on stdout()
volsDF <- lastVols(Tickers, stdout())
## stock,volume
## MSFT,29064300
## TSLA,17913000
# returns volumes and log to csv file
volsDF <- lastVols(Tickers, "myfile.csv")
# return volumes; don't log
lastVols(Tickers)
## stock volume
## 1 MSFT 29064300
## 2 TSLA 17913000
备注
library(quantmod)
Tickers <- c("MSFT", "TSLA")
getSymbols(Tickers)
quantmod 附加包 qmao
(https://github.com/gsee/qmao) 有一个函数 PF
(或 makePriceFrame
,这是相同函数的较长名称)将在一行中为您提供最后一天或您感兴趣的任何一天的音量(参数 prefer
让您 select 您感兴趣的列):
library(qmao)
getSymbols(c('AAPL','AMZN','MSFT’))
tail(PF(c('AAPL','AMZN','MSFT'),prefer = 'Volume',silent = TRUE),1)
AAPL AMZN MSFT
2018-10-08 28793100 7358200 29633400
我正在尝试将一些来自 Quantmod 的数据导出到 .csv。
我想导出到 .csv 中的是代码的名称和我的列表中有关交易量 (Vol) 的最后可用数据
让我解释一下我的方法:
将代码列表从 .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]))
让我们来看看 MSFT
的 "Tail" MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
2018-09-28 114.19 114.57 113.68 114.37 21647800 114.37
2018-10-01 114.75 115.68 114.73 115.61 18883100 115.61
2018-10-02 115.30 115.84 114.44 115.15 20787200 115.15
2018-10-03 115.42 116.18 114.93 115.17 16648000 115.17
2018-10-04 114.61 114.76 111.63 112.79 34821700 112.79
2018-10-05 112.63 113.17 110.64 112.13 29064300 112.13
如果我们使用 "last",我们会在我的列表中获得最新的可用数据量
last(MSFT$MSFT.Volume)
MSFT.Volume
2018-10-05 29064300
现在,我想创建一个函数来获取我的列表 (all_stocks) 中所有代码的最后可用 "Volume" 数据,并将其导出到 .csv 文件中。
所需的输出是一个 .csv 文件,其中包含代码名称和最后的交易量数据。
MSFT,29064300
stock1,volume1
stock2,volume2
有什么方法可以帮助吗?
非常感谢。
创建了一个函数来获取每只股票的最后成交量。然后你可以使用 lapply 来获取数据,但我用 rbind 将它包装在 Reduce
中,以便在 data.frame 中很好地获取所有内容以准备写入 csv。
stock_last_volume <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
volume <- last(quantmod::Vo(x))
colnames(volume) <- "volume"
my_df <- data.frame(stock = stock_name, volume = volume, stringsAsFactors = FALSE, row.names = NULL)
return(my_df)
}
all_volumes <- Reduce(rbind, lapply(all_stocks, stock_last_volume))
all_volumes[1:2, ]
stock volume
1 MSFT 29064300
2 GOOG 1184300
# write.csv to working directory
write.csv(all_volumes, file = "all_volumes.csv")
假设最后的注释中给出了设置,sapply
通过代码名称将卷提取到命名向量中 vols
。然后将其重新加工成数据框 DF
。如果指定了 file
,则将其写出。最后 return 数据框。
我们展示了几种不同的使用方法。
# create data frame of last volumes and optionally log to .csv
lastVols <- function(Names, file, envir = .GlobalEnv) {
vols <- sapply(Names, function(nm) Vo(last(get(nm, envir))))
DF <- data.frame(stock = names(vols), volume = unname(vols), stringsAsFactors = FALSE)
if (!missing(file)) write.csv(DF, file, row.names = FALSE, quote = FALSE)
DF
}
给予:
# return volumes and display on stdout()
volsDF <- lastVols(Tickers, stdout())
## stock,volume
## MSFT,29064300
## TSLA,17913000
# returns volumes and log to csv file
volsDF <- lastVols(Tickers, "myfile.csv")
# return volumes; don't log
lastVols(Tickers)
## stock volume
## 1 MSFT 29064300
## 2 TSLA 17913000
备注
library(quantmod)
Tickers <- c("MSFT", "TSLA")
getSymbols(Tickers)
quantmod 附加包 qmao
(https://github.com/gsee/qmao) 有一个函数 PF
(或 makePriceFrame
,这是相同函数的较长名称)将在一行中为您提供最后一天或您感兴趣的任何一天的音量(参数 prefer
让您 select 您感兴趣的列):
library(qmao)
getSymbols(c('AAPL','AMZN','MSFT’))
tail(PF(c('AAPL','AMZN','MSFT'),prefer = 'Volume',silent = TRUE),1)
AAPL AMZN MSFT
2018-10-08 28793100 7358200 29633400