4、双低值计算:从定义到实战

双低策略的核心,说白了就一个东西——双低值

我刚开始做可转债量化的时候,市面上还没有「双低」这个说法。大家要么看价格,要么看溢价率,很少有人把两者结合起来。后来有个前辈跟我说:「你想想看,价格低但溢价高的债,跟价格高但溢价低的债,哪个更安全?」这个问题让我琢磨了好几天。

嗯,双低值就是用来回答这个问题的。

4.1 双低值的定义与公式

双低值的公式非常简单:

双低值 = 可转债价格 + 转股溢价率 × 100

注意,这里的转股溢价率是百分比数值。比如溢价率是 20%,公式里就用 20,而不是 0.2。

举个例子:

  • 某转债价格 105 元,转股溢价率 15%
  • 双低值 = 105 + 15 = 120

为什么这么算?我个人的理解是:价格代表债性保护,溢价率代表股性弹性。两者相加,就是一个综合的「性价比」指标。

核心逻辑:

  • 双低值越低 → 性价比越高 → 越值得买入
  • 双低值越高 → 性价比越低 → 越应该回避

我在项目中遇到过一个问题:有些转债价格极低(比如 80 元),但溢价率奇高(比如 200%)。双低值算出来是 280,看起来很高,但其实这种债有债底保护,风险并不大。所以后来我加了一个价格下限过滤,低于 90 元的债直接剔除。

避坑指南:

我曾经吃过一次亏——只盯着双低值排序,没注意剩余期限。有个双低值 110 的转债,看起来不错,结果还有 3 个月就到期了,价格一直趴着不动。后来我加了一条规则:剩余期限必须大于 1 年。

4.2 双低值的 Python 实现

讲完理论,咱们直接上代码。我习惯用 pandas 来处理数据,干净利落。

import pandas as pd
import numpy as np

def calc_double_low(df):
    """
    计算双低值
    df 必须包含列:'price', 'premium_rate'
    premium_rate 是百分比数值,如 15.2 表示 15.2%
    """
    # 计算双低值
    df['double_low'] = df['price'] + df['premium_rate']
    
    # 添加过滤条件
    df['valid'] = (
        (df['price'] >= 90) &           # 价格不低于 90
        (df['price'] <= 150) &          # 价格不高于 150
        (df['premium_rate'] >= 0) &     # 溢价率非负
        (df['premium_rate'] <= 100)     # 溢价率不超过 100%
    )
    
    # 只保留有效数据
    result = df[df['valid']].copy()
    result = result.sort_values('double_low')
    
    return result

# 示例数据
data = pd.DataFrame({
    'code': ['123456', '123457', '123458'],
    'price': [105.3, 112.8, 98.6],
    'premium_rate': [15.2, 8.7, 35.4]
})

result = calc_double_low(data)
print(result[['code', 'price', 'premium_rate', 'double_low']])

输出结果:

     code   price  premium_rate  double_low
0  123456  105.3          15.2       120.5
1  123457  112.8           8.7       121.5
2  123458   98.6          35.4       134.0

你看,代码其实就几行。但这里有个细节:排序后,双低值最小的就是最优标的。上面这个例子,123456 的双低值最低,理论上最值得关注。

个人经验:

我建议把双低值排名和价格排名、溢价率排名一起看。有时候双低值排名第 1 的债,价格可能已经涨到 130 以上了,这时候追进去风险不小。我一般会要求双低值排名前 20 的债,价格不超过 120 元。

4.3 双低值的可视化分析

光看数字不够直观。我习惯把双低值画成散点图,一眼就能看出哪些债值得关注。

下面这张图展示了双低值的核心逻辑:

双低值可视化分析框架 可转债价格 转股溢价率 双低值=120 双低值=150 双低值=180 优质区 价格低+溢价低 关注区 需进一步分析 风险区 价格高或溢价高 优质标的 关注标的 风险标的

这张图怎么看?我解释一下:

  • 横轴:可转债价格,越低债性保护越强
  • 纵轴:转股溢价率,越低股性弹性越好
  • 虚线:双低值等高线,同一条线上的债双低值相同

你想想看,左下角的债(价格低、溢价低)双低值自然就低,这就是我们要找的「黄金坑」。右上角的债(价格高、溢价高)双低值高,风险较大。

实际分析中,我还会加一个时间维度。比如把过去 30 天的双低值走势画出来,看看哪些债的双低值在持续下降——这说明它在变得越来越便宜。

import matplotlib.pyplot as plt

def plot_double_low_trend(df, code):
    """
    绘制某只转债的双低值走势
    """
    bond = df[df['code'] == code].copy()
    
    plt.figure(figsize=(10, 5))
    plt.plot(bond['date'], bond['double_low'], 
             color='#3498db', linewidth=2, marker='o')
    plt.title(f'{code} 双低值走势', fontsize=14)
    plt.xlabel('日期')
    plt.ylabel('双低值')
    plt.grid(True, alpha=0.3)
    plt.axhline(y=120, color='red', linestyle='--', 
                label='双低值 120 警戒线')
    plt.legend()
    plt.show()

实战要点总结:

  1. 双低值 = 价格 + 溢价率 × 100,越低越好
  2. 计算时注意过滤:价格不低于 90,溢价率不超过 100%
  3. 可视化时关注左下角区域,那是优质标的聚集地
  4. 结合时间序列看趋势,双低值持续下降的债值得重点跟踪

嗯,双低值的计算和可视化就讲到这里。记住一个原则:双低值不是万能的,但没有双低值是万万不能的。它帮我们快速缩小选债范围,但最终决策还需要结合其他指标。


专注资料整理