文章来自onestata

目录

  • 0 背景

  • 1 对周收益率的定义

  • 2 从CSMAR下载相关数据

  • 3 数据的清洗与合并

  • 4 计算股价崩盘风险

    • 4.0 相关公式

    • 4.1 计算前准备

    • 4.2 计算

    • 4.3 计算

    • 4.4 结果展示

  • 5 结语

  • 参考文献


正文

0 背景

股价崩盘风险(Stock Price Crash Risk),是近些年来相对较为热门的话题。

图1. 知网检索界面

图2. Google Scholar 检索界面

但有一点疑惑的是,股价崩盘风险的几个指标在计算上并不存在太大的难度,但网上却少有开源的代码(指我只百度到了一篇)。部分开源代码里面也存在一些未被指出的细节,以及冗余的计算。

于是乎,我打算将股价崩盘风险的计算方法与代码作为本期推文素材进行推送。数据是亲手下的,代码是亲手码的

君子协议: 本期推文将手把手介绍从数据下载到指标计算的详细步骤。当然,如若使用本推文的代码,请以以下三种(任选一种)网络资料形式引用本推文。

[1] 左祥太.「Stata」计算股价崩盘风险[EB/OL].(2023-5-4)[填入你的引用日期].填入本推文的网址.

[2] 左祥太.Stock-Price-Crash-Risk[DB/OL].(2023-5-4)[填入你的引用日期].https://github.com/ShutterZor/Stock-Price-Crash-Risk.

[3] 左祥太.Stock-Price-Crash-Risk[DB/OL].(2023-5-4)[填入你的引用日期].https://gitee.com/Shutter_Zor/Stock-Price-Crash-Risk.

1 对周收益率的定义

通过参考相关文献,了解到股价崩盘风险一般以考虑现金红利再投资的周收益率按市值加权的周收益率进行回归以及计算。其中,按市值加权的周收益率又分为按总市值加权与按流通市值加权。

谢德仁等(2016)发表于《管理世界》的《控股股东股权质押是潜在的“地雷”吗?——基于股价崩盘风险视角的研究》一文并未说明使用的指标是按总市值加权还是按流通市值加权。

罗进辉和杜兴强(2014)发表于《会计研究》的《媒体报道、制度环境与股价崩盘风险》一文认为对于市场的周收益率应当以按行业分的流通市值加权认定。

方便起见,本文对个股与市场周收益率的界定如下。1、个股的周收益率:使用CSMAR提供的考虑现金红利再投资的周个股回报率 数据作为个股的周收益率指标。2、市场的周收益率:不以按行业分的流通市值加权认定市场的周收益率,而是直接使用CSMAR提供的考虑现金红利再投资的周市场回报率(流通市值加权平均法) 数据作为市场的周收益率指标。

2 从CSMAR下载相关数据

1. 个股周收益数据: 数据中心👉单表查询👉股票市场系列👉股票市场交易👉个股交易数据,下载考虑现金红利再投资的周个股回报率,同时也需要选择市场类型,不然无法匹配市场收益。

2. 市场周收益数据: 数据中心👉单表查询👉股票市场系列👉股票市场交易👉各分市场交易数据,下载考虑现金红利再投资的周市场回报率(流通市值加权平均法)。

3 数据的清洗与合并

将个股、市场收益率文件下载解压后保存到同一个文件夹,然后分别清洗与合并,具体代码如下。

*- 整理个股周收益率数据
import excel using "周个股回报率文件/TRD_Week.xlsx", first clear
labone, nrow(1 2) concat("_")
drop in 1/2
keep if Markettype == "1" | Markettype == "4"		// 保留上证A股与深证A股
compress
save ShareReturn.dta, replace

*- 整理市场周收益率数据
import excel using "周市场回报率文件/TRD_Weekm.xlsx", first clear
labone, nrow(1 2) concat("_")
drop in 1/2
keep if Markettype == "1" | Markettype == "4"		// 保留上证A股与深证A股
compress
save MarketReturn.dta, replace

*- 合并个股与市场的收益率数据
use ShareReturn.dta, clear
merge m:1 Markettype Trdwnt using MarketReturn.dta
drop _merge Markettype
save MergeData.dta, replace

完成清洗与合并后的数据如下。

图3. 合并后的数据

4 计算股价崩盘风险

4.0 相关公式

在正式计算股价崩盘风险前,需要先对相关公式进行了解。

首先,需要根据个股收益率与市场收益率的回归方程估计残差。

其次,根据残差估计预期收益率/持有回报/特定收益率。

