Stata: 实时估计个股的贝塔(beta)系数
作者:连玉君
Stata 现场培训报名中……
点击底部【阅读原文】查看推文中的链接并下载相关资料
目的
使用 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专栏】。可以在简书和知乎中搜索关键词
Stata
或Stata连享会
后关注我们。点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
Stata 现场培训报名中
联系我们
欢迎赐稿: 欢迎将您的文章或笔记投稿至
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
联系邮件: StataChina@163.com
往期精彩推文 Stata连享会推文列表
点击底部【阅读原文】查看推文中的链接并下载相关资料
Stata 现场培训报名中…… (北京 | 山西 | 广东)