朝花夕拾——cnstock与cntrade强强联合
本文作者:李钊颖
文字编辑:李钊颖
技术总编:李朋冲
爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次培训采用Stata16进行讲解,采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~
详细培训大纲及报名方式,请点击文末阅读原文呦~
在公司金融和财务会计的实证研究中,我们往往都要使用上市公司的数据。为了方便大家下载这些数据,爬虫俱乐部发布了一系列Stata命令,通过爬虫技术,从网络抓取我们需要的上市公司数据。例如:cntrade命令能够为我们下载个股交易数据和指数数据;cnar能够帮我们下载上市公司财务数据;cnintraday命令能够下载上市公司分时交易数据。cnstock命令能够下载最新中国沪深两市上市公司的公司名称以及股票代码,然后通过与cntrade、cnar以及cnintraday三个命令的结合,可以批量下载上市公司的相关数据。
在这篇文章中,我们为大家讲解如何使用cnstock命令和cntrade命令,批量获得中国股票市场中的个股历史交易数据以及指数数据。
一.cnstock命令
1.命令简介
cnstock命令能够下载最新中国沪深两市上市公司的公司简称以及股票代码。大家使用这个命令之前,首先要进行安装或者更新,命令为:
ssc install cnstock, replace
cnstock命令的语法为结构为:cnstock exchange,[options]。
cnstock命令之后加证券交易市场(exchange)的缩写,就能够得到该交易市场的上市公司的公司名称以及股票代码,证券交易市场缩写含义如下:
SHA:上海A股市场(ShanghaiA-share)
SZM:深圳主板市场(Shenzhen Stock Exchange)
SZSM:深圳中小板市场(Small and Medium-sizedEnterprises of Shenzhen)
SZGE:深圳创业板市场(Growth Enterprise Market of Shenzhen)
SHB:上海B股市场(ShanghaiB-share)
SZB:深圳B股市场(ShenzhenB-share)
我们也可以使用“cnstock all”下载当前所有上市公司的简称与股票代码。cnstock命令只有唯一的选项path(),这个选项定义保存数据的路径,在默认情况下保存到当前工作路径。
2.例子说明
(1)下载上海A股市场(SHA)的上市公司简称及股票代码,命令如下:
clear
cap mkdir E:\cnstock
cd E:\cnstock
cnstock SHA
list in 1/5
(2)下载多个交易市场的股票代码,可以在cnstock命令之后跟上相应交易市场的缩写,例如:
cnstock SZM SZSM SZGE
这样,我们就下载到了深圳主板、中小板和创业板市场的上市公司名称(stknm)及股票代码(stkcd)。这个文件在我们的默认路径下面保存成名为cnstock的dta文件。
(3)当我们希望获得当前所有上市公司名称与股票代码时,不需要在cnstock命令后跟上所有市场的缩写,在命令后直接加all即可获得:
cnstock all,path(E:\cnstock)
这样,当前所有上市公司的股票代码都保存在了path()选项中定义的路径下。
二.cntrade命令
1.命令简介
cntrade命令能够帮我们获取中国股票市场中的个股历史交易数据或者指数数据。在使用这个命令之前,同样需要进行安装或者更新。
cntrade命令的语法结构:cntrade codelist , [options]。
codelist指的是股票代码或指数代码,中国沪深两市股票代码都以6位数的方式来命名。当我们希望批量下载多个上市公司的历史市场报价数据时,可以直接在命令后加上多个股票代码,并用空格隔开。如果我们输入的股票代码不足6位数时,该命令会自动在股票代码前添加“0”,补齐至6位数后输出文件。对于每一个有效的股票代码,所有的交易信息都会以“股票代码.dta”形式(如:000002.dta)保存在默认或path()选项指定路径下。
2.选项(options)介绍
(1)path():指定下载数据的存储路径,默认保存到当前工作路径。
(2)stock:指定我们输入的代码为股票代码,在默认情况下也会被识别成股票代码。
(3)index:指定我们输入的代码为指数代码。
3.例子说明
我们用简单的例子来演示cntrade命令的用法。在默认情况下,cntrade命令下载的是中国股票市场中的个股历史交易数据,当我们希望批量下载多个上市公司的数据时,可以直接在命令后边加上这些公司的股票代码,并用空格隔开。
clear
cap mkdir E:\cntrade
cd E:\cntrade
cntrade 1 2 600900
可以看到,股票代码为000001、000002、600900的上市公司的历史交易数据都以dta格式保存在了当前的工作路径下面。
cntrade命令还可以获取股价指数历史数据,在cntrade命令中加入了index选项,输入的代码就会被识别为指数代码,我们即可获得该指数的相关数据,比如获取上证指数的历史数据:
cntrade 1, index path(E:\cntrade\股价指数)
通过指定index选项,我们获取了上证综指的历史数据,并且可以看到在path()选项中指定的路径不存在时,该命令可自动创建该文件夹。
如果我们想要获取上证综指、沪深300指数、深证成指的历史数据,我们可以输入三个指数的代码,并用空格隔开:
cntrade 1 300 399001, index path(E:\cntrade\股价指数)
在指定的“E:\cntrade\股价指数”文件夹下,就有了我们需要的三个指数的历史数据。
三.cnstock命令与cntrade命令强强联合
如果我们希望批量下载上市公司的数据,那么我们就需要将cntrade命令后跟上所有上市公司的股票代码,一个一个股票代码去输入显然不现实。如果我们有一个股票代码列表,就可以通过循环批量获取上市公司的数据了。股票代码可以通过cnstock命令获得,之后我们就可以使用cntrade命令批量下载上市公司历史交易数据。我们以深圳主板市场最新上市公司的股票交易数据为例:
第一步:使用cnstock命令下载深圳主板市场的上市公司简称与股票代码。
clear
cnstock SZM,path(E:\cntrade1)
可以看到在指定路径下我们已经下载到了深圳主板市场的上市公司股票代码文件。
第二步:这里我们选取十个上市公司下载其交易数据。使用levelsof命令将stkcd变量下面的股票代码放到局部宏里面,通过foreach循环和cntrade命令批量下载上市公司历史交易数据。
keep in 1/10
levelsof stkcd, local(stkcd)
foreach stk in `stkcd' {
cntrade `stk'
}
第三步:对上市公司股票数据进行合并,并保存至当前工作路径下。
erase cnstock.dta
clear
local files : dir "." files "*.dta"
foreach file in `files' {
append using `file'
}
save cntrade.dta, replace
edit
这样通过cnstock命令与cntrade命令的强强联合,我们就能够获得深圳主板市场的各个公司的历史交易数据。
如果想要下载所有上市公司的历史交易数据,只需使用“cnstock all”抓取当前所有公司的股票代码,之后对股票代码做一个循环就能获得所需要的数据啦!另外使用cnstock与cnar搭配,即可批量下载上市公司财务数据;使用cnstock与cnintraday搭配,能够批量下载上市公司日分时交易数据。感兴趣的小伙伴赶快试试吧!
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。