量化实战入门(14)可转债低转股溢价率轮动策略二

量化回测实例:可转债低转股溢价率轮动策略二(附程序代码)
01

策略评价
我们可以从以下几个方面对策略进行评价:
总收益率:表示投资策略在整个投资期间的累计收益。
年化收益率:将策略的总收益转化为年化形式,以便在不同的投资期间进行比较。
最大回撤:策略历史上回撤的最大值,反映历史上出现的最大亏损。
夏普比率 :衡量策略承担单位风险所获得的超额回报。
下面我们用empyrical库来计算相关的评价指标,empyrical是一个开源的金融指标库,通过调用empyrical中的函数,只需一行代码即可计算相关的金融指标。

  1. 计算总收益率:
    用empyrical库的cum_returns_final函数计算总收益率:
    results = pd.Series() # 用于存放评价指标计算结果
    returns_final = ep.cum_returns_final(returns=results_df[‘月收益率’])
    results.loc[‘总收益率’] = f'{round(returns_final*100, 2)}%’ # 保留2位小数
  2. 计算年化收益:
    用empyrical库的annual_return函数计算年化收益率:
    annual_return = ep.annual_return(returns=results_df[‘月收益率’], period=’monthly’)
    results.loc[‘年化收益率’] = f'{round(annual_return*100, 2)}%’ # 保留2位小数
  3. 计算最大回撤:
    用empyrical库的max_drawdown函数计算最大回撤:
    max_drawdown = ep.max_drawdown(returns=results_df[‘月收益率’])
    results.loc[‘最大回撤’] = f'{round(max_drawdown*100, 2)}%’ # 保留2位小数
  4. 计算夏普比率:
    用empyrical库的sharpe_ratio函数计算夏普比率:
    sharpe_ratio = ep.sharpe_ratio(returns=results_df[‘月收益率’], period=’monthly’)
    results.loc[‘夏普比率’] = round(sharpe_ratio, 2) # 保留2位小数
    计算完成后用 print(results) 来查看评价结果:
    总收益率 897.43%
    年化收益率 50.97%
    最大回撤 -18.08%
    夏普比率 1.82
    从评价指标来看,低转股溢价率策略虽然简单,但在历史上取得了不俗的投资效果,策略的总收益率达到 897.43%,年化收益率达到50.97%,夏普比率达到1.82,同时策略最大回撤为18.08%,这是在回测的时间段中出现的最大亏损。
    02

可视化分析
可视化分析的好处是能够直观的观察策略的效果。使用quantstats库可以简单便捷的对策略进行可视化分析,只需一行代码即可生成一篇可视化分析报告:
qs.reports.html(returns=results_df[‘月收益率’], benchmark=results_df[‘月收益率_基准’], periods_per_year=12)
上述代码生成一篇 html 格式的全面、美观、专业的可视化分析报告,我把这篇报告附在文章的最后。
由此可见,Python有很多开源的、优秀的量化工具库,借助这些量化工具库,即便是初学者,也可以用少量的简单的代码,实现专业的、强大的功能。在后续的文章中还会对empyrical库和quantstats库进行详细的介绍。
03

回测框架的优化
本文以可转债低转股溢价率策略为例,介绍了量化系统中数据获取、策略开发、策略回测、策略评价、可视化分析等几个部分,限于篇幅,这个回测框架在细节上并没有做得很完善,至少还有以下几个地方可以优化:

  1. 数据的本地存储
    本例中的数据采用了在线获取的方式,在线获取的缺点一是耗时长,二是容易遇到网络故障或网站限制导致获取失败。更好的方法是对数据进行本地化存储并定期更新,在回测时从本地获取数据。
  2. 数据清洗
    由于数据源的原因或网络错误的原因,获取的数据有可能出现缺失值、重复值、错误值等情况,因此需要先对数据进行清洗,以保证数据质量。
  3. 处理交易限制
    股票、可转债等标的可能会出现停牌、涨停、跌停等,在这些情况下交易是受到限制的,回测框架应该能处理这些情况,让回测更符合实际情况。
  4. 更合理的成交价格
    本例按月末最后一个交易日的收盘价作为调仓的成交价格,这是一种简化的处理,实际中很难做到,回测框架应该使用更合理的成交价格,比如一天中开盘后5分钟内的均价,或收盘前5分钟内的均价等。
  5. 避免未来数据
    本例按月末最后一天的转股溢价率来进行择券,但某天的转股溢价率数据是收盘后才能得到,盘中并不能得到,因此策略中涉及使用了未来数据。更合理的方法是以收盘前一段时间的转股溢价率为调仓依据。
  6. 回测不同的持仓数量
    本例按持有20只可转债进行回测,持仓数量并不多,受偶然因素的影响比较大,我们应该选择不同的持仓数量进行多次回测,比较这些回测的差异,以确定策略是否真的有效。
  7. 避免日历路径的依赖
    本例是按月调仓,调仓时间是月末最后一天,如果在历史上正好某次月末出现大涨或大跌,这种偶发情况会对策略产生较大的影响。更合理的方法是分别选择在每月的第1天、第2天……第30天进行调仓,得到30个回测结果,然后综合这30个回测结果来评价策略的有效性。
  8. 完善策略评价和因子评价
    本节简单介绍了如何对策略进行评价和分析,但如果仅凭这几个评价指标就进行实盘操作是十分草率的,我们应该对策略进行更全面的评价。而且,我们还要对“转股溢价率”这个因子进行单独的评价和分析。综合这些评价和分析,才能得出更理性的结论。
    量化实战入门(14)可转债低转股溢价率轮动策略二

量化实战入门(14)可转债低转股溢价率轮动策略二

发布者:爱吃肉的小猫,转载请注明出处:https://www.95sca.cn/archives/45576
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
爱吃肉的小猫的头像爱吃肉的小猫
上一篇 2024 年 6 月 20 日 上午9:54
下一篇 2024 年 6 月 20 日 上午10:06

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注