社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【中金固收·固收+】定增基金的新机遇:限售股AAP估值及Python实现方法(下)

中金固定收益研究 • 5 年前 • 896 次点击  
作者

  分析员,SAC执业证书编号:S0080515120002   SFC CE Ref: BOM868

  分析员SAC执业证书编号 S0080517070005   SFC CE Ref:BON965

吴若磊联系人,SAC执业证书编号:S0080119030020

陈健恒分析员SAC执业证书编号 S0080511030011 SFC CE Ref: BBM220


策略观点 ---    

再融资新规落地,定增产品会面临哪些变化?我们在《隐藏价值的角落——限售股AAP估值及Python实现方法》中分析了实践中的一个核心难点问题,即基金参与定增(或通过配售等其他方式得到了限售股份)时如何做后续估值——这影响到我们如何去看待这些产品的净值和折价。在AAP的方法之下,限售股天然会以“折扣价”计入基金资产,而这一“折扣”却与成本无关,仅与股票本身的属性(分红率以及波动率)以及锁定时间有关。

这里,我们希望通过一个详细的分析过程说明,“以前是怎样的”以及“以后会怎样”。当然,这里也可以看做此前报告《隐藏价值的角落——限售股AAP估值及Python实现方法(上)》的延续,因此这里也涉及一些数据处理和分析方法。

首先是信息的处理。基金参与定增的信息会在多个地方出现,包括上市公司的公告(涉及定增具体方案、锁定期等)、基金公司的临时公告(这里会有基金具体买入的数量)、基金公司的定期报告(这里会汇总基金所有的限售股)。

万得数据终端中有一个比较全面的汇总,不过这里有两个问题需要进一步处理:一是有的没有解禁日期,这里需要将参与日与限售期相加,手动得到补充的解禁日期。二是,由于2017年减持规则的变化,定增解禁后一年内只能减持至多一半,另一半要到后一年——也就是对于一个锁定12个月的定增,实际是变成了半个锁12个月+半个锁24个月的定增。这里需要我们进一步识别,对于执行日在上周及以前的、以及解禁日在2017年5月底之后的,要进行上述分段处理。Python语言的实现方法如下:

from dateutil.relativedelta import relativedelta
dfHeld = pd.read_excel(u'基金参与定向增发.xlsx')
dfTemp = pd.DataFrame(columns=dfHeld.columns)
counter = 0
lstAmountColumns = [u'持股数量(万份)',u'成本总额(万元)',u'成本总额占基金资产净值比例(%)',u'账面价值(万元)',u'账面价值占基金资产净值比例(%)']
for i in dfHeld.index:
if pd.isnull(dfHeld.loc[i, u'解禁日期']):
    # 处理第一个问题
dfHeld.loc[i, u'解禁日期'] = dfHeld.loc[i, u'定增截止日期'].to_pydatetime() + relativedelta(months=dfHeld.loc[i, u'锁定期()'])
if not (dfHeld.loc[i, u'解禁日期'] < dt.datetime(2017,5,27) or dfHeld.loc[i, u'定增截止日期'] > dt.datetime(2020,2,13)):
    # 处理第二个问题
dfHeld.loc[i, lstAmountColumns] *= 0.5
dfTemp.loc[counter] = dfHeld.loc[i]
dfTemp.loc[counter, u'解禁日期'] += relativedelta(months=12)
counter += 1

def _heldSetId(dfHeld):
# 注意,这个函数的目的是处理数据表的主键,避免以序号作为index。用基金代码、股票代码和解禁日连接形成。
dfHeld['ID'] = dfHeld[u'基金代码'] + ':' + dfHeld[u'定增股票代码'] + ':' + dfHeld[u'解禁日期'].apply(lambda x: dt2str(x.to_pydatetime()))
dfHeld.set_index('ID', inplace=True)

_heldSetId(dfHeld)
_heldSetId(dfTemp)
dfHeld = dfHeld.append(dfTemp)
dfHeld.sort_index(inplace=True)
dfHeld.to_excel(u'处理后的基金参与定增数据.xlsx')

经过上述处理,可以得到一个能用于查询基金所持定增品种的DataFrame。例如,在2019年2月17日这个时间点,我们想知道九泰锐智的未解禁定增股,就可以通过dfHeld[(dfHeld[u’基金代码’] ==‘161801.OF’) & (dfHeld[u’解禁日期’] > dt.datetime(2020,2,17))] 来获得。

然后需要计算的是对应股票的折价率。详细每一步的计算方法(包括算股息率、波动率以及最后的AAP折扣率)都在《隐藏价值的角落——限售股AAP估值及Python实现方法(上)》给予了具体的分解介绍,这里只需要将他们组合起来,并应用在上面处理好的DataFrame上。因此虽然函数不断,但基本没有太多复杂或不易理解之处,实现如下:

