本文作者:李金洋
文字编辑:李朋冲
技术总编:刘洪儒
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难!
买卖价差(Bid-Ask Spread)是衡量市场流动性的重要指标。在二级证券市场中,证券的买卖报价总是存在,只有当买价与卖价一致时,证券才能实现交割。因此,证券买卖价差越小,则立即执行交易的成本越小,证券交割速度越快,市场的流动性也就越好。由于不同证券的价格水平差异很大,为了使得不同证券的流动性可比,参照Fang et al.(2014)的研究,我们引入了“相对有效买卖价差”的概念。为了避免概念混淆以及文字表述不清,我们以公式的方式列出了相关概念:
其中,Pa为最优卖价(卖1价),Pb为最优买价(买1价),M为最优卖价和最优买价的中间值。
流动性指标PESPR的计算采用先日内平均再年度平均的方式:即首先计算每个交易日内每笔交易的PESPR按时间加权的平均值,以此作为该股票每个交易日的PESPR,再将日度PESPR累加后按一年中的总交易天数求出平均值,即为该股票这一年的PESPR,其计算公式为:
其中,i代表股票,t代表年份,d代表交易日,n代表每笔交易;Di 为在第t年内股票i的总交易天数;Ni,d为股票i在交易日d的总交易笔数;P代表成交价格;M代表最优卖价和最优买价的中间值;w表示权重,在日内平均时,采用两笔相邻交易的时间间隔为权重。
根据公式(6)可知,这一指标基于逐笔高频数据计算得到,与其它用低频数据计算得到的流动性指标相比,能够更准确、更直观地反映股票流动性。PESPR衡量证券的非流动性,其数值越大则流动性越差。为了更直观地度量流动性,我们对PESPR取负对数值,见公式(7):
本文演示所用数据和程序已上传至网盘,请各位读者自行下载:
https://pan.baidu.com/s/1b5mkEVl6z7PZKp8t3TMFiA
本文使用了来自锐思高频数据库——沪深Level1的分笔高频数据,以深振业A(000006)2011年的逐笔交易数据为样本。我们需要用到的变量及其说明见表1:
表1 相关变量及其说明
首先,我们构造一个路径,然后把下载下来的“stk2011_000006.dta”文件放到该路径之下(上传的程序中的路径,大家依个人习惯作相应更改)。删除缺失值后,共得到512768笔交易数据。
clear
cap mkdir D:/股票流动性
cd D:\股票流动性
use stk2011_000006.dta, clear
drop if tprice==. | bidpr1==. | askpr1==.
drop if tprice==0 | bidpr1==0 | askpr1==0
di _N

根据样本数据的特点以及公式(6),需要进一步计算得到的指标如下:
① 每笔交易最优卖价和最优卖价的中间值(mprice):即五档卖价的最低价和五档买价的最高价的中间值。
gen mprice = (bidpr1+askpr1)/2
② 每两笔相邻交易的时间间隔(weight):精确到秒。
数据中的交易时间指标bargaintime为字符串类型,例如字符串”145131”代表时间:14时51分31秒,可使用clock()函数将其转换成时间型数据。
gen time = clock(bargaintime,"hms")
format time %tcHH:MM:SS //转换成hour:miniue:second格式
sort qdate time
by qdate: gen weight = (time - time[_n-1] )/1000
replace weight = 0 if weight==. //由于交易权重为与前一笔交易的时间之差,因此每天的第一笔交易权重为缺失值,替换为0
*整理好所需指标后,我们的数据结构如下图所示:
br code qdate time tprice mprice weight bidpr1 askpr1

接下来进行公式的计算:
① 计算每笔交易的相对有效价差
gen everyres = abs(tprice-mprice)/mprice*weight //每笔交易的相对有效价差
replace everyres = . if tprice == 0 //当成交价为0时,说明当日股票没有交易
② 进行日内指标加总
by qdate: gen dailyres = sum(everyres) //日内累计加总
by qdate: keep if _n == _N //每日的最后一条交易数据记录当日的PESPR
③ 进行年度加总平均

scalar days = _N //_N为当年总交易天数
gen pespr = sum(dailyres)/days //年度累计加总平均
keep in -1 //最后一条交易数据记录年度PESPR
gen LIQ = -log(pespr) //对PESPR取负对数值
save PESPR, replace
最终我们计算得到深振业A(000006)2011年的流动性指标:
PESPR=19.68,LIQ=-2.98。
参考文献
① 梁丽珍,孔东民.中国股市的流动性指标定价研究[J].管理科学,2008(03):85-93.
② Vivian W. Fang; Xuan Tian; Sheri Tice. Does Stock Liquidity Enhance or Impede Firm Innovation?. The Journal of Finance.2014
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐:
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


