可转债跌到90到涨到130要多久? python数据分析告诉你

发布于: 修改于: 雪球转发:1回复:1喜欢:3

接着昨天的文章可转债至暗时刻?,文末留了一部分没写完,继续下文.

不少人做可转债,是因为其有债底保护,只要在低于面值甚至90,80以下买入,只要能够拿得住,就会回到130强赎,即使再不济,也会像格力转债这种,到期10x回售.

安道全的魔法书也多次提到,可转债一般是3年解决战斗(强赎),不过书里面只是笼统说这个时间,如果我们使用真实数据来回测,那么结论会更加有说服力.

这本书但是是在图书馆借的,一天可以看完

那么本文就用python结合量化平台回测一下实际效果, 但这次我们回测的是: 如果转债跌到90元后,我们买入卧倒装死,要等多久才能重回130元.

获取数据

数据源使用优矿自带的数据.

获取日期可以自己用参数设定,这里笔者选择从2017年1月到2020年12月的数据进行回测,因为在此之前的可转债数量过少,而且跌破90元的转债也是非常少.

可转债爆发式增长应该是在17年无需现金申购新债推广后出现的.

def bonds(beginDate=u"20170101",endDate=u"20201215"):
    df = DataAPI.MktConsBondPremiumGet(SecID=u"",tickerBond=u"",beginDate=beginDate,endDate=endDate,field=u"",pandas="1")
    cb_df = df.tickerBond.str.startswith(('12','11'))
    cb_df_=df[cb_df]
    ticker_list = cb_df_['tickerBond'].unique()
    return ticker_list

上面函数拿到所有的可转债代码,剔除了其他企业债,可交换债.

共有416只,包含已经退市的可转债

然后拿到代码后进逐个遍历日线数据,一般笔者使用收盘价作为参考价,如果盘中突然出现一个脉冲到130的就记录在当中.

如果读者想要计算盘中达到130的,只需要把参考价换一个参数closePriceBond,很简单的,改为high即可,不影响整体代码逻辑.

不过笔者习惯使用收盘价作为参考价,毕竟盘中的脉冲,不一定每一个人都能捕捉得到.

min_value=90
max_value=130

def bond_trade_data(ticker,beginDate,endDate):
    # 转债日线

    bond_df = DataAPI.MktConsBondPerfGet(beginDate=beginDate,endDate=endDate,secID=u"",tickerBond=ticker,tickerEqu=u"",field=['bondPremRatio','closePriceBond','tradeDate','tickerEqu','secShortNameBond'],pandas="1")
    min_df = bond_df[bond_df['closePriceBond']<=min_value]
    max_df = bond_df[bond_df['closePriceBond']>=max_value]
    name=bond_df['secShortNameBond'].iloc[0]

    min_date=None
    if len(min_df)>0:
        min_date = min_df.iloc[0]['tradeDate']

    max_date=None
    if len(max_df)>0:
        if min_date is not None:
            max_df=max_df[max_df['tradeDate']>min_date]
            if len(max_df)>0:
                max_date = max_df.iloc[0]['tradeDate']    

    days=None
    if min_date is not None and max_date is not None:
        days=day_expand(max_date,min_date)

    return {'code':ticker,'days':days,'max':max_date,'min':min_date,'name':name}

上面的代码获取所有日线收据后,找到第一个出现90元的日期, 还有一个是第一次出现130元位置的地方,不过这里有个细节,就是如果转债先出现了130,后面跌到90的情况,所以需要先保证130的日期在90的后面.

OK,然后把上面2部分代码组合在一起:

beginDate=u"20170101"
endDate=u"20201215"
result_list =[]
for bond in bond_list:
    ret=bond_trade_data(bond,beginDate,endDate)
    result_list.append(ret)

最终数据在result_list 里面了.

分析

接下就是分析了.

我们先把有值的抽出来,因为不是每一个转债都出现过跌倒90在涨到130.

现在把这种情况的提取出来

has_value=[i for i in result_list if i.get('days') is not None]

= 24

共有24只转债上岸成功.

然后看看是哪24个幸运儿

看到最近热门妖债横河,盛路,蓝盾,模塑,都曾经落难到90以下. 不过先模塑,从90起来到130,用了足足600天,差不多2年的时间.

最近蹭上新能车概念的小康也是,90到130之路经历了882天,也就在今年12月才到的130元,经历多少岁月的煎熬,才熬出头.

然后我们就看看统计数据,对天数进行统计

mean是平均值, 为 302天, 就是转债从90到130要平均经历303天的时间(这里使用的是自然日), 但是也有部分是当前日期日期内跌到过90以下,但是现在也还没有上130的,比如亚太转债,辉丰转债.后面会有继续分析.

最快从90回到130的用了127天.

可以查查是哪一个

是第18个元素.

定位到该元素

是最近的妖债盛路转债

统计数据里面的25%,50%,75%分别是统计数据的四分位.

然后接着看一下哪些跌破90后,到现在还没有回到130的.

居然还有19只

榜首的辉丰转债没有摸过130就已经退市了

看K线,出道即巅峰.第一天开盘买入的要从头套到退市.

剩下的都是现在时间排序, 选择一只时间比较久的,当前价格又比较低的,可以作为埋伏,这个不失为一个保守的策略,冒进点的可以直接买入正股,不过这个有点赌的成分. 

像之前的辉丰股份,模塑科技,最近的小康股份,溢价率看着从80%多拉倒10%以内,甚至变成负溢价.

有兴趣的读者可以使用上述代码尝试每个价格区间的持续时间,比如跌到100后涨回到130的时间, 上面的数字动动手指改一下就可以得到不一样的数据与结果.

笔者公众号里的文章涉及到的代码其他对新人可能不太友好,更加适合有编程经验的读者, 不过对于很多人,其实知道结论就足够了,而推理过程只是让你的信仰更加坚定,毕竟是自己推理出来的,不可能自己去打自己脸哈.

而有兴趣接触这一方面的读者,其实入门也不难,python语法简单,入门快,而做分析,大部分依赖numpypandas这2个第三方库, 基本涉及到数据分析的都会用到个库(pandas底层也是numpy的结构,实际同一个东西).

这个库功能十分强大, 可以把excel,数据库(mysql, mongo)等不同数据一键导入, 然后处理后又可以一键导出为excel,数据库. 操作也简单,即使不做数据分析,也是自动化办公的好帮手,比如用来过滤excel数据,只需要用数学等式就够了,不需要记复杂的excel函数.

之前有读者咨询看什么书比较好,个人是推荐的是这本书

之前也推荐过群里的小伙伴. 书的作者就是pandas库的作者, 而且老外写的书逻辑性要比国内的好很多,而且顺着他们的思路走下去,不会觉得突兀,书前面是python的基础知识,也适合刚学习python的小伙伴.

实体书的好书是可以随时翻翻,查阅方便,笔者平时就把它当做工具书,因为很多用法不可能都记得住,需要经常翻书查阅,虽然有kindle电子书,不过做笔记,查阅还是实体书方便.

 $上证可转债ETF(SH511180)$   $盛路转债(SZ128041)$   $模塑转债(SZ127004)$  

公众号:可转债量化分析

全部讨论

大篆不来2021-10-09 12:43

day_expand(max_date,min_date)不详。