添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

文字编辑:张 宇

技术总编:李春涛

爬虫俱乐部是您身边的科研助手,能够为您在 数据处理、实证研究 中提供帮助。承蒙30000+粉丝的支持与厚爱,我们在腾讯课堂推出了 网络视频课程 ,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址: https://ke.qq.com/course/286526?tuin=1b60b462 ,敬请关注!

在上一篇推文中,我们为大家介绍了基于高频数据测算的PESPR指标。而另一类常用的流动性指标一般基于低频数据度量,如换手率、Amihud指标等。这类指标计算方法简单且数据易得,是学界较为常用的流动性指标之一。今天,我们要为大家介绍的是基于日度交易数据度量的Amihud指标。

Amihud指标为股票在一段时间的收益率与交易额的比值,衡量股价对交易量的敏感程度:如果股票交易量的变动会带来股价的剧烈波动(暴涨暴跌),则Amihud指标越大,股票流动性越差;反之,如果交易量的变化对股价变化的影响越小,则说明股票的流动性较好。由于Amihud是一个非流动性指标,为了更直观地体现流动性,我们对该指标取了负对数值,计算公式如下:

其中,i代表股票,t代表年份,d代表交易日;R代表股票日收益率(%);Volume代表日交易额(百万元)。

计算方法举例:

我们使用爬虫俱乐部发布的stata命令cntrade下载股票的历史交易数据,其中包括了我们所需要的股票日收益率指标(rit)和日交易额指标(transaction)。例如,使用cntrade命令下载万科A(000002)的历史交易数据,程序如下:

clear

cap mkdir D:股票流动性cap mkdir D:股票流动性Amihudcd D:股票流动性Amihudcntrade 000002use 000002, cleargen year = year(date)drop if year == 2018levelsof year //所有年份保存在返回值r(levels)中foreach y in `r(levels)' { //对年份进行循环 preserve keep if year == `y' save "000002_`y'.dta", replace //逐年保存数据(1991-2017) restore}

1. 单个股票,单个年份(以万科A(000002)2011年为例)

首先整理所需数据:

use 000002 _2011.dta, cleargen vol = transaction/ 1000000

drop if rit == . | vol == . //删除缺失值

整理好数据后,我们的数据结构如下:

br stkcd date rit vol

接下来进行Amihud指标的计算:

① 生成每日的流动性指标

gen damihud = -log(abs(rit/vol))

② 接下来,将每日流动性指标加总后平均

egen sumamihud = sum(damihud) //每日数据加总scalar trdays = _N //日度数据下,总交易天数即为观测值个数gen amihud = sum(damihud)/trdays keep in - 1 //最后一条数据代表了该股票 2011 年的Amihud指标值

list stkcd year amihud

③ 最终,我们计算出2011年万科A(000002)的Amihud指标值=10.44

2. 单只股票、多个年份(以万科A(000002),2000-2017年为例)

单只股票、多个年份的指标计算可以纵向查看单只股票流动性水平的变化,我们只需要在单只股票、单个年份指标计算的基础上,加一层关于年份的循环,并使用post命令将各个年份的指标邮寄出去即可。

① 定义邮局liq,需要邮寄的信息是股票的交易年份year和流动性指标amihud,信息保存在liq1.dta文件中。

cap postclose liqpostfile liq year amihud using liq1.dta, replace

② 对年份进行循环,逐年计算Amihud指标并进行信息邮寄。

forvalues i = 2000/2017 { use 000002_`i', clear gen vol = transaction/1000000 drop if rit==. | vol==. gen damihud = -log(abs(rit/vol)) egen sumamihud= sum(damihud) local amihud = sumamihud/_N post liq (`i') (`amihud')}postclose liq

③ 查看刚刚通过post命令保存的结果,并通过绘图的方式能更直观地查看该股票的流动性水平变化。

use liq1.dta, clearbrtwoway (bar amihud year,color( "ltblue" ) lcolor( "eltblue" )) ///

(connected amihud year,connect(l) lcolor( "forest_green" ) msize( "small" ) ///

mcolor( "green" )), legend(off) xtitle( "" ) xlabels( 2000 ( 1 ) 2017 ,angle( 45 )) ylabels( 7 ( 0.5 ) 12 )

根据上图我们发现,万科A(000002)的股票流动性总体上呈现上升趋势,从2000年-2009年股票流动性迅速上涨,而从2009-2014年流动性迅速下降,近年来才逐渐恢复,这可能与2008年的全球金融危机对股市和房地产市场的重创有关。

3.多只股票,单个年份(以5只股票,2017年为例)

实现多只股票、单个年份流动性指标的计算,我们只需要在单个股票、单个年份指标计算的基础上添加一层关于股票代码的循环即可。为了给大家进行案例演示,我们根据同花顺财经提供的信息,选取房地产行业板块下,当前每股收益排名中靠前的两只股票:华夏幸福(600340)和万科A(000002),位于中等排名的两只股票:美好置业(000667)和深振业A(000006),以及排名倒数的一只股票:*ST天业(600807),以此来横向考察公司盈利水平与其股票流动性的关系。

