business calendar ——您值得拥有(一)

2016-11-04 谢慧蓉 爬虫俱乐部 爬虫俱乐部

诸 君安。当我们在处理股票交易数据时,经常会遇到这样的情况,由于存在周末和假期这些非交易日,所以股票交易数据会出现间隔。对于存在间隔的股票交易数据, 如果我们使用正常的日期时间格式可能会导致错误的分析。在这种情况下,我们不应该将股票交易数据中的间隔看做缺失值,而是应该调整我们的计算方式,一个很 方便的方法就是使用business calendar.今天小编就带大家了解business calendar。

我们可以通过cntrade 命令调用浦发银行的历史市场报价(关于cntrade的具体使用,请参看往期推文天路——chinafin与cntrade命令,有小惊喜哦),具体命令如下:

cntrade 600000


为了观察的方便我们仅保留stkcd、volume、date,命令为:

keep stkcd volume date          

     

同时,为了便于观察和后续处理,我们还通过gen函数按照date生成mydate和mydate1,我们将mydate的数据显示格式变成%td格式,mydate1则直接以stata 数值型日期的形式保存。

gen mydate = date

format %td mydate

gen mydate1 = date

list date mydate mydate1


以上操作结果如图:



接下来我们需要对mydate使用tsset命令并且显示volume变量及其滞后一期的数据,具体命令如下:

tsset mydate

list date mydate mydate1 volume L.volume




可以发现L.volume的第一个观察值缺失这是因为在volume中没有观察值要先于第一个观察值,但是L.volume第4个,第9个等等也出现缺失值,我们可以用dow函数,这个函数可以计算出Stata 数值型日期所处的星期数,具体命令如下:

di dow(14560)

di dow(14563)

di dow(14567)

di dow(14570)




可以发现之所以出现缺失值是因为stata在遇到周末非交易日时将其作为缺失值而并不是忽略他。


为了避免股票交易数据中出现间隔所带来的问题,我们可以创建business calendar。business calendar需指明哪些日期被忽略。


我们可以通过创建.stbcal文件来定义business calendar,每一个stbcal-file要求指明以下四个内容:

1.所使用的stata的版本

2.calendar的范围

3.calendar的中心日期

4.被忽略的数据


我们创造一个stbcal-file,忽略每个月的周六和周日,编写do文件如下:

version 13.1

dateformat dmy

range 10nov1999 28oct2016

centerdate 10nov1999

omit dayofweek (Sa Su)


第 一行指明使用的stata为13.1版,第二行为可选项指明了显示数据的格式,第三行指明了数据范围,第四行指明了数据中心,这里的中心并不意味着要选择 事实上的样本中心,可以选择在范围中的任何一个数据,在这里选择了样本的第一个数据,第五行指明了我们忽略每个月的周末。


将do-file保存为stkcd.stbcal,接下来我们就可以将regular date转化为business date,首先要将calendar导入stata中,命令如下:

bcal load stkcd




在这里要隆重介绍一个函数bofd( ),用他可以创造business date,bofd( )函数的使用方法如下:



我们需要在bofd函数中指明business calendar的名称和包含有regular date变量的名称,之后我们可以用assert命令来检验是否所有在mydate中的数据都出现在了business calendar中,以上操作具体命令如下:

generate bcaldate = bofd("stkcd",mydate)

assert !missing(bcaldate) if !missing(mydate)

list date mydate mydate1 bcaldate 



我们也可以利用bofd函数返回范围内的日期,查看mydate中没有出现的周末日期的结果是否为缺失值。

可以编辑do-file:

forvalues i = 14558/14600{

    di `"`i':`=bofd("stkcd",`i')'"'

    }

 

运行结果如下:


可以发现周末的显示值都表现为缺失值。


Business date有一个特定的显示格式,%tbcalname,在本例中为%tbstkcd,我们可以将bcaldate转化为该显示格式,并显示出来,具体命令如下:

format %tbstkcd bcaldate

list in 1/5




尽管mydate和bcaldate看起来是一样的,但是在编码上却是不同的,现在我们对bcaldate使用tsset命令,并且显示bcaldate volume L.volume,具体命令如下:

tsset bcaldate

list bcaldate volume L.volume



可以发现,由于我们的business calendar已经将周末排除了,当在计算L.volume时,bcaldate自动跳过了周末。



今天的分享到这儿就结束了,但是business calendar内容还远远没有结束哦,欲知后事如何,请听下回分解,business calendar(二)与你不见不散哦!

另外,祝大家周末愉快~

编辑by强宇曦


往期推文推荐:

1.天路——chinafin与cntrade命令

2.分时数据,从此唾手可得

3.有了这个命令,以后还怕重复?

4.esttab功能挖掘:“Yes”or“No”

5.用“套路”处理数据

6.厉害了,我stata哥

7.图之多,stata放得下

8.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度

9.据说这样数据替换比较快,你试一下,然后……

10.众里寻她千百度,synth命令来帮助!

11.登登等登 凳登等灯——均值t检验ttable2命令

12.I have a Stata, I have a python



此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


长按二维码关注你懂哟~

微信扫一扫
关注该公众号