社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【中金转债】“利用”高估值:转债多空对冲策略的Python实践

中金固定收益研究 • 11 月前 • 690 次点击  


市场分歧没有往年大,毕竟高估值给市场带来的影响刚过去不久。当然,共识也不意味着更好做,就当下来看,资管机构普遍感到高估值让择券变得困难,达成客户期待相对较难。不过,如果思路稍打开,考虑可对冲的情况,我们也许有更多选择。目前,转债不能融资融券,但转债ETF则是融资融券标的,尽管余额不多 —— 但7月以来也大幅提高 —— 我们也可以探究其中的操作可能性。


图表1:可转债ETF融券余额情况

资料来源:Wind,中金公司研究部


由于与传统的择券、择时有诸多不同,我们专门设计了交易模块。比较不同的是,如果我们考虑融资融券,那么保证金、借入借出成本,以及对冲端(股指期货)需要考虑保证金、逐日结算及主力合约展期问题。因此,在此前转债策略的框架中比较难实现,我们要重新设计。在此限于篇幅我们不一一展示回测模块的实现,仅展示较为关键的回测函数,此处我们没有调用外部库,而是采取了更简单的设计:


图表2:回测框架代码示意


def run_backtest(self, strategy_func):
        # 重置状态,持仓、现金等
        self.reset() 
        for i, date in enumerate(self.trading_days):
             # 1. 检查期货展期
            for code in list(self.positions.keys()):
                if'.CFE'in code: # 检查所有期货代码
                    product = code[:2]
                    position = self.positions[code]
                    need_rollover, new_contract = self.check_rollover(product, date, code)
                    
                    if need_rollover and new_contract:
                        self.rollover_position(product, date, code, new_contract, position)
            
            # 2. 执行策略
            if hasattr(strategy_func, 'generate_signals'):
                signals = strategy_func.generate_signals(date)
            else:
                signals = strategy_func(date, self)
            
            if signals:
                for code, target_position in signals.items():
                    self.execute_trade(date, code, target_position)
            
            # 3. 期货每日结算(关键!必须在计算净值之前)
            self.daily_settlement(date)
            
            # 4. 计算组合价值
            portfolio_value = self.calculate_portfolio_value(date)
            self.total_value_history.append({
                'date': date,
                'total_value': portfolio_value,
                 'cash': self.cash,
                'positions': self.positions.copy()
            })
        return self.generate_report()


资料来源:中金公司研究部


可见此处有唯一外部参数,即策略变量,该变量必须有功能“generate_signals”。下面是一个示例,也是我们后来进行简单测试的函数。简单来说,这里利用已经计算好的“甜点率”数据(详见《转债择时体系1》),在甜点率颇高时,利用转债不对称性优势,买入转债ETF,用IM对冲,相反则融券卖出ETF,做多IM对冲风险。


图表3:考虑对冲信号的函数读取与应用示意


class use_cookie_rate:
    def __init__(self, backtest):
        self.backtest = backtest
        # 读取外部数据,甜点率
        self.indicator = pd.read_excel('甜点率.xlsx', index_col=0, parse_dates=True)

    def  generate_signals(self, date):
        '''关键功能函数'''
        signals = {}
        etf_price = self.backtest.get_current_price(self.backtest.etf_code, date)
        cookie_rate = self.indicator.loc[:date, '甜点率'].iloc[-1]
        # 选择IM的主力合约
        ic_contract = self.backtest._get_dominant_futures('IM', date) 
        ic_price = self.backtest.get_current_price(ic_contract, date) 

        if cookie_rate > 40:
            print('''甜点率大于40,多ETF,空股指期货''')
            delta = calc_delta(self.df, date) # 计算个券的加权平均Delta,以计算对冲比例
            available_cb_capital = nav * 0.9 / 1.09# 仅使用部分仓位
            etf_shares = int(available_cb_capital / etf_price / 100) * 100# 为取整 
            ic_shares = int(etf_shares * etf_price / ic_price / 200 * delta)
            signals[self.backtest.etf_code] = etf_shares
            signals[ic_contract] = -ic_shares

        elif cookie_rate 20:
            print('''甜点率小于20,空ETF,多股指期货''')
            available_cb_capital = nav * 0.9 / 1.09
            delta = calc_delta(self.df, date)
            etf_shares = int(available_cb_capital / etf_price / 100) * 100             
            ic_shares = int(etf_shares * etf_price / ic_price / 200 * delta)

            signals[self.backtest.etf_code] = -etf_shares
            signals[ic_contract] = ic_shares
        # 此外,我们设计了甜点率回到30,平掉当前头寸的设置
        # signals返回了我们的目标持仓,传入回测函数,执行指令
        return signals


资料来源:中金公司研究部


这样,我们可以得到中等收益、低风险、高卡玛比例的策略。执行效果如下,我们没有利用杠杆,仅仅利用80%左右的名义仓位。2022年8月至今(IM合约推出较晚),可以得到6.6%附近的年化回报,最大回撤仅2.9%附近。


图表4:对冲策略模拟净值净值

资料来源:Wind,中金公司研究部


我们的几个看法:

