我在R中使用Quandl API下载NSE India中列出的历史股票市场数据。 下面的代码为我提供了ICICI和PNB的历史数据,但需要每个库存的手动输入才能获取数据。我们如何下载NSE中列出的所有股票的历史数据,而无需为每只股票编写这些手册。
library(Quandl)
Quandl.api_key("API_Key")
## Download the data Set
ICICI = Quandl("NSE/ICICIBANK",collapse="daily",start_date="2018-01-01",type="raw")
PNB= Quandl("NSE/PNB",collapse="daily",start_date="2018-01-01",type="raw")
## Add another ("Stock") coloumn in Datasets using cbind command
ICICI<-cbind(ICICI,Stock="")
PNB<-cbind(PNB,Stock="")
## Paste the stock name in stock column
ICICI$Stock<-paste(ICICI$Stock,"ICICI",sep="")
PNB$Stock<-paste(PNB$Stock,"PNB",sep="")
## Consolidate under one dataset
Master_Data<-rbind(ICICI,PNB)
我有一个excel文件中所有股票名称的列表,如下所示。
NSE/20MICRONS
NSE/3IINFOTECH
NSE/3MINDIA
NSE/A2ZMES
NSE/AANJANEYA
NSE/AARTIDRUGS
NSE/AARTIIND
NSE/AARVEEDEN
NSE/ABAN
NSE/ABB
NSE/ABBOTINDIA
NSE/ABCIL
NSE/ABGSHIP
任何帮助都会非常感激。
此致 阿卡什
答案 0 :(得分:1)
这对我有用,我希望它也适合你。
我已经测试过了。
列出您想要数据的所有公司的列表(代码中的lyst)项目,如下所示。然后使用lapply
将所有内容保存在新列表中,例如代码中的lyst_dwnld
。
如果您想避免手动输入所有名称作为列表,那么您可以将Excel名称表保存为数据框,然后使用与下面相同的概念。
<强>代码:强>
lyst <- list(icici = "NSE/ICICIBANK", pnb = "NSE/PNB")
lyst_dwnld <- lapply(names(lyst),
function(x)Quandl(lyst[[x]],
collapse="daily",
start_date="2018-01-01",type="raw"))
<强>输出强>:
您可以通过快速查看头部来检查数据是否已下载。
> lapply(lyst_dwnld, head,2)
[[1]]
Date Open High Low Last Close Total Trade Quantity Turnover (Lacs)
1 2018-05-25 298.4 300.95 294.6 296.20 295.65 13541580 40235.19
2 2018-05-24 293.7 299.00 291.2 298.15 297.70 11489424 33952.28
[[2]]
Date Open High Low Last Close Total Trade Quantity Turnover (Lacs)
1 2018-05-25 81.95 84.55 81.30 83.60 83.35 19102160 15875.32
2 2018-05-24 80.70 82.50 80.05 82.35 82.10 19933989 16229.67
<强>编辑:强>
在您无法使用数据框创建列表时,您可以执行以下操作。
1)使用(readxl
)将Excel中的数据读取到R数据帧。
2)我已经阅读了一个样本数据并称之为df。
df <- readxl::read_excel('path_where_excel_resides_with_name_of_excel_and_extension')
3)为列命名,这是有意义的。我刚才在这个单列excel中使用了“name”。
names(df) <- "name"
4)使用strsplit分割列(保留原始列),fetech只显示其中的第二个名称。
df$co_name <- lapply(strsplit(df$name, "/"),`[[`,2)
现在您可以创建在早期代码中使用的lyst对象。
lyst <- as.list(df$name)
names(lyst) <- df$co_name
如果您无法解决此问题或出现任何问题,请告知我们。感谢
答案 1 :(得分:0)
数据只能通过 Quandl 获得,直到2018年。
您可以使用R中的 BatchGetSymbols 库下载更多数据。我从Yahoo Finance下载时发现的一个问题是,有时一年中有几个月缺少数据。建议在进行任何分析并检查数据一致性之前谨慎使用。
以下代码供参考:
if (!require(BatchGetSymbols)) install.packages('BatchGetSymbols')
#Package to download yahoo finance stock prices from internet directly
library(BatchGetSymbols)
first.date <- Sys.Date() - (365*5) #5 years back
last.date <- Sys.Date()
freq.data <- 'monthly' #change it as you like. example:'daily'
tickers <- c('RELIANCE.NS','TCS.NS')
# Reliance, Tcs
l.out <- BatchGetSymbols(tickers = tickers,
first.date = first.date,
last.date = last.date,
freq.data = freq.data,
cache.folder = file.path(your_directory_path,"stock_prices"))
str(l.out)
# To check download status of all stocks
l.out$df.control
# Actual Stock prices downloaded
head(l.out$df.tickers)
我在浏览网页时发现了此链接,但在了解之后仍未实现。希望这可以进一步帮助您。