我们可以使用R中的Quandl下载NSE中列出的所有股票的历史数据吗?

时间:2018-05-27 07:05:24

标签: r quandl

我在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

任何帮助都会非常感激。

此致 阿卡什

2 个答案:

答案 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)

替代方法

我在浏览网页时发现了此链接,但在了解之后仍未实现。希望这可以进一步帮助您。

https://www.r-bloggers.com/extracting-eod-data-from-nse/