10行Python搞定可转债分组回测

因子回测的文章发出后,又有几个朋友跟我要代码,写篇小文回复一下。

先直接给出代码,这次比上次的回测更简单,只要10行就可以了。

def group_analysis(factor,forward_return,num=5,title=""):    
cutfactor=factor.rank(axis=1).apply(lambda x:pd.qcut(x,num,range(1,num+1)),axis=1)
result=pd.DataFrame()
for group in range(1,1+num):
    group_return=forward_return[cutfactor==group].sum(axis=1)/(cutfactor==group).sum(axis=1)
    result[group]=group_return
result['base']=(forward_return[~factor.isna()]).sum(axis=1)/(~factor.isna()).sum(axis=1)
(result+1).cumprod().plot(figsize=(12,5),grid=True,title=title);
return result
group_analysis(premdf,day_return,title="溢价率");


在运行本文中的代码前,我假定你已经搞定了上一篇中回测代码的运行,本文中用到的数据与上一篇中完全相同,你需要根据上一篇的内容,先自行构造出premdf(溢价率因子)与day_return( 向前移一天的日收益率)两组数据,具体细节这里不再重复了。

接下来对代码逐行做下解释:

1、定义一个叫group_analysis的函数,需要传入以下参数:因子表factor;收益率表forward_return; 分组数num, 默认为5; 绘图标题, 默认为空。

2、这里用到了pandas自带的两个函数,先用rank函数处理每行数据,得到从小到大排列的序号;再用qcut函数把得到的序号分成5组(实际是num组,为简化描述,后面按5组表述)。这样我们就得到了一张表,这张表的所有值都是1、2、3、4、5或NaN, 代表了它每天属于哪一个分组,NaN表示没有上市交易或已退市。

3、定义一个叫result的表,用来保存计算结果。

4、从1到5循环计算

5、算出每组的平均日收益率序列

6、将每组的平均日收益率序列保存到结果表中,列名为组号

7、计算所有转债的平均日收益率序列并保存到结果表中,列名为base

8、把收益率加1后逐日连乘,就是你们喜闻乐见的净值曲线了,画张图展示

9、把结果表返回一下,方便后面做其他计算

10、以上9行写完了函数,最后一行就是用法,把premdf和day_return传进去,再指定画图标题是“溢价率”,就得到了如下的结果。如果你想分析别的因子,只需要把因子表换一下就可以了。



不多不少,正好10行,需要的拿走。

《20行Python搞定可转债回测》
https://mp.weixin.qq.com/s/ZGth6LLZZQYkpvY11W20Pw
《转债因子全回测》
https://mp.weixin.qq.com/s/RRFpmluNbvR4LPSviCEYaA
《转债因子全回测-续》
https://mp.weixin.qq.com/s/7YsfrGLbfQgSxopwsIWx-A
58

wanghc02

赞同来自: tuoersitai 占位符 小番茄黄瓜 hydk 甘泉 quantech darklifes IMWWD 明园 北冥有鱼L hzy7413 bigfish1006 mawei8888 钮钴禄茜央娜迪 hannon 王总 浪花1990 gxyc bhysz ppppp74 adodo 集XFD 语晕晕 bossnk newbison 塔格奥 本德莱耀西 wygd1 昕哲 巴兰 izmh Tryit2021 骑蜗牛士 llqzxh 奇乐文化 haohaoxuexi magelfly shplhy 抖腿狂魔 vickydai tongzhangji 帕先奴 背着行囊去远方 二零20大吉大利 包包123 面包 dhhlys Ake90 linfeng 等待等待牛市 atu321 wolfcaaa uime jackymin001 钟爱一玉 GLZ0514 传达室李老伯 Aspirin更多 »

没想到纯分享的东西也会有人怼,没想怼回去,只想对挺我的集友说:不值得浪费时间争论。集思录有宝藏,也有垃圾,遇到宝藏认真研究,遇到垃圾绕道走就是了。大家都时间宝贵,辩个是非曲直耽误赚钱。
2021-11-27 22:13 引用

要回复问题请先登录注册

发起人

问题状态

  • 最新活动: 2021-11-28 12:01
  • 浏览: 14218
  • 关注: 284