计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)

实验要求:

  1. 选择5只在上交所上市交易的股票的月度收益率(近10年);
  2. 对每只股票估计CAPM模型和Fama-French五因子模型,解释估计量的金融含义;
  3. 从两个模型的估计结果,你能得到哪些结论?

step1:获得实验数据

method1:通过url下载(网易财经提供的数据)
浦发银行

http://quotes.money.163.com/service/chddata.html?code=0600000&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

中国人寿

http://quotes.money.163.com/service/chddata.html?code=0601628&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

中国银行

http://quotes.money.163.com/service/chddata.html?code=0601988&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

工商银行

http://quotes.money.163.com/service/chddata.html?code=0601398&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

广电网络

http://quotes.money.163.com/service/chddata.html?code=0600831&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

沪深300(作为市场基准

http://quotes.money.163.com/service/chddata.html?code=0000300&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

XD东方证(国债股票,作为无风险资产

http://quotes.money.163.com/service/chddata.html?code=0600958&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

PS:如果想得到其他股票的数据,直接对以上url进行修改即可

举例:

http://quotes.money.163.com/service/chddata.html?code=0601398&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

  • 第一个高亮的地方换成你想要的股票代码;
  • 第二个高亮指的是要获得什么时间之前的数据;
  • 最后的那些大写单词fields为你想要获得该只股票的哪些数据(即对应获得哪些表头,如开盘价,闭盘价,涨跌幅等)

PS in PS:如果需要收集多支股票的数据,可自行设计爬虫,下面给出参考(拼接字符串,然后get,get和handle res的方式每种语言不一样,自行设计):

var url = "";
var urlHead = "http://quotes.money.163.com/service/chddata.html?code=0";
var urlBody = "&end=";
var urlTail = "&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP";

var dataCode = 600000;
// for example: nums == 10, date == 20201231
var nums = 10;
const date = 20201231;
for (var i = 0, i <= nums, i++) {
	dataCode ++;
	url = "" + urlHead + datatCode + url + urlBody + date + urlTail;
	// TODO:
	// get urls you have just spliced and save the result as csv format
}

method2:使用stata中的第三方命令获取数据(比较方便)

在stata命令窗口依次输入如下命令:

  • 安装cntrade命令:
ssc install cntrade, replace
  • 通过股票代码download数据(如下载工商银行的数据):
cntrade 601398

处理数据:

// TODO:
// your command here to process the data you have just downloaded

效果:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第1张图片

上述两个命令运行完成后,再打开数据编辑器,可以看到数据已经拉下来了:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第2张图片


Step2:CAPM模型介绍

CAPM formula:
E ( R i ) = R f + β i ( R m − R f ) E(R_i)=R_f+β_i(R_m-R_f) E(Ri)=Rf+βi(RmRf)
o r or or
E ( R i ) − R f = β i ( R m − R f ) E(R_i)-R_f=β_i(R_m-R_f) E(Ri)Rf=βi(RmRf)
Formula specification:

  • Rm :市场投资组合的收益率,他的作用是作为一个基准,在本实验中,选用沪深300;
  • Rf :代表无风险资产收益率,如国债,本实验选用XD东方证(我不是金融专业,所以不知道这个XD是不是国债,反正百度上说是,如果不是,换成是国债的就行了);
  • βi单项(或投资组合,以下"单项"都也可以是投资组合,看你是拿一只股票分析还是拿一个组合了)的Beta值,大于1代表该单项资产的风险收益率高于市场组合(大盘)平均风险收益率,小于1即单项小于大盘,等于1即单项与大盘呈同比例变化,如果为负,说明单项与大盘波动方向相反,这应该就是本实验要估计的那个值
  • Ri - Rf :是单项比无风险资产高出的期望收益率,称作风险溢酬

在本次实验中各参数的对应(!note:我这里就直接用日收益率了,实验要求的是月收益率):

  • Rm :沪深300的日收益率;
  • Rf :XD东方证的日收益率;
  • E(Ri) :选的是吉比特的股票,股票代码603444,Click here:数据url

Step3:数据处理(by CAPM模型)

感觉国债那个选的不对,XD这个名字就感觉不靠谱,换成了000012(国债指数),url如下:

http://quotes.money.163.com/service/chddata.html?code=0000012&end=20201231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

需要三个数据文件(从左→右依次为:吉比特数据[作为 R i R_i Ri],沪深300数据[作为 R m R_m Rm],国债指数数据[作为 R f R_f Rf]):

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第3张图片

打开一个文件(下图为工行的数据,真实的实验中用的是吉比特的数据),应该要的是日期数据和第10列数据[PCHG](日收益率,实验要求是月,感觉道理一样,从这个表里也可以算出月收益率,没搞,就用日收益率了),英语环境OS所以中文表头乱码了:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第4张图片

图省事,这里我就直接用Excel把这个三个文件中的这列数据提取出来了,搞成这样,4个表头对应Stata中的4个Variables —— date,ri,rm 和 rf(下图的ri列是工行的数据,实验中换成吉比特的数据了):

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第5张图片

导入数据到Stata,发现date的数据是红色,证明格式不对,引用此blog中的方法成功解决:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第6张图片
solution to date format:

命令窗口中输入命令(以原date变量为source,新建变量b):

gen d=date(date,"YMD")

之后编辑变量b的格式:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第7张图片

选择日期格式:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第8张图片

新建的变量d表示的日期不红了:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第9张图片

可以把之前的变量date干掉了,再把新变量d重命名为date:

drop date
rename d date

将数据格式设置为时间序列:

tsset date

CAPM formula recall: E ( R i ) − R f = β i ( R m − R f ) E(R_i)-R_f=β_i(R_m-R_f) E(Ri)Rf=βi(RmRf)

新建一个变量 rirf 存放 ri 与 rf 的差值:

gen rirf = ri - rf

再新建一个变量 rmrf 存放 rm 与 rf 的差值:

gen rmrf = rm - rf

针对这两个变量做回归,拟合出β系数:

reg rirf rmrf

查看结果,拟合出的β约等于0.889:

计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第10张图片
也就是说,在这个股票中:
E ( R i ) − R f ≈ 0.889 ( R m − R f ) E(R_i)-R_f≈0.889(R_m-R_f) E(Ri)Rf0.889(RmRf)
o r or or
E ( R i ) ≈ R f + 0.889 ( R m − R f ) E(R_i)≈R_f+0.889(R_m-R_f) E(Ri)Rf+0.889(RmRf)
结论:
在其它条件不变的情况下,市场超额收益(即rm-rf)变动1单位,吉比特超额收益即ri-rf)变动0.889个单位

PS:
数据类型问题:第一次用stata,一开始导入数据的时候,踩了几个坑,都是数据格式的问题,对于string类型变量,int类型变量和float类型变量之间的转换需要注意
missing values generated 问题(onging…)

Attached:
附上述过程的全部命令log:
计算个股CAPM模型和Fama-French五因子模型(by Stata16MP)_第11张图片


Step4:Fama-French五因子模型介绍

引自blog:利用Fama-French五因子模型的alpha进行行业轮动
Fama和French(2015)将先前的三因子模型扩展到五因子模型,认为新的五因子模型可以更好地描述横截面上的收益率。他们在市场风险溢价规模(SMB)和价值(HML)因子的基础上添加了两个新因子,即盈利能力(RMW)和投资(CMA)

Fama-French formula:
R i t − r f t = α i t + β i m ∗ ( R m t − r f t ) + β i S M B ∗ S M B t + β i H M L ∗ H M L t + β i R M W ∗ R M W t + β i C M A ∗ C M A t + ε i t R_{it}-r_{ft}=α_{it}+β_{im}*(R_{mt}-r_{ft})+β_{iSMB}*SMB_t+β_{iHML}*HML_t+β_{iRMW}*RMW_t+β_{iCMA}*CMA_t+ε_{it} Ritrft=αit+βim(Rmtrft)+βiSMBSMBt+βiHMLHMLt+βiRMWRMWt+βiCMACMAt+εit
Formula specification:

  • R i t − r f t R_{it}-r_{ft} Ritrft是行业i超过无风险收益率的超额收益,就是CAPM里的那个"风险溢酬";
  • R m t − r f t R_{mt}-r_{ft} Rmtrft是市场风险溢价,可以理解为大盘减去国债的值(就是大盘减去无风险收益率,在上面的CAPM模型中也有这一项);
  • SMB是小型公司与大型公司之间的收益率差异,它模仿了规模风险
  • HML是高账面市值比与的账面市值比公司之间的收益率差异,它模仿了价值风险
  • RMW是盈利因子,它是盈利能力最强的公司与盈利能力最弱的公司的收益率差异;
  • CMA是投资因子,是投资保守的公司的收益率减去积极投资的公司的收益率;
  • α表示投资者获得的高于考虑了以上这些因子的期望收益率的超额收益

Step5:数据处理(by Fama-French五因子模型)

typing…
learning…
and focusing…


Thanks to:

  • reference 1:线性回归计算个股β值
  • reference 2:python量化选股入门
  • reference 3:Stata实验-计算"上海机场"的CAPM模型的β值
  • reference 4:CFHW数据实操
  • reference 5:利用Fama-French五因子模型的alpha进行行业轮动
  • reference 6:Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

你可能感兴趣的:(Stata,其他)