1、这显然是一个很粗糙的策略,可优化的空间很多。例如我们只是利用BS公式简单计算的delta,并考虑其beta来确定对冲比例,但显然不够精细。而IM能一直对冲转债吗?也许2024年以后是的,但更早的时候来看,转债还是有很多银行占去了很大权重,图中的最大回撤就来自那段时间的偏债转债抗跌,IM风格跑输的阶段。此外,上述策略自始至终只考虑了甜点率这一个指标。


2、它也许不能作为“主力策略”,但作为组合中的辅助策略有一定潜力。即便暂不考虑融券容量,这个策略也有着“出勤率不足”的问题,在估值不过高或者不过低的时候,这个策略都在空仓状态。但如果作为补充呢?下图为这个策略在空仓时,我们采用低价策略的一个测试。


图表5:叠加转债低价策略的表现示意

资料来源:Wind,中金公司研究部


3、我们更希望投资者借此能够更加理解:估值对转债的影响,并不是高点怕下降、低点博回升。这一点早在2021年《被遗忘的theta》就有所强调,近期不少投资者的印象又有所模糊。当时我们不建议投资者相信转债估值进入“新常态”,实际上既不是不看好后续的股市走势,也甚至不是认为估值会均值恢复,而是高估值不必下降,就已经压抑了转债的不对称性并抬高了时间成本 —— 因而不必下降,就会带来负面影响。反过来,即便由于种种原因,投资者认为估值不会下降,也不是在高估状态下继续做多转债的理由。


此外,我们也在此对十大转债更新,上个月整体平淡,但模型给出的选择仍很少(选择少本身也是主要结论),我们选入沪工、大中、芳源、宙邦、中能、宏图、美锦、闻泰、贵燃和科顺。偏量化的投资者也应注意,选择减少后组合的稳定性可能下降。



Source

文章来源


本文摘自:2025年11月21日已经发布的《“利用”高估值:转债多空对冲策略的Python实践》


杨冰  分析员 SAC 执证编号:S0080515120002  SFC CE Ref:BOM868

罗凡  分析员 SAC 执证编号:S0080522070003  SFC CE Ref:BUL744

陈健恒  分析员,SAC执业证书编号:S0080511030011 SFC CE Ref:BBM220




Legal Disclaimer

法律声明

特别提示

本公众号不是中国国际金融股份有限公司(下称“中金公司”)研究报告的发布平台。本公众号只是转发中金公司已发布研究报告的部分观点,订阅者若使用本公众号所载资料,有可能会因缺乏对完整报告的了解或缺乏相关的解读而对资料中的关键假设、评级、目标价等内容产生理解上的歧义。订阅者如使用本资料,须寻求专业投资顾问的指导及解读。

本公众号所载信息、意见不构成所述证券或金融工具买卖的出价或征价,评级、目标价、估值、盈利预测等分析判断亦不构成对具体证券或金融工具在具体价位、具体时点、具体市场表现的投资建议。该等信息、意见在任何时候均不构成对任何人的具有针对性的、指导具体投资的操作意见,订阅者应当对本公众号中的信息和意见进行评估,根据自身情况自主做出投资决策并自行承担投资风险。

中金公司对本公众号所载资料的准确性、可靠性、时效性及完整性不作任何明示或暗示的保证。对依据或者使用本公众号所载资料所造成的任何后果,中金公司及/或其关联人员均不承担任何形式的责任。

本公众号仅面向中金公司中国内地客户,任何不符合前述条件的订阅者,敬请订阅前自行评估接收订阅内容的适当性。订阅本公众号不构成任何合同或承诺的基础,中金公司不因任何单纯订阅本公众号的行为而将订阅人视为中金公司的客户。

一般声明

本公众号仅是转发中金公司已发布报告的部分观点,所载盈利预测、目标价格、评级、估值等观点的给予是基于一系列的假设和前提条件,订阅者只有在了解相关报告中的全部信息基础上,才可能对相关观点形成比较全面的认识。如欲了解完整观点,应参见中金研究网站(http://research.cicc.com)所载完整报告。

本资料较之中金公司正式发布的报告存在延时转发的情况,并有可能因报告发布日之后的情势或其他因素的变更而不再准确或失效。本资料所载意见、评估及预测仅为报告出具日的观点和判断。该等意见、评估及预测无需通知即可随时更改。证券或金融工具的价格或价值走势可能受各种因素影响,过往的表现不应作为日后表现的预示和担保。在不同时期,中金公司可能会发出与本资料所载意见、评估及预测不一致的研究报告。中金公司的销售人员、交易人员以及其他专业人士可能会依据不同假设和标准、采用不同的分析方法而口头或书面发表与本资料意见不一致的市场评论和/或交易观点。

在法律许可的情况下,中金公司可能与本资料中提及公司正在建立或争取建立业务关系或服务关系。因此,订阅者应当考虑到中金公司及/或其相关人员可能存在影响本资料观点客观性的潜在利益冲突。与本资料相关的披露信息请访http://research.cicc.com/disclosure_cn,亦可参见近期已发布的关于相关公司的具体研究报告。

本订阅号是由中金公司研究部建立并维护的官方订阅号。本订阅号中所有资料的版权均为中金公司所有,未经书面许可任何机构和个人不得以任何形式转发、转载、翻版、复制、刊登、发表、修改、仿制或引用本订阅号中的内容。



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/189526