r - 将股票列表的最后一个可用值导出到 .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
有关如何处理的任何帮助?
非常感谢。
解决方案
创建了一个函数来获取每只股票的最后成交量。然后你可以使用 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")
推荐阅读
- python - 在 Docker 中设置 $HOME 路径
- c# - 点击链接在剧作家中不起作用
- java - 如何在 JUnit 中测试最高值
- excel - INDEX MATCH MAX 公式
- javascript - 在本地存储中存储字符串
- go - golang 中是否有任何用于 ElasticSearch 的布尔查询解析器?
- c# - 如何在 C# 中解析复杂的 JSON?最终我想在 DataGridView 中显示结果
- reporting-services - 在报表生成器中所做的更改不会反映在 VS SSRS 项目文件 .rdl 中
- qt - QPixmap 无法使用资源加载
- postgresql - How to reconnect to same postgres database on Docker