本文介绍一种免费的快速获取金融市场数据的量化方法,适用于广大投资者,整个流程需要一台上网的电脑,有Excel软件。不过需要中上等的电脑操作水平,如果平时写个Word文章制作个Excel列表都不熟练的话,那这个方法还是有些难度的。
首先,需要上网下载叫R跟Rstudio的两款软件,它们都是免费的,可以自行百度搜索下载。R是一款基于R语言的编程软件,Rstudio是辅助R做输入输出的平台,本文里的所有操作都在Rstudio上,新手可以上网了解一下,网上有很多的入门介绍讲解,可以先看看。
总的来说,这个导入金融数据的操作并不是很难,平均需要几行代码就好了。可以把整个流程概括成,打开Rstudio软件,上面敲几行字母进去,一个Excel文件生成,里面包含你想要的金融数据。
0 1股票市场获取上证指数数据:
先展示需要操作的代码,
← 轻触图片左右滑动浏览全图 →
install.packages("quantmod")
library(quantmod)
SZ "000001.SS",from = "2018-01-01",
to = "2019-03-01",auto.assign = FALSE,src = "yahoo")
install.packages("xlsx")
library(xlsx)
write.xlsx(SZ,"C:/Users/mh232/Desktop/data.xlsx")
在敲进去以上代码后,发现桌面新出现一个名为“data.xlsx”的Excel文件,打开它发现里面是想要的上证指数价格数据,截选如图:
对新手看起来会比较复杂,可能完全不知道代码中各个字母的意思,里面也有很多英文单词,对英文好的人来说会有优势,接下来详解各个步骤:
1. install.packages( )是一个方程,专门下载程序包的,首次操作需要下载程序包叫quantmod,要用它下载金融数据。等下载完成后,以后就不用输入此代码了。
2. library( )也是一个方程,刚下载的程序包需要加载,所以每次重新打开Rstudio的时候,都要输入这个来加载特定程序包,做金融数据导入时要加载quantmod程序包。
3. 接下来第三行代码有些复杂,主要思路是输入一个包含很多参数的方程getSymbols( ),这个方程做完后把数据转到一个命名为SZ缩写上证的变量里,SZ是随便起的名字,也可以是abc(但是输入数字123要加双引号),这无所谓。
-- 轮到getSymbols( )方程里的参数:
Symbols = “000001.SS”是雅虎财经里上证指数的代码,
from = “2018-01-01”是导入数据从2018年1月1号开始,
to = “2019-03-01”是到2019年3月1号结束,
auto.assign = FALSE这个意思是不用电脑来自己命名变量,因为SZ是要想命名的变量名称,
src = “yahoo”是数据源来自雅虎财经,之后介绍的其他财经数据来自不同网站,所以这块也会有变化。
4. install.packages("xlsx")也是一样,安装叫xlsx的程序包,这个程序包是专门做数据从Rstudio到Excel导出的。
5. library(xlsx)加载xlsx程序包。
6. write.xlsx( )导出数据到Excel的方程,里面的参数:
SZ是要导出的数据变量名,
"C:/Users/mh232/Desktop/data.xlsx"是导入的Excel放在哪个文件目录下,此目录是我导入到我电脑桌面下,方便查看。最后data.xlsx是自己命名data的Excel文件名称,这个可以自己随便起。
7. 之后打开桌面上的叫data的Excel文件,看到一共七列,第一列日期,第二列开盘价,第三列当天最高价,第四列当天最低价,第五列收盘价,第六列成交量(注意数据是千位值成交手数,不是成交金额),最后一列调整收盘价。之后查看数据是否准确,检查无误后就可以在Excel上操作数据了。
有几点需要注意的是,
1. Rstudio平台输入时,要换成英文输入法。
2. getSymbols和Symbols里的S要大写。
3. “000001.SS”的后缀SS要大写。
4. 注意输入日期格式顺序是年月日,双引号包含。
5. 还有很多地方要加双引号,没有双引号可能出不来结果。
总之,很多细节需要注意,一上来也要一段时间操作练习,等之后熟练后,理解了其中的格式,就可以将以上的代码换成简化形式,这样输入的字母更少,简化后如下:
library(quantmod)
SZ "000001.SS",from = "2018-01-01",
auto.assign = FALSE)
library(xlsx)
write.xlsx(SZ,"C:/Users/mh232/Desktop/data.xlsx")
可以看到,代码去掉了很多,
1. install.packages( )删掉因为已经下载了程序包,不用下载了
2. 删掉Symbols =:程序默认第一个参数就是雅虎财经里的代码
3. 删掉to =:直接导入日期到最新
4. 删掉src =:因为程序默认从雅虎财经里抓取数据
此简单代码导出的结果跟最一开始的一样,不同在于数据到最新的日期因为取消了to =这块。综上,输入代码快的话大概七八秒,等待程序运行抓取数据大概一两秒,总体十秒左右可以完成。
获取上市公司贵州茅台数据:
股票市场里除了可以导出股指数据外,还可以导出某个上市公司的,比如以贵州茅台600519为例,操作如下(之前已加载程序包,不用再次输入library( ):
← 轻触图片左右滑动浏览全图 →
GZMT "600519.SS",from = "2018-01-01",
to = "2019-03-01",auto.assign = FALSE,
src = "yahoo")
write.xlsx(GZMT,"C:/Users/mh232/Desktop/data.xlsx")
导出到Excel的数据截选如图,检查数据后发现一个问题,2018年贵州茅台每日开盘价收盘价最高价最低价跟其他股票平台上的有一些差别,而最后一列调整收盘价比较接近,这是因为每个平台上计算基准不同(存在前后复权)导致的差异。经过检查后,整体涨跌幅是一致的,所以没有大的问题。除了贵州茅台以外,其他的所有上市公司只要雅虎财经上有的,根据相应的股票代码都可以导出数据来。
这时候有人也许会问,其实有一种快捷方法,可以直接登雅虎财经网站上搜相应股票,在历史数据那栏点击下载就行了,出来的也是Excel。确实,这种办法操作起来简单易行,比用Rstudio做个中介方便多了。但是如果想要沪深300支股票的数据呢,开300个页面可就很慢了。
02外汇、期货市场获取美元兑人民币历史数据:
跟股票市场操作同理,也可以通过在雅虎财经抓取特定货币对的历史汇率数据,以美元兑人民币为例,雅虎财经上的代码为CNY=X,操作如下:
← 轻触图片左右滑动浏览全图 →
`USD/CNY` "CNY=X",from = "2018-01-01",
to = "2019-03-01",auto.assign = FALSE,
src = "yahoo")
write.xlsx(`USD/CNY`,"C:/Users/mh232/Desktop/data.er.xlsx")
需要注意的是,在输入USD/CNY时要加上``单引号,这是防止误导程序要做除法,因为有除号在里面,或者也可以自己命名其他变量。“data.er”是新建的Excel文件名,打开它,导入的部分截选如下图:
对比其他平台上的历史数据无误,但是仔细查看发现Excel第五列收盘价和最后一列调整收盘价,这两个跟开盘价接近一样。之后查看网页确实跟导出的一样,这可能是由于外汇市场全天24小时运转,网站上报的数据跟开盘价重合导致。以后做数据分析时,可以仅以开盘价为准,其他忽略即可。
获取原油期货历史数据:
同样,在雅虎财经网页查找,NYMEX纽约原油代码为CL=F,输入代码:
← 轻触图片左右滑动浏览全图 →
oil "CL=F",from = "2018-01-01",
to = "2019-03-01",auto.assign = FALSE,
src = "yahoo")
write.xlsx(oil,"C:/Users/mh232/Desktop/data.oil.xlsx")
导出到Excel发现历史数据只能追溯到半年前的,如果想要更长时间以前的,这个时候需要换网站抓取数据。quantmod程序包里另外一个主要搜索源是FRED,是美国圣路易斯联邦储备银行官方网站的缩写(Federal Reserves Bank of St. Louis),它上面包含了很多时间周期长的历史数据,还有很多重要的经济财经数据也包含其中,其中经济数据将在下部分展示。
经FRED网站查询后,WTI原油代码在它上面显示为DCOILWTICO,之后回到Rstudio上输入以下代码:
oil "DCOILWTICO",
auto.assign = FALSE,
src = "FRED")
write.xlsx(oil,"C:/Users/mh232/Desktop/data.oil.xlsx")
这次代码看起来更简单,quantmod在以FRED数据源搜索时,所有的数据都会被下载下来,所以不用输入from=,to=时间框架。另外,新产生名称为data.oil的Excel文件将替换之前雅虎财经输出的。新导出的Excel文件截选如图:
可以看到数据以日为单位。没有了每日最高价最低价等,数据最早从1986年1月2号至2019年3月4号,在此网站上的数据一般会有一周左右的延迟,所以一般最新数据会比当天时间晚一周左右。
03宏观经济获取中国GDP年度历史数据:
← 轻触图片左右滑动浏览全图 →
GDP "MKTGDPCNA646NWDB",
auto.assign = FALSE,
src = "FRED")
write.xlsx(GDP,"C:/Users/mh232/Desktop/gdp.xlsx")
上图是部分截选,总体导出的数据从1960年到现在,以年为单位,并且以美元计价,网站上显示的数据来源来自世界银行。
获取美国月度失业率:
rate "UNRATE",
auto.assign = FALSE,
src = "FRED")
write.xlsx(rate,"C:/Users/mh232/Desktop/rate.xlsx")
数据记录从1948年到现在,按月为单位,上图是导出的部分截选。
获取美国非农就业人数:
← 轻触图片左右滑动浏览全图 →
nonfarm "PAYEMS",
auto.assign = FALSE,
src = "FRED")
write.xlsx(nonfarm,"C:/Users/mh232/Desktop/nonfarm.xlsx")
导出的是非农就业总人数(千位值),上下单元格的差就是平常媒体所报道的非农就业人数变化。数据记录从1939年到2019年二月,共计963条。
文末小结总体来说,寻找数据的方法也就那几种,要么自己上网搜索,找下载链接或者复制粘贴,这也是最多人用的,此办法的优点是操作简单,不费脑,缺点就是如果要找的数据量很大,那么会很浪费时间。这时,借助编程的方法便应运而生了。其实相比R,还有一款比R更热门的编程语言Python,最近几年在量化金融领域的应用势不可挡,但为什么本文要用R呢?其一,R的代码比Python更简单;其二,R是专门用来做数据分析的,假如不导入到Excel,可以继续在R里做分析施展拳脚,这些该怎么做,就是以后文章的事了。