查看原文
其他

Stata: 实时估计个股的贝塔(beta)系数

连玉君 Stata连享会 2020-02-10

作者:连玉君

Stata 现场培训报名中……
点击底部【阅读原文】查看推文中的链接并下载相关资料

连玉君-2018暑期Stata研讨班(7.23-8.2)

目的

使用 cntrade 命令下载个股和指数日资料,合并后估计 CAPM 模型,以便得到个股的贝塔(beta)系数,进而对个股的 贝塔(beta)系数 进行统计分析。

1. 下载个股交易资料

1.1 下载方法

只需输入如下命令即可下载 贵州茅台 自上市起至昨日的日交易数据,下载后的数据自动存储于当前工作路径下,名称为 “600519.dta”:

cntrade 600519

数据详情如下:

1.2 Stata 范例

. global id="600519"    //600519  贵州茅台 . cntrade $id . global nn = stknme[1]   //股票简称 *-股价时序图 . use "$id.dta", clear . tsset date  //设定为时间序列变量 . tsline clsprc ,  ///
   xlabel(,angle(60)) subtitle("$nn $id") . graph export "$out\price_$id.png", replace

输出图片为:

2. 下载指数数据

2.1 基本下载方法

只需在 cntrade 命令后附加 index 选项即可下载如下指数:

  • 000001 The Shanghai Composite Index (上证综合指数).

  • 000300 CSI 300 Index (沪深 300).

  • 399001 Shenzhen Component Index (深成指).

例如:

2.2 批量下载多个指数并做进一步处理

foreach i in "399001" "000001" "000300" {  cntrade `i', index  rename rmt retmkt_`i'  //更该指数收益名称,便于与个股合并  save index_`i'.dta, replace  erase `i'.dta }

2.3 Stata 范例:沪深 300 时序图

* 调用其中一个指数数据: . use index_000300.dta, clear // 沪深300指数 . tsset date . tsline clsprc ,  ///
   xlabel(,angle(60)) subtitle("沪深300指数")

3. 合并个股和指数数据

. use "index_399001.dta", clear . merge 1:1 date using "$id.dta", nogen . gen year = year(date) . order date year index* stk* ret* . save "merge_$id.dta", replace

4. 估计 CAPM 模型

4.1 基本模型

. use "merge_$id.dta", clear . reg rit retmkt

结果如下:

4.2 散点图和拟合情况

#delimit ; . twoway  (scatter rit retmkt if year<2008&abs(retmkt)<0.4,     xline(0,lp(dash) lc(red))   yline(0,lp(dash) lc(red)) msize(*0.2))  (lfit rit retmkt); . graph export "$out\scatter_$id.png", replace    ; #d cr

4.3 分时段估计

1998-2007

global yr = 2008 reg rit retmkt if year<$yr //&abs(retmkt)<0.4  // OLS aaplot rit retmkt if e(sample),  /// xline(0,lp(dash) lc(red)) /// yline(0,lp(dash) lc(red)) msize(*0.6) ///   title("$nn ($id) 的 Beta 系数, 1998-2007") /// xtitle("市场指数收益率(深成指)") graph export "$out\aaplot_$id_b$yr.png", replace     regfit, f(%4.2f) tvalue   //呈现拟合方程

.   regfit, f(%4.2f) tvalue   //呈现拟合方程 rit =  0.00 + 0.61*retmkt_399001       (3.90) (20.44)       N = 1466, R2 = 0.22, adj-R2 = 0.22 Note: t-value in parentheses

2008-2018

. reg rit retmkt if year>=$yr //&abs(retmkt)<0.4  // OLS . aaplot rit retmkt if e(sample),  ///
   xline(0,lp(dash) lc(red)) ///    yline(0,lp(dash) lc(red)) msize(*0.6)    ///    title("$nn ($id) 的 Beta 系数, 2008-2017") ///    xtitle("市场指数收益率(深成指)") . graph export "$out\aaplot_$id_a$yr.png", replace . regfit, f(%4.2f) tvalue   //呈现拟合方程

.   regfit, f(%4.2f) tvalue   //呈现拟合方程         rit =  0.00 + 0.54*retmkt_399001       (2.44) (28.93)       N = 2490, R2 = 0.25, adj-R2 = 0.25 Note: t-value in parentheses

5. 分析个股 Beta 系数变化特征

5.1 逐年回归

.  bysort year: reg rit retmkt, noheader

逐年回归: 更为简洁的处理方法

. statsby _b[retmkt], by(year) ///
   saving("beta_data.dta", replace): ///    reg rit retmkt
变化趋势
 *-变化趋势          preserve    use "beta_data.dta", clear    keep if _stat!=.    qui sum year    local byr = r(min)    local eyr = r(max)    list    #d ;    twoway connect _stat year,             yline(1, lpattern(dash) lcolor(red*0.3))           xlabel(`byr'(2)`eyr')           ylabel(,angle(0) format(%2.1f))           subtitle("$nn ($id) 的Beta系数")           ytitle("beta") xtitle("");    #d cr    graph export "$out\beta $nn $id.png", replace  restore

附:完整命令

