首页 > 解决方案 > 将股票列表的最后一个可用值导出到 .csv 的功能

问题描述

我正在尝试将来自 Quantmod 的一些数据导出到 .csv。

我想导出到 .csv 的是 Ticker 的名称和我的列表中关于卷 (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 的“尾巴”

            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

现在,我想创建一个函数来获取导出到 .csv 文件中的列表 (all_stocks) 中所有代码的最后可用“交易量”数据。

所需的输出是一个带有 Ticker 名称和最后一个 Volume 数据的 .csv 文件。

MSFT,29064300
stock1,volume1
stock2,volume2

有关如何处理的任何帮助?

非常感谢。

标签: rfunctionquantmod

解决方案


创建了一个函数来获取每只股票的最后成交量。然后你可以使用 lapply 来获取数据,但我Reduce用 rbind 将它包装起来,以便将所有内容都很好地放在 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")

推荐阅读