使用R语言从网易财经批量获取股票数据并进行整合的方法

最近因为投资分析需要接触R语言,需要获取A股上市公司数据。从同花顺下载效率太低,就到处找途径。分享下方法,共其他小白参考,请大神指正。

R语言自带的quantmod数据不错,不过国内A股数据不全,而且时常出错,而且由于谷歌已经终止了提供财务数据,更影响了使用,因此只能作为不错。当然,雅虎财经最近也上线了财务数据板块,不过个人还不懂得爬虫抓取,还等大神分享方法。

网上也有一些讲解从新浪财经抓取数据的方法,不过个人觉得还是从网易财经抓取股票数据和财务数据最简单,虽然可能相比其他方法效率也不快,而且网易财经的股价都是除权的。

结合看的两本书,写了个源文件,从网易财经下载财务数据或股票成交数据到指定文件夹,再批量整合,或者读取指定股票,方法如下:

#脚本名称:RStock.R

#从网易财经抓取公司财务数据(主要指标,其他部分可参考,简单修改url),20191208
#参考《量化投资基础、方法与策略:R语言实战指南》,付志刚,沈慧娟
getStockFin <- function(data,...){
for(i in 1:length(data)){
symbol <- data[i]
url <-paste0("http://quotes.money.163.com/service/zycwzb_",as.character(symbol),".html?type=year")
savefile <- paste0("E://Data_Analysis//StockFinancial//",as.character(symbol),".csv")
download.file(url,destfile=savefile,mode="wb",quiet=T)
}
}

#从网易财经抓取股票交易数据,20191208
#参考《量化投资基础、方法与策略:R语言实战指南》,付志刚,沈慧娟
getStockData <- function(data,star_d,end_d,...){

for(i in 1:length(data)){
symbol <- data[i]
if(substr(symbol,1,1)=="6") Fcode=0 else Fcode =1
url <-paste0("http://quotes.money.163.com/service/chddata.html?code=",Fcode,as.character(symbol),"&start=",star_d,"&end=",end_d,"&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP")
savefile <- paste0("E://Data_Analysis//getStock//",as.character(symbol),".csv")
download.file(url,destfile=savefile,mode="wb",quiet=T)
}
}

#提取股票数据,并根据所在列合并,20191208
#参考网络
mergeStockData <- function(idx,...){

files = list.files("E:/Data_Analysis/getStock")
dir <- paste0("E://Data_Analysis//getStock//",files,sep="")
merge.data <- read.csv(file=dir[1],header=T,sep=",",na.strings="None")
merge.data <- na.omit(merge.data)
names(merge.data)[idx]=substr(files[1],1,6)
merge.data <- merge.data[,c(1,idx)]

for(i in 2:length(dir)){
new.data <- read.csv(file = dir[i],header=T,sep=",",na.strings="None")
new.data <- na.omit(new.data)
new.data <- new.data[,c(1,idx)]
names(new.data)[2]= substr(files[i],1,6)
merge.data <- merge(merge.data,new.data,all=TRUE)  #all=TRUE获取全部数据,缺省补充为“NA”
}

dat <- merge.data
dat[,1] <-as.Date(dat[,1])
for(i in 1:length(dir)+1) names(dat)[i] <- paste0("A",names(dat)[i])
names(dat)[1] <- "Date"
return (dat)
}


#提取单一公司股票数据,20191209
#参考《数字科学R语言实践:面向计算推理和问题求解的案例研究法》,Deborah Nolan ,Duncan Temple Lang
readStock <- function(Code,dateFormat = c("%Y-%m-%d","%Y/%m%d"),...){
fileName <- paste0("E://Data_Analysis//getStock//",Code,".csv")
data <- read.csv(fileName,header=TRUE,stringsAsFactors=FALSE,sep=",",na.strings="None")

for(fmt in dateFormat){
 tmp =as.Date(data[,1],fmt)
 if(all(!is.na(tmp))){
   data[,1] =tmp
   break
  }
}
 data[order(data[,1]),]
 names(data) <- c("Date","Code","Name","Close","High","Low","Open","exClose","Change","Change_ret","Turnover","Volume","Money_Amount","totalMV","tradedMV")
 data<-data[,c(-2,-3)]
 data <-na.omit(data)
}
}


使用示例

1.从网易财经获取股票数据和财务数

codes <- read.table(“KCB List.txt”,header=T,sep=’\t’) #读取代码清单
head(codes)
Code 1 688218 2 688039 3 688357 4 688001 5 688118 6 688058
source(“RStock.R”) #导入脚本
list <-codes[,1]
getStockData(list,20190701,20191211) #读取财务数据 使用R语言从网易财经批量获取股票数据并进行整合的方法_第1张图片使用R语言从网易财经批量获取股票数据并进行整合的方法_第2张图片
getStockFin(list) #获取财务指标数据,其他数据可修改源文件url 使用R语言从网易财经批量获取股票数据并进行整合的方法_第3张图片使用R语言从网易财经批量获取股票数据并进行整合的方法_第4张图片

合并文件,获取全部股票收盘价数据

dat <- mergeStockData(4)
dim(dat)
[1] 97 71
dat[1:5,1:10]
Date A688001 A688002 A688003 A688005 A688006 A688007 A688008
1 2019-07-22 55.50 50.20 47.4 49.53 54.62 38.84 74.92
2 2019-07-23 48.73 43.89 40.5 41.70 47.11 34.55 74.13
3 2019-07-24 51.52 46.72 43.9 44.36 50.43 40.16 75.88
4 2019-07-25 54.71 49.07 50.5 48.92 54.10 42.23 78.00
5 2019-07-26 50.66 45.23 45.7 44.69 51.39 40.16 71.68
A688009 A688010
1 12.27 48.67
2 10.01 54.50
3 10.20 81.40
4 10.61 78.90
5 10.01 67.50

获取指定股票数据:

HXYC <- readStock(“688001”)
head(HXYC)
Date Close High Low Open exClose Change Change_ret Turnover
1 2019-12-11 49.70 54.70 47.60 49.00 47.30 2.40 5.0740 43.6106
2 2019-12-10 47.30 47.30 39.00 40.33 39.42 7.88 19.9899 30.7881
3 2019-12-09 39.42 39.42 36.06 37.00 32.85 6.57 20.0000 22.4033
4 2019-12-06 32.85 33.79 32.20 32.35 32.45 0.40 1.2327 5.7919
5 2019-12-05 32.45 32.48 31.52 31.78 31.82 0.63 1.9799 4.1147
6 2019-12-04 31.82 32.19 30.80 31.00 31.20 0.62 1.9872 3.3624
Volume Money_Amount totalMV tradedMV
1 15808656 799543552 19929700000 1801604126
2 11160540 482711021 18967300000 1714605134
3 8121107 310063112 15807420000 1428958444
4 2099527 69490610 13172850000 1190798703
5 1491578 47869950 13012450000 1176298871
6 1218862 38671711 12759820000 1153461636

使用R语言从网易财经批量获取股票数据并进行整合的方法_第5张图片
Sping,20191211

你可能感兴趣的:(量化投资,R语言,量化投资,A股数据,网易财经)