*         ============================= *         *          Stata 连享会: 证券分析系列 * *                 2. Beta 系数 * *         ============================= *-注意:执行后续命令之前,请先执行如下命令  global path "d:\cnstock\beta"  //只需修改自路径即可,其他文件夹会自动生成  cd $path  cap mkdir data  cap mkdir refs  cap mkdir out  cap mkdir adofiles    global D    "$path\data"      //范例数据  global R    "$path\refs"      //参考文献  global out  "$path\out"       //图形和表格结果  adopath +   "$path\adofiles"  //添加外部命令所在路径    cd $D  set scheme s2color /*     *------------------ *- 0 安装外部命令 *------------------  *-设定安装外部路径的位置    net set ado "$path\adofiles"    net set other "$D"  //外部命令附带的 example datasets 等存放于此  *-安装外部命令    ssc install cntrade, replace //下载个股和市场指数实时数据, SJ 14(2):381--388    ssc install openall, replace //批量合并    ssc install aaplot, replace    ssc install regfit, replace   */ *--------------------- *- 1 下载个股交易资料 *---------------------  *-请输入股票代码  *-股票代码查询    view browse "http://quote.stockstar.com/stock/stock_index.htm"    *-部分股票代码 /*    global id="000002"    //000002  万科    global id="600028"    //600028  中石化    global id="000527"    //000527  美的电器,已经退市    global id="000651"    //000651  格力电器    global id="000429"    //000429  粤高速A      global id="000541"    //000541  佛山照明      global id="000596"    //000596  古井贡酒      global id="000799"    //000799  酒鬼酒      global id="600048"    //600048  保利地产 2006年07月31日    global id="600115"    //600115  东方航空    global id="600085"    //600085  同仁堂    global id="600249"    //600249  两面针    global id="300398"    //300398  飞凯材料    2014年10月09日    global id="603799"    //603799  华友钴业,2015年01月29日    global id="300431"    //300431  暴风影音, 2015年03月24日 */    global id="600519"    //600519  贵州茅台    cntrade $id    global nn = stknme[1]   //股票简称    use "$id.dta", clear    tsset date  //设定为时间序列变量    *-股价时序图    tsline clsprc , xlabel(,angle(60)) subtitle("$nn $id")    graph export "$out\price_$id.png", replace *------------------ *- 2 下载指数数据 *------------------      *  -Index Codes and Index Names:  *  *   000001   The Shanghai Composite Index (上证综合指数).  *   000300   CSI 300 Index (沪深 300).  *   399001   Shenzhen Component Index (深成指).    foreach i in "399001" "000001" "000300" {      cntrade `i', index      rename rmt retmkt_`i'      save index_`i'.dta, replace      erase `i'.dta    } /* 调用其中一个指数数据:    use index_000300.dta, clear // 沪深300指数    tsset date    tsline clsprc , xlabel(,angle(60)) subtitle("沪深300指数") */ *----------------------- *- 3 合并个股和指数数据 *-----------------------   use "index_399001.dta", clear   merge 1:1 date using "$id.dta", nogen   gen year = year(date)   order date year index* stk* ret*   save "merge_$id.dta", replace *--------------------------------- *- 4 估计CAPM模型并分析 Beta 系数 *--------------------------------- *-估计CAPM模型  use "merge_$id.dta", clear  *winsor2 reti, replace  // winsor 处理  reg rit retmkt  #delimit ;  twoway    (scatter rit retmkt if year<2008&abs(retmkt)<0.4,         xline(0,lp(dash) lc(red))         yline(0,lp(dash) lc(red)) msize(*0.2))      (lfit rit retmkt);  #d cr        // 图示拟合情况        global yr = 2008    reg rit retmkt if year<$yr //&abs(retmkt)<0.4  // OLS    aaplot rit retmkt if e(sample), xline(0,lp(dash) lc(red)) ///            yline(0,lp(dash) lc(red)) msize(*0.6) ///              title("$nn ($id) 的 Beta 系数, 1998-2007") ///            xtitle("市场指数收益率(深成指)")    graph export "$out\aaplot_$id_b$yr.png", replace        regfit, f(%4.2f) tvalue   //呈现拟合方程    reg rit retmkt if year>=$yr //&abs(retmkt)<0.4  // OLS    aaplot rit retmkt if e(sample), xline(0,lp(dash) lc(red)) ///            yline(0,lp(dash) lc(red)) msize(*0.6)    ///            title("$nn ($id) 的 Beta 系数, 2008-2017") ///            xtitle("市场指数收益率(深成指)")    graph export "$out\aaplot_$id_a$yr.png", replace    regfit, f(%4.2f) tvalue   //呈现拟合方程        *-逐年回归    bysort year: reg rit retmkt, noheader    *-逐年统计    statsby _b[retmkt], by(year) saving("beta_data.dta", replace): ///          reg rit retmkt    *-变化趋势          preserve      use "beta_data.dta", clear      keep if _stat!=.      qui sum year      local byr = r(min)      local eyr = r(max)      list      #d ;      twoway connect _stat year,               yline(1, lpattern(dash) lcolor(red*0.3))             xlabel(`byr'(2)`eyr')             ylabel(,angle(0) format(%2.1f))             subtitle("$nn ($id) 的Beta系数")             ytitle("beta") xtitle("");      #d cr      graph export "beta $nn $id.wmf", replace    restore      *--------------------------over------------------------

关于我们

  • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。

  • 公众号推文同步发布于 【简书-Stata连享会】 和 【知乎-连玉君Stata专栏】。可以在简书知乎中搜索关键词StataStata连享会后关注我们。

  • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。

  • Stata 现场培训报名中

联系我们

  • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。

  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 联系邮件: StataChina@163.com

往期精彩推文      Stata连享会推文列表

连玉君-2018暑期Stata研讨班(7.23-8.2)

点击底部【阅读原文】查看推文中的链接并下载相关资料

Stata 现场培训报名中…… (北京 | 山西 | 广东)



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存