最后,依次计算与。

其中,表示股票一年中的交易周数。

其中,表示其大于年平均的周数,表示其小于年平均的周数。

4.1 计算前准备

在开始计算前需要先将收益率数据从文本型变量转换为可供计算的数值型变量,注意这里还需要将变量从小数变换为百分数,如果不做这一步处理,则最后的结果将会被放大,导致与已有文献的描述性统计结果存在差异。此部分Stata代码如下。

use MergeData.dta, clear

*- 计算前准备
destring Wre*, replace
replace Wretwd = Wretwd * 100
replace Wretwdos = Wretwdos * 100

4.2 计算

*- 计算NCSKEW
egen stkid = group(Stkcd)
egen week = group(Trdwnt)
xtset stkid week

*- 生成年交易周数
gen year = substr(Trdwnt,1,4)
bys Stkcd year: gen tradeWeek = _N

*- 计算残差
sort stkid week
reghdfe Wretwd L2.Wretwdos L1.Wretwdos Wretwdos 	///
    F1.Wretwdos F2.Wretwdos, noa res(e)

*- 计算特定收益率
gen W = ln(1 + e)

*- 计算NCSKEW
gen W2 = W ^ 2
gen W3 = W ^ 3
bys Stkcd year: egen sumW2 = sum(W2)
bys Stkcd year: egen sumW3 = sum(W3)
gen NCSKEW1 = -1 * tradeWeek * (tradeWeek-1)^(3/2) * sumW3
gen NCSKEW2 = (tradeWeek-1) * (tradeWeek-2) * sumW2^(3/2)
gen NCSKEW = NCSKEW1 / NCSKEW2

4.3 计算

*- 计算DUVOL
bys Stkcd year: egen meanW = mean(W)
gen temp1 = 1 if W > meanW 
gen temp2 = 1 if W < meanW
bys Stkcd year: egen nu = sum(temp1)
bys Stkcd year: egen nd = sum(temp2)
gen W2U = W^2 if temp1 == 1
gen W2D = W^2 if temp2 == 1
bys Stkcd year: egen sumW2U = sum(W2U)
bys Stkcd year: egen sumW2D = sum(W2D)
gen DUVOL1 = (nu-1) * sumW2D
gen DUVOL2 = (nd-1) * sumW2U
gen DUVOL = ln(DUVOL1/DUVOL2)

4.4 结果展示

首先去除重复值,仅保留不重复的股票在样本期间(2020-2022)的取值。

*- 去除重复值
duplicates drop Stkcd year, force
keep Stkcd year NCSKEW DUVOL

*- 描述性统计
sum NCSKEW DUVOL

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
      NCSKEW |      9,350   -1.164931    .9615164  -4.317297   5.688628
       DUVOL |      9,303   -.1427808    .8529037  -5.540164   6.149916

*- 前后缩尾1%
winsor NCSKEW, p(0.01) g(NCSKEW_W)
winsor DUVOL, p(0.01) g(DUVOL_W)

sum NCSKEW_W DUVOL_W

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
    NCSKEW_W |      9,350   -1.167564    .9247506  -2.469873   2.217396
     DUVOL_W |      9,303   -.1450617    .8297157  -1.603814   2.337012

比对已有文献的描述性统计结果,以谢德仁等(2016)为例。

图4. 谢德仁等描述性统计

不难发现,计算结果非常之合理。

5 结语

本推文简要回顾了一些已有的关于股价崩盘风险的文章,并给出了两个主流指标的Stata计算代码。考虑到百度网盘的限速,我以后将会把代码与数据上传至GitHubGitee。前者需要一点点魔法访问,或者修改本地DNS,首选DNS设置114.114.114.114,备选DNS设置8.8.8.8,即可实现不带魔法访问。后者国内可以直接访问,但是需要自行注册账号。

GitHub地址:https://github.com/ShutterZor/Stock-Price-Crash-Risk

GitHub依次点击Code👉Download ZIP即可下载全部内容。

Gitee地址:https://gitee.com/Shutter_Zor/Stock-Price-Crash-Risk

Gitee依次点击克隆/下载👉下载ZIP即可下载全部内容。

参考文献

  • [1] 谢德仁,郑登津,崔宸瑜.控股股东股权质押是潜在的“地雷”吗?——基于股价崩盘风险视角的研究[J].管理世界,2016(05):128-140+188.

  • [2] 罗进辉,杜兴强.媒体报道、制度环境与股价崩盘风险[J].会计研究,2014(09):53-59+97.

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