① 输入股票代码列表。

clearcap mkdir D:股票流动性Amihudliq2cd D:股票流动性Amihudliq2input str50 stknme stkcd "万科A" 000002

"华夏幸福" 600340

"美好置业" 000667

"深振业A" 000006

"绿景控股" 000502

② 定义邮局liq,需要邮寄的信息是股票代码stkcd和流动性指标amihud,信息保存在liq2.dta文件中。

cap postclose liqpostfile liq stkcd amihud using liq2.dta, replace

③ 对股票代码进行循环,计算出每个股票2017年的Amihud指标并进行邮寄。

levelsof stkcd, local(stk)foreach s in `stk' { cntrade `s' keep if year(date) == 2017 gen vol = transaction/1000000 drop if rit==. |vol==. gen damihud = -log(abs(rit/vol)) scalar trdays = _N gen amihud = sum(damihud)/trdays keep in -1 local a = amihud post liq (`s') (`a')

}postclose liq

④ 查看刚刚通过post命令保存的结果,并通过绘图的方式直观查看不同股票的流动性水平。

use liq2.dta,clearlabel define stk 2 "万科A" 6 "深振业A" 667 "美好置业" 600340 "华夏幸福" 600807 "*ST天业"

label value stkcd stk graph bar amihud, over(stkcd,label()) ylabel( 0 ( 2 ) 12 ) ///

ytitle( "Amihud" ) blabel(bar, format(% 4.2 f)) ///

bar( 1 ,color( "eltgreen" ) lcolor( "dkgreen" )) note( "注:2017年" )

根据上图我们发现,盈利水平较高的公司(万科A和华夏幸福),其股票的流动性水平也相对较高,即公司盈利水平与股票流动性呈正相关的关系。

4.多只股票,多个年份(以4只股票,2010-2017年为例)

实现多只股票、多个年份的计算,将年份的循环嵌套在股票代码的循环中,并使用post命令将各个指标邮寄出去即可。我们仍以之前选取的5只股票为例:

① 输入股票代码列表(与前一节操作相同,略)

② 定义邮局liq,需要邮寄的信息是股票代码stkcd、年份year和流动性指标amihud,信息保存在liq3.dta文件中

cap postclose liqpostfile liq stkcd year amihud using liq3.dta, replace

③ 循环1:下载每只股票的交易数据

levelsof stkcd, local(stk)foreach s in `stk' { cntrade `s' gen year = year(date) save `s', replace

④ 循环2:计算每只股票每年的流动性指标数据并邮寄出去

levelsof year, local(year) foreach y in `year' { use `s', clear keep if year == `y' save `s'_`y'.dta, replace gen vol = transaction/1000000 drop if rit ==. |vol ==. gen temp = -log(abs(rit/vol)) egen sum = sum(temp) local amihud = sum/_N post liq (`s') (`y') (`amihud') //邮寄信息 }}postclose liq //关闭邮局

⑤ 绘图查看刚刚通过post 命令保存的结果

use liq3.dta,clearpreserve keep if year >= 2010 & year <= 2017

twoway (connected amihud year if stkcd == 000002 , connect(l) legend(label( 1 "万科A" ))) ///

(connected amihud year if stkcd == 600340 , connect(l) legend(label( 2 "华夏幸福" ))) ///

(connected amihud year if stkcd == 000006 , connect(l) legend(label( 3 "深振业A" ))) ///

(connected amihud year if stkcd == 000667 , connect(l) legend(label( 4 "美好置业" ))) ///

(connected amihud year if stkcd == 600807 , connect(l) legend(label( 5 "*ST天业" ))), ylabel( 6 ( 1 ) 12 ) title( "Amihud指标" ) xtitle( "" ) xlabel( 2010 ( 1 ) 2017 , angle( 0 )) restore

上图进一步证实了我们之前的结论——即公司盈利水平与股票流动性呈正相关的关系,那些规模较大、盈利水平高的公司股票流动性往往更好。

① 本文所涉及的重要命令:cntrade、preserve-restore、post、levelsof以及绘图命令等,读者均可查看这些命令的help文件以及爬虫俱乐部往期推文来进一步学习。另外,cntrade为stata的外部命令,需要安装后才能使用(ssc install cntrade)。

② 本文演示所用数据和程序已上传至网盘:

https://pan.baidu.com/s/1b5mkEVl6z7PZKp8t3TMFiA

参考文献:

① Amihud, Y. Illiquidity and stock returns:Cross-section and time-series effects. Journal of Financial Markets.2002

② 张峥,李怡宗,张玉龙,刘翔.中国股市流动性间接指标的检验.经济学(季刊),2014

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

投稿要求:

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项:

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。 返回搜狐,查看更多

责任编辑: