python量化回测 

您所在的位置:网站首页 可转债转股是赚还是亏 python量化回测 

python量化回测 

2024-07-17 08:15| 来源: 网络整理| 查看: 265

来源:雪球App,作者: 大数据量化分析,(https://xueqiu.com/1733473480/164976188)

可转债转股套利,一个月经贴经常出现在集思录上话题。

老韭菜会说,亏钱手艺。

没尝试过的新韭菜蠢蠢欲动,哇,-5%的折价,这套利真香。

昨天的小康转债溢价-4.5%,如果转股后今天的小康股份是这样的

一字板跌停开盘,如果套利开盘卖出,一碗-5.5%的大面。

最近的今飞转债也有人套利

几乎都是面。

今天的福莱特也差不多。

接下来,笔者利用python与量化平台的数据进行一个回测,可转债转股套利到底能否赚钱,期望收益是多少。

抛转引玉顺便教大家如何使用python做量化分析,也希望有经验的朋友可以互相交流讨论。

获取数据

因为量化平台的函数都大同小异(其实都是互相抄袭国外的量化平台吧),笔者挑一个优矿来回测。

可转债代码

首先要获取市场上所有可转债的代码

1df = DataAPI.MktConsBondPremiumGet(SecID=u"",tickerBond=u"",2                                   beginDate=u"20170101",3                                   endDate=u"20201203",4                                   field=u"",5                                   pandas="1")

beginDate=u"20170101",endDate=u"20201203", 这两个参数分别是在这段时间内的所有可转债数据。

得到的结果如下:

因为里面包含了一些可交换债,国债,那么先对数据进行清洗,只保留可转债。根据证券代码的前2位就可以过滤掉无用的数据。

深市可转债是12开头,沪市可转债是11开头。

那么过滤语句如下:

1cb_df = df.tickerBond.str.startswith(('12','11'))

上面是根据tickerBond这个字段(证券代码)进行过滤

过滤后的数据使用布尔选择取出来:

1cb_df_ = df[cb_df]

这样就得到了所有的可转债的数据了。

有一个字段bondPremDisc ,官方文档提示是 溢价率

1bondPremDisc    float   可转债折溢价,可转债收盘价-(转股价/正股价)*100

但笔者用回测平台返回的数据跟笔者日常抓取的历史数据有很大的出入:

量化平台返回的数据

像上面这个奇正转债,溢价率是25.5631%,日期是12月2日,而笔者自己获取的历史数据是31.2%,或者到集思录平台上查历史数据也是显示31.2%。

 个人自有数据

集思录数据

因为刚开始笔者也是用这个数据进去回测的,得到最后拿到结果后发现收益率是一个高的离谱的数据,所以在一步一步调试过程中发现它的这个溢价率数据是有问题的。

所以量化分析的第一步是先要确保数据的准确性,要在中间阶段就进行数据核对,一旦发现数据不对劲,就需要及时调整,不然后面的流程即使是对的,得到的结论也可能是错的。虽然过程很繁琐,但是却是很有必要的,拼的就是耐心。

所以不能使用上面的数据进行获取溢价率,但上面的数据可以获取所有的转债代码。

1ticker_list = cb_df_['tickerBond'].unique()

转股起始日

接下来要获取每个转债的转股起始日,因为在所有交易日中,不一定所有的交易日都是可以转股的,发行后的半年内是不能转股的。

1def filter_day(ticker):2    # 转股日3    convert_date = DataAPI.BondConvStockItemGet(secID=u"",ticker=ticker,bondID=u"",convID=u"",field=u"convStarttime",pandas="1")4    convert_date = convert_date['convStarttime'].values[0]5    return convert_date

上面接口提供的是转债基本数据,可以传入一个证券代码,然后就可以获取到转股时间

可转债溢价率

因为前面验证了之前那个溢价率数据是错误的,那么要想办法获取到证券的溢价率。

找到一个日线数据,里面居然也有一个溢价率的字段

1    bond_df = DataAPI.MktConsBondPerfGet(beginDate=beginDate,endDate=endDate,secID=u"",tickerBond=ticker,tickerEqu=u"",field=['bondPremRatio','closePriceBond','tradeDate','tickerEqu','secShortNameBond'],pandas="1")

得到数据与真实数据对比一下,结果是吻合的,那么就可以用上面的函数获取每一个转债的溢价率。

然后就把溢价率小于0的过滤出来:

1percent=02df = df[df['bondPremRatio']



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3