Python量化研究——可转债打新能赚钱吗?

注:收益率的计算方式为(新债上市第一天的开盘价 – 面值100)/100
前期数据处理
# 导包import tushare as tsimport pandas as pd%matplotlib inlineimport matplotlib.pyplot as pltimport seaborn as snssns.set_style('white',{'font.sans-serif':['simhei','Arial']})plt.rcParams['axes.unicode_minus'] = False data = https://www.30zx.com/pd.read_csv("./data/daxin.csv",index_col = 0)
收益率分析
lose_size = round((data.profit0).mean(),4)*100median = data.profit.median()fig,ax = plt.subplots(figsize=(9,6))fig.text(x=0.13, y=0.90, s='可转债打新收益分布',fontsize=32, weight='bold', color='white', backgroundcolor='#3c7f99')sns.kdeplot(data.profit,shade=True,legend=False,ax=ax)plt.vlines(0,0,4.5,colors="black")plt.vlines(0.015,0,4.7,linestyles='dashdot',colors="b")plt.box(False)plt.yticks([])plt.tick_params(axis='both', which='major', labelsize=16,bottom=False)ax.annotate('{}%'.format(lose_size), (-0.05, 1.5),xytext=(0.2,0.5), textcoords='axes fraction',arrowprops=dict(facecolor='g', shrink=0.05),fontsize=16,color = "g",horizontalalignment='right', verticalalignment='top')ax.annotate('{}%'.format(win_size), (0.17, 1.5),xytext=(0.8,0.5), textcoords='axes fraction',arrowprops=dict(facecolor='r', shrink=0.05),fontsize=16,color = "r",horizontalalignment='right', verticalalignment='top')ax.annotate('盈亏分界线', (0, 1.5),xytext=(-0.1,3.5), textcoords='data',fontsize=16,color = "black",)ax.annotate('峰值=1.5%', (0.02, 1.5),xytext=(0.02,2), textcoords='data',fontsize=16,color = "b",)
先看一下可转债打新的收益率分布状况,整个收益率呈微右偏分布 , 峰值大概处于1.5%的位置 , 说明大多数的可转债打新收益率集中在这附近 。图中收益为0处为盈亏分界线 , 分界线左侧的阴影面积代表了亏损的概率为27.32%(考虑到手续费等因素,这里把亏损的和不亏不赚的都设定为亏损),与之对应的盈利概率为72.68% 。总体而言,可转债打新的赢面还是比较大的(当然不同风险接受能力的人会有不同看法) 。
大概清楚可转债打新的盈亏分布并综合考虑各方面的风险后,如果想要进一步参与的话,就该研究一下选择哪些可转债可以有更高的胜率和收益率,下面就一些可能的影响因素进行分析 。
公司市值与收益率关系
fig,ax = plt.subplots(figsize=(9,6))fig.text(x=0.03, y=0.91, s='收益率与发债公司市值的关系',fontsize=32, weight='bold', color='white', backgroundcolor='#3c7f99')sns.scatterplot(x = "total_mv", y ="profit",data=https://www.30zx.com/data)plt.hlines(0,xmin=-1,xmax=4000,colors="black")plt.tick_params(axis='both', which='major', labelsize=16,bottom=False)plt.grid()plt.xlabel("市值(亿元)",fontdict={"size":16})plt.ylabel("收益率",fontdict={"size":16})
收益率和发债公司的大?。ㄕ饫镉檬兄道春饬浚┯惺裁垂叵德穑渴遣皇鞘兄翟酱蟮墓酒淇勺蛐率找媛试礁撸肯旅娴氖莞嫠吣?。
绘制了收益率和公司市值的散点图后发现,大多数的发债公司的市值较?。挥?-250亿这个区间,当市值大于500亿时,只有两个可转债的打新收益为负,大多数的收益在5%以上 , 最大的亏损为5% 。为了更清楚地看看公司市值在0-500亿这个区间内的收益情况 , 下面把该区间放大了看 。
fig,ax = plt.subplots(figsize=(12,8))fig.text(x=0.04, y=0.91, s='收益率与发债公司市值的关系(0-500亿)',fontsize=32, weight='bold', color='white', backgroundcolor='#3c7f99')sns.scatterplot(x = "total_mv", y ="profit",data=https://www.30zx.com/data[data["total_mv"]<=500])plt.hlines(0,xmin=-1,xmax=500,colors="black")plt.vlines(200,ymin=-0.1,ymax=0.28,colors="r")plt.tick_params(axis='both', which='major', labelsize=16,bottom=False)plt.grid()plt.xlabel("市值(亿元)",fontdict={"size":16})plt.ylabel("收益率",fontdict={"size":16})
把区间放大来看之后 , 还是可以看到比较明显的正相关性的,尤其是当市值大于200时(图中红线往右) , 所有可转债的打新收益均为正 。所以,从市值的角度来看,虽然并不能得到市值越高收益率越高的结论,但在参与可转债打新时,如果想承担较小的风险,选择200亿以上市值的公司较为安全,相应的胜率更高 。
板块与收益率的关系
目前的上市公司所处板块可以划分为主板、中小板以及创业板,主板市场主要是一些大型的蓝筹企业,中小板则包括一些中型稳定发展的企业,创业板则主要是科技成长型企业 。不同板块的公司对应的风格有所不同,那这对可转债打新收益有影响吗?
fig,ax = plt.subplots(figsize=(9,6))fig.text(x=0.02, y=0.91, s='收益率与公司所处板块的关系',fontsize=32, weight='bold', color='white', backgroundcolor='#3c7f99')sns.boxplot(x = "profit",y = "market",data=https://www.30zx.com/data,order=["主板","中小板","创业板"])sns.swarmplot(x = "profit",y = "market",data=https://www.30zx.com/data,order=["主板","中小板","创业板"],color="black")plt.tick_params(axis="both",labelsize=16)ax.xaxis.grid(which='both', linewidth=0.75)plt.box(False)plt.xlabel('收益率', fontsize=16)plt.ylabel('所处板块', fontsize=16)
如果以中位数来代表整体收益率,则不同板块整体收益率创业板>中小板>主板 。创业板和主板的公司所对应的收益率下四分位均位于0处,说明这两个板块上,胜率均达到了75% 。从最坏的结果来看,创业板的公司最大亏损幅度居首为-10% , 其波动率相对其他两个板块也较大 。总结来说,位于创业板的公司虽整体收益较高,但需要承担的风险也较大 。
行业与收益率的关系
接下来研究一下收益率是否具有行业效应总资产利润率较小的原因是什么,由于有些行业样本量较小,在这里给予剔除 , 选取5个样本以上的行业,看看其收益率(中位数)排名 。
industry = [industry for industry,df in list(data.groupby("industry")) if len(df)>=5]industry_df = data[data.industry.isin(industry)]fig,ax = plt.subplots(figsize=(12,8))fig.text(x=0.06, y=0.92, s='各行业对应的打新收益率前十(中位数)',fontsize=32, weight='bold', color='white', backgroundcolor='#3c7f99')industry_order = industry_df.groupby("industry")["profit"].median().sort_values().index.tolist()[2:]sns.barplot(x="industry", y="profit", order=industry_order, data=https://www.30zx.com/industry_df, estimator = np.median,ci = None,palette="RdBu_r")plt.tick_params(axis="both",labelsize=16,)ax.yaxis.grid(which='both', linewidth=0.5, color='black')plt.box(False)plt.xlabel('')plt.ylabel('')
从行业的角度来看,软件服务、食品行业的可转债打新收益大幅领先于其他行业 。虽受制于样本较少,入选的行业仅有12个,代表性相对较差,但将此处的行业效应和上方的板块效应相结合,在进行可转债的选择时具有一定的参考意义 。
收益率的时间效应
上面从市值、行业和板块的角度进行了分析,下面从时间的角度,看看打新收益率是否具有时间效应,如不同月份的打新收益和胜率是否有明显的不同 。
heatmap_df = data.groupby("month")["profit"].describe().sort_index().drop(columns = "count")fig,ax = plt.subplots(figsize=(10,8))sns.heatmap(heatmap_df,cmap="RdBu_r",center=0,annot=True,annot_kws={'fontsize':14})plt.tick_params(axis='x', which='major', labelsize=16)plt.tick_params(axis='y', which='major', labelsize=16,labelrotation=0)plt.xlabel(""),plt.ylabel("")
上方的热力图显示了12个月份的收益率的主要统计量 。从整体收益来看,不论是用均值还是中位数来表示该月份的整体收益情况,可以比较明显地看出,3月、4月和9月的收益水平较高,同时5月、6月以及8月整体收益水平较低 。从本金安全性(最小值)来看总资产利润率较小的原因是什么,2月、3月、8月、10月和11月的最大亏损均小于1% 。综合收益情况和需要承担的风险,如果想要进行可转债的打新 , 从时间的角度来看,比较适合的时间是2-4月以及10-12月这两个时间段 。
注:以上分析仅供参考,不构成任何投资建议!
【Python量化研究——可转债打新能赚钱吗?】本文到此结束,希望对大家有所帮助!

猜你喜欢