做可转债这么多年,我发现很多人买债只看价格,不看溢价率。这就好比买东西只看标价,不看实际价值,很容易买贵了还不知道。今天用Python代码把溢价率算清楚,顺手再做个归一化处理,方便多只债放在一起比较。
先搞懂转股溢价率是什么意思
转股溢价率说白了就是,这只转债的市场价格,比它理论上能转换成的股票价值,贵了多少。
计算公式是这样的:
转股溢价率 = (现价 - 理论转股价值)/ 理论转股价值
理论转股价值的算法也很简单:
理论转股价值 = 100 / 转股价 × 正股价
举个例子。某只转债现价110元,转股价1.1元,正股价10元。理论转股价值就是100除以1.1再乘以10,等于100元。溢价率就是(110-100)/100=10%。
溢价率越高,说明这只债相对于正股越贵。溢价率越低,说明定价越接近正股价值,转债跟涨正股的弹性就越大。
第一步,准备数据,写代码计算溢价率
先把需要的数据准备好,三列就够了,现价、转股价、正股价。
import pandas as pddata = { '现价': [110, 120, 130, 140, 150], '转股价': [100, 110, 120, 130, 140], '正股价': [10, 11, 12, 13, 14]}df = pd.DataFrame(data)# 计算转股溢价率df['转股溢价率'] = (df['现价'] - 100/df['转股价']*df['正股价']) / (100/df['转股价']*df['正股价'])print(df)
现价 转股价 转股溢价率0 110 100 0.101 120 110 0.092 130 120 0.083 140 130 0.074 150 140 0.07
溢价率从0.10到0.07,一眼就能看出哪只债更贵,哪只更有弹性。
第二步,归一化处理,让不同的债放在一起好比较
算出来的溢价率数值,直接拿来比较其实没问题。但如果你想把溢价率和其他指标放在一起做综合评分,就需要归一化处理,把所有数据统一换算到0到1之间。
这个操作叫Min-Max缩放,原理很简单,就是把最小值变成0,最大值变成1,中间的按比例换算。
def scale(df, column_name): min_val = df[column_name].min() max_val = df[column_name].max() df[column_name + '_scaled'] = (df[column_name] - min_val) / (max_val - min_val) print(df) return dfdf = scale(df, '转股溢价率')
跑完之后多了一列"转股溢价率_scaled",数值全在0到1之间:现价 转股价 转股溢价率 转股溢价率_scaled0 110 100 0.10 1.0000001 120 110 0.09 0.6666672 130 120 0.08 0.3333333 140 130 0.07 0.0000004 150 140 0.07 0.000000
第三步,按溢价率排序,低溢价的排在前面
最后一步,按归一化后的溢价率从低到高排序,溢价率低的排在最前面,方便找弹性最大的债。
df = df.sort_values(by='转股溢价率_scaled', ascending=True)print(df)
排完序之后,溢价率最低的债自动跑到最上面,一目了然。
这段代码能用来做什么
这三步代码组合在一起,可以批量处理几百只转债的数据,几秒钟算出所有债的溢价率并排好序。不用一只一只手动去查,效率高很多。
我自己在做可转债轮动策略的时候,溢价率是最常用的筛选指标之一。低溢价的债跟正股联动更紧,正股一涨转债跟得快。高溢价的债跟得慢,买进去等半天可能涨幅还不如直接买正股。
量化的核心不是代码有多复杂,而是把判断逻辑变成可以重复执行的规则。这段代码就是把"挑低溢价债"这个动作,变成了一个可以每天自动跑的筛选器。
最后,可能有些新手朋友会问,这个溢价率排序有什么用,这个就可以关注我看其他的相关文章了,这里就不再多少。
风险提示:本文内容仅供学习交流,不构成任何投资建议,市场有风险,操作需谨慎。