def discRatioTable(dfHeld, start, end=None, dataMode='api'):
'''
输入限售股table,输出这些券对应的LoMD,至少需要限售股代码列、买入日期列和可流通日期列
start: 计算首日,yyyy/mm/dd
end: 计算终日, yyyy/mm/dd,可以不输入,则为None,此时按start计算,也就是只算start这一天。
dataMode:取数据的方法,在家办公可以选择api,另有sql模式
'''

# 先拿到这些股票的vol
lstStocks = list(set(dfHeld[u'定增股票代码']))
nDaysBefore, flag = backToTime(start, list(dfHeld[u'解禁日期'].apply(lambda x: x.strftime('%Y/%m/%d'))))

if flag:
dfAdjClose = priceData(lstStocks, nDaysBefore, end, dataMode)
dfLogPct = logPctData(dfAdjClose)

else:
print u'没有限售股,不必算了'
return None

dfVol = pd.DataFrame(index=dfAdjClose.loc[start:end].index, columns=dfHeld.index)

for col in dfVol.columns:
print col
code = dfHeld.loc[col, u'定增股票代码']
if dfHeld.loc[col, u'解禁日期'] > dt.datetime.strptime(start,'%Y/%m/%d'):
for date in dfVol.index:
days = _deletaTradingDate(date, dfHeld.loc[col, u'解禁日期'].strftime('%Y/%m/%d'))
if days > 0:
dfVol.loc[date, col] = calcVol(dfLogPct, code, date, days)

# 然后是q,股息率
dfDiv = dividendYield(lstStocks, start, end, dataMode)

# 计算discRatio
dfDiscRatio = pd.DataFrame(index=dfVol.index, columns=dfVol.columns)

for col in dfDiscRatio.columns:
strEnd = dfHeld.loc[col, u'解禁日期'].strftime('%Y/%m/%d')
code = dfHeld.loc[col, u'定增股票代码']
for date in dfDiscRatio.index:
t = deltaT(date, strEnd)
if t > 0:
dfDiscRatio.loc[date, col] = aapDisc(dfDiv.loc[date, code], dfVol.loc[date, col], t)

return dfDiscRatio

现在,利用前面这些基础工具,我们可以考虑一个两年前的情况:在2018年8月10日,九泰锐智(历史比较长的一个五年定增基金)参与海达股份定增,成本1000万元、4.66元每股,原锁定12个月。此时基金会面临的是,1年名义锁定期,实际500万元(成本)锁定12个月、500万元锁定24个月。按照上述方法计算,两部分按照AAP估值之下,分别需要9.59%和12%的折扣率,平均下来以5.01元入账——按照当年8月14日该基金公告中的数据计算,其使用的折扣率也和我们这一数字十分接近。当然,无论是当时的账面上,还是到现在来看,该基金都赚钱了,但是,需要强调,这里赚钱的条件有多苛刻

1、4.66元的成本相当于在7月10日(定价基准日)的基础上打了9折,这也是当时的极限——然而如果股价不动,也免不了在交易完成当日形成浮亏(公告出来会显示成本价高于账面价值);

2、好在后来的一个月内,股价有所上涨,到8月10日时,股价已经从5.23元涨至5.62元,4.66元的成本相当于83折;

3、以及,更少人会注意到的是,在股份完全解禁的2020年8月13日,下一天该基金就结束封闭期转为LOF——届时基金要应对申赎,理论上不应该再持有定增股份。也就是说,这几乎是该基金能参与定增的最后时间。

能比较直观地看到,当时的环境下,定增基金想要真的参与一笔定增的难度:1)首先,发行人要能同意9折的价格——但这还不够;2)在定价基准日至实际参与定增的这段时间里,股价要有一定幅度的上涨;3)基金参与要及时,对于5年封闭期的产品来说,第三年末就是最后的机会。

新与旧的不同就在于:而如果这笔投资,都按照新规下的6个月锁定期,其折扣率就会是7.1%,即使站在定价日,93折之下,交易即可达成。更不用说,现在定增价格最多可以打8折。

总结起来,对于定增基金等产品而言,变化之处以及我们的一些判断如下:

1、锁定期大幅缩短,直接降低AAP自带的折扣率,根据我们对当前已有预案且未被否决的公司的测算,在半年锁定期下,平均AAP折扣率为7%、最大为11.9%——这两个数值在过去的规则下分别是12.6%和18.8%;

2、不过定价定增还是有些难,AAP折扣平均要11.9%,最大达到接近19%,需要一定程度上考虑谈判和择券能力;

3、定增打折的上限提升至20%,也减少了交易因规则而不能达成的几率,但这里要看市场情况;

4、一个不太受到市场强调的是,缩短锁定期不仅降低风险,也大幅提高了定增基金的周转效率。以往的锁定期下,竞价定增实际锁定2年,5年期定增基金最后参与定增的时间是第3年末,而现在,只要其距离转LOF时限不超过半年,就可以再进行操作。同时,它们可以参与多轮定价定增了(以前只能在第一年参与一次,难度很大);

5、以及,以前存在着的18个月封闭期定增基金,它们理论上也可以参与2、3轮竞价定增了(以前基本无法参与);

6、老基金的优劣势:距离转LOF不足6个月的基金,已经没有更多办法,同时老项目无法改变锁定期;但由于定增市场的投资者在过去2年大幅减少,要重新培育。因此最近的几个月之内可能存在供大于求(项目多、资金少),可能有利于拿到更多折扣和项目,我们认为这是这些产品最主要的优势所在。




固收+ 市场跟踪---    

1、分级A市场方面,春节后分级A市场表现不俗,近十个交易日分级A指数上涨0.86%,其中主流的R+3.0%品种大涨0.99%。但并非源自节后首日股市的大幅下跌(当日分级A表现也并不强),而更多来自后来股市反弹带来的配对转换价值。

由于目前分级A已经普遍没有折价,其价格运行逻辑开始出现一些变化,即便是R+3.0%分级A,其一定程度上也要与股市同向变动(而非具备对冲效果),除了折价归零以外,针对日益上涨的分级B的“门票价值”也开始上涨。结合股市的结构特点,我们近期相对看好的品种包括创业板A和深成指A。

2、打新基金:

近期,科创板热情再度回归,新股涨幅整体上行,因此我们筛选的打新基金样本池近1月多数表现出了正增长,部分基金净值增长为负可能受到底仓的拖累。

3、市场情绪高涨,对于新股破发的预期也进一步降低,近10个交易日来看,战略配售基金平均上涨1.54%,折价率变化不大,因此主要归因于净值上涨。

再融资新规的正式落地显著提振市场情绪,定增基金表现强势,近10日平均涨幅达到11.51%。根据再融资新规,定增锁定期缩短且解禁后也不再受减持规则约束,对于定增基金来说,减持受限是导致隐含折价的主要因素。近期隐含折价率无明显变化,目前九泰锐益、九泰泰富均在12%左右。在新规利好定增市场的条件下,若定增规模能尽快恢复,未来此类产品有望扩容。

4、转债市场表现依然强势,春节后虽然也随股市跳空低开,但跌幅明显更小,且后续反弹迅速,早早填补缺口。近十个交易日来看,中金转债指数上涨3.6%,创业板转债则显然更为活跃,涨幅超过10%的品种不少。

我们在近期调整了对转债市场的看法,目前估值已经来到历史上较高的水平,隐含了股市大幅上涨的预期。但正股层面看依然有明显的结构特征,中小创上行趋势、大盘震荡走势,因而存在一定程度的错配,因此我们对转债指数及大盘转债的观点偏谨慎。近期我们建议以动量策略为主,偏向中小创及高价高弹性品种,与此同时绝对仓位可以有所下降。

5、ABS市场方面,受疫情影响各类ABS发行节奏明显放缓,特别是银行间市场,节后仅有2单ABS发行。交易所方面受影响相对较小,发行量基本与2019年同期持平,房地产供应链和消费金融资产仍然是发行的主力。对于存量产品而言,疫情所带来的短期现金流波动较为明显,特别是商业地产类ABS,而实质性的信用违约风险则相对较弱。

价格方面,在超预期的供给暂未出现之前,价格继续维持在低位。

6、REITs市场方面,国内共有6支基金主要投资于REITs领域。其中,上投摩根、南方、广发的三只基金别分跟踪了3个较为主流的REITs指数;诺安、嘉实、鹏华的三只基金则为主动投资。

近期,美国REITs市场情绪良好,整体上行,主要指数均表现不俗,各基金净值均出现了正增长。其中上投摩根富时REITs和南方道琼斯美国精选净值均上涨1.82%,广发美国房地产上涨2.75%。主动型基金中,诺安和嘉实两只基金分别上涨1.20%和3.71%,而鹏华美国房地产净值增长4.20%,涨幅最为显著。从重仓券来看,该只REITs基金与其他基金也有较大的区别。


本文所引为报告部分内容,报告原文请见20202 21金固定收益研究发表的研究报告





Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55082
 
896 次点击