专业策略分析——归母净利润暴增轮动策略思想
由bqy53ve0创建,最终由bqy53ve0 被浏览 86 用户
特别注意:本策略在编写和优化时基于当时的未更新的财务因子字段,目前该数据和字段经过了更新和错误修正。故目前利用本策略的代码尽管可以运行,但回测结果与文中的差异很大,效果大不如从前,以目前的数据回测结果为准,深表歉意。但本文介绍的策略编写思路和参数优化过程仍然值得学习,读者可以参考该思路进行策略编写。
\
1.市场观察和机会发现
在量化交易中,基本面是至关重要的一部分。它能提供关于公司财务状况、行业前景等关键信息,帮助量化投资者确定交易标的的内在价值,为量化模型提供基础数据和逻辑依据,使模型能更精准地筛选股票,把握市场趋势,降低投资风险并提高交易策略的有效性。基本面的指标因子较多,为研究基本面各因素的有效性和寻找更合适的策略、寻觅交易良机提供了许多角度。
一种常见思路是聚焦于财务稳健增长的股票,去筛选净利润增长指标和收益率稳定的公司,以一段周期去轮动,力求捕捉这些股票和公司的成长性机会。
首先进行一些基本面筛选,选择最近三年净利润增长率大于0.2,最近三年归属母公司净利润增长率大于0.2且最近三年毛利率大于0.2的股票,并购买满足这些条件的市值最小的三只股票,每周进行轮动。下图是该策略在一段时间内的回测收益:
上述回测周期包含大约1100个交易日,通过回测可以发现,日均满足基本面筛选要求的股票大约为200只,占A股市场的3.4%,是个比较严格的筛选条件,这样选出的股票也常常被认为是基本面良好的股票,符合投资者的一般认知。回测结果显示,策略在2021年到2023年下半年前跑出了略高于大盘的收益,从2023年底开始连续捕捉到了几次机遇,在2024年跑出了惊人的收益。不过拉长周期,这样的策略收益大大降低,回撤也升高,不过仍然远高于大盘,这说明这样的基本面选股条件具有研究的价值。
2.策略想法与假设提出
在上面的策略回测和初步研究中,我们利用最近三年净利润增长率、最近三年归属母公司净利润增长率、最近三年毛利率这三个衡量基本面的指标来对股票池进行了选择。一个容易产生的想法是,这三个指标内部有一定联系么?或者说,有没有哪个指标可以作为最根本的因素。一个最极端的思想是,分别用三个条件单独筛选股票池,看看它们对应的策略收益如何。
在大多数投资者的认知里,年毛利率达到20%、30%,各种净利润增长率在3年内翻一番,年收益提高一半,就似乎意味着公司的前景非常良好,经营非常稳定了。能不能考虑点更加极端的例子呢?
第一个考虑的指标是三年净利润增长率,令人惊人的是竟然有大约1/300的公司三年的净利润增长了30倍(平均每天有大约20只满足),于是我们自然希望考察这样的股票究竟效果如何?
在满足要求的股票中选择市值最小的几只股票进行轮动,跑一个较长的周期,但无论换仓周期设置较短或较长,回测结果豆豆非常不尽人意,这说明仅仅利用净利润增长率筛选暴利的公司无法获得好的收益,也反映了净利润增长率过于夸张的公司直接进行轮动风险较大,收益也不稳定。
第二个基本面指标是三年毛利率,筛选三年毛利率超过30,结果发现在15年的周期内,曾经满足过三年毛利率大于30倍的股票也仅有6只,这说明研究“爆炸毛利率”这条路径不可行。
最后一个指标是 net_profit_to_parent_shareholders_ttm_yoy ,其含义归属于母公司所有者的净利润(滚动十二期,同比增长),即三年归属于母公司所有者的净利润同比增长率。同样的,筛选归属于母公司所有者的净利润三年超过30倍的公司,发现数量也不少。
不过,相较于三年净利润增长率大于30的那部分股票的回测结果,三年归属于母公司所有者的净利润同比增长率大于30的股票在10多年的区间内竟然直接跑出了年化30多,不过有大约45个百分点的回撤,如下图。
归母净利润增长率很高的公司往往拥有具有竞争优势的产品或服务,能在市场中占据较大份额,通过提高售价或增加销量实现收入快速增长,进而推动净利润增长。所处行业处于快速发展阶段,市场对其产品或服务的需求持续增加,为公司业绩增长提供了广阔空间,可以获得市场投资者的信赖。更重要的是,高增长率可提升公司市场形象和声誉,吸引更多投资者关注和认可,增加股票流动性和市场估值水平,形成良性循环。
股利贴现模型认为——股票的价值等于其未来预期股利的现值之和。公司净利润的增长通常会增加其分红的能力和可能性,归属母公司净利润增长率高,意味着未来可能有更多的利润用于分配股利。根据股利贴现模型,预期未来股利增加会提高股票的内在价值,从而吸引投资者购买该股票。
成长型投资策略侧重于寻找具有高增长潜力的公司。归属母公司净利润增长率高的公司往往被视为具有良好的成长前景。成长型投资者相信,通过投资于这些公司,随着公司的成长和盈利的增加,股票价格将会大幅上涨,从而获得高额回报。
从历史的角度看,2011 年工信部调整中小企业划型标准,增加微型企业标准,出台扶持小微企业发展的金融、财税等政策,安排资金支持担保机构发展、中小企业技术改造和新兴产业发展,这为中小企业发展提供了良好环境,一些利润率较高的中小企业得以更好地发展,提高了盈利水平和归母利润率。2014 年通过设立铁路发展基金、发行铁路建设债券并实施所得税优惠政策、引导金融机构支持等措施,推动铁路建设。相关铁路企业如中国北车,受益于动车组订单增加和业务毛利率提升,业绩增长,归母利润率也得到提高。
3.策略逻辑编写
3.1策略思想
3.1.1超高成长性指标
使用归属于母公司所有者的净利润(滚动十二期,同比增长)对股票池进行严苛的筛选条件,这是筛选条件中最重要的参数。第二个参数为经营活动产生的现金流量净额(滚动十二期,同比增长)。初始设置为归属于母公司所有者的净利润(滚动十二期,同比增长)大于10,经营活动产生的现金流量净额增长率net_cffoa_ttm_yoy大于0.1
- net_profit_to_parent_shareholders_ttm_yoy
- net_cffoa_ttm_yoy
3.1.2市值筛选:
流通市值需要在一定范围内,市值较高的公司获得暴利可能是市场发生巨大变化,具有偶然性,也可能有操盘手在操纵股市。流通市值过低的公司风险较高。初始限制市值在5亿到60亿之间
- float_market_cap
3.1.3其他筛选条件:
- 非st股:避免购买有退市风险的股票
- 上市时间:超过252天(一年),避免高风险股票。
- list_sector NOT IN (3,4, 0) 剔除科创板和北交所的股票、排除掉退市股。创业板有成长型创新创业企业,不予剔除。
- 对选出的股票按照市值从小到大升序排列,选取前3名进行投资。
3.2回测设置
- 回测时间:从 2014 年 1 月 1 日至 2025 年 4 月 15 日。
- 初始资金:1,000,000 元
- 交易频率:rebalance_days:初始设置为5天(每周)调仓
4.历史数据回测分析
对该策略从2014年元旦节开始回测,市场为全中国股票市场(A股市场),起始资金100万元。14年多来,累计收益率达5672.1%,年化收益45.15%,夏普率高达1.14,最大回撤为49.26%,几乎全盘都跑赢了指数。不过该策略也并不是完全没有问题,该策略在2018年、2022年第一季度、2023年年底遭遇了几次较大的回撤。不过整体上看,这是一个还不错的策略。
由于策略的参数如持股数量、交易频率等参数的设置对策略收益和回撤的影响较大,需要在后续中进行确认,在11年的漫长回测周期中,年化收益很高,但主要集中在几段周期内,在其他较长的周期内可能收益不是足够理想,除此之外,最大回撤很高,策略表现略差。这个可能原因是归属于母公司所有者的净利润(滚动十二期,同比增长)>10这个条件过于严苛,与其他不严苛的选股条件共同选出的股票不具有较好的适配性。参数的设置基于理论,与实际的数据产生较高偏差,需要进行参数优化,探寻最适合该策略思想的参数设置方案。
5.参数优化
5.1 参数优化的意义
参数优化在各个领域都具有重要的必要性,主要体现在以下几个方面:
- 提升策略绩效
- 通过优化参数,可以使交易策略更好地适应历史市场数据,从而提高策略的盈利能力。例如,在移动平均线交叉策略中,合理优化短期和长期移动平均线的周期参数,能够让策略更精准地捕捉市场趋势变化,把握买卖时机,实现更高的收益。
- 优化参数还可以降低策略的风险指标,如最大回撤、波动率等。以止损参数为例,通过优化设定合理的止损水平,能够在控制损失的同时,避免因过早或过晚止损而影响策略的整体收益,使策略在风险可控的前提下实现较好的回报。
- 增强策略适应性
- 市场环境是复杂多变的,不同的市场阶段具有不同的特征。参数优化能够使量化交易策略更好地适应市场的动态变化。比如,在趋势明显的市场中,优化趋势跟踪策略的参数可以让策略更紧密地跟随市场趋势;而在震荡市场中,调整参数则可以使策略减少不必要的交易信号,避免频繁交易带来的损失。
- 不同的金融市场或交易品种也具有各自独特的价格波动特性。通过参数优化,可以针对特定市场或品种的特点,定制适合的交易策略。例如,股票市场和期货市场的交易规则、波动性等有所不同,对同一策略在不同市场中进行参数优化后,能够更好地发挥策略在相应市场中的优势。
- 提高策略效率
- 优化参数可以减少策略的运算量和交易成本。例如,在一些复杂的多因子模型中,通过对因子权重和筛选条件等参数进行优化,去除冗余的因子和无效的交易信号,能够降低模型的计算复杂度,提高策略的运行效率,同时减少不必要的交易操作,降低交易佣金和滑点等成本。
- 合理的参数优化还可以缩短策略的回测和验证时间。在策略开发过程中,快速有效地找到最优参数组合,能够加快策略的研发进度,使策略更快地投入实际应用。
5.2 初步参数局部优化
整体上看,我们采用分布优化的方法。
分部优化是一种将复杂问题分解为多个部分进行优化的方法。它把整个参数空间划分为不同的子空间或部分,然后分别对每个部分进行独立的优化。这样做可以降低优化的复杂度,更有针对性地处理不同部分的参数,提高优化效率和效果,尤其适用于大规模、高维度的参数优化问题。
当然,许多整体参数优化的方法也适用于策略优化:
网格搜索:在参数空间中定义一个网格,将每个参数的取值离散化,然后遍历网格上的所有点,计算每个点对应的目标函数值,选择使目标函数最优的参数组合。该方法简单直观,但计算量较大,适用于参数空间较小的情况。
贝叶斯优化:基于贝叶斯统计理论,通过构建目标函数的代理模型(如高斯过程)来预测参数空间中未评估点的目标函数值,并根据预测结果选择下一个要评估的参数点,以最大化预期改进指标。该方法能够利用已有的评估数据进行智能搜索,在处理昂贵的目标函数评估或黑盒优化问题时表现出色,但计算复杂度较高。
在本策略中,参数有如下内容:
在研究参数对策略的影响之初,首先需要确认参数的重要性。显然,本策略选股条件的参数中最为关键的是是归属于母公司所有者的净利润(滚动十二期,同比增长),因为在上述回测中,该选股条件直接排除了A股95%以上的股票。很自然会怀疑这样的条件是否不合理,于是我们做了一步简单的遍历,观察该参数设置是否合理。固定其他参数,最终的回测测试结果显示,设置参数min_ttm_yoy为减小和较大均为导致收益率严重下降,且整体总收益率下降幅度非常大。当参数min_ttm_yoy设置在6-15之间时收益率较高且最大回撤较低。在该范围内,选出的股票数量差距都不超过两倍,这说明选择“极高的归母公司净利润增长率”的思路是合理的。
5.3 回测参数优化
在5.2的参数优化背景下,参数阈值min_ttm_yoy设置为较高时选出的股票池数量已经非常有效,平均每天满足的股票不足0.5%.,此时其他选股条件的参数设置不再起决定性影响。故我们的参数优化重点放在了回测参数的优化上,在确定每日的股票池后,回测参数决定了买卖规则,即几天换手一次、每次换手时买卖几只股票。由于选出的股票平均下来一天就十几只,这两个参数显得尤为重要。由于参数仅仅两维,我们又想观察各个指标随着参数变化的变化趋势,故直接使用两层for循环进行回测参数优化。
买入股票数量太多时:即使部分股票表现不佳,其他股票的良好表现可能会弥补损失,使投资组合的整体风险相对较低。但管理成本增加,手续费较高,且单个股票影响力降低,难以获得较高收入。
买入股票数量太少时:将资金集中在少数几只股票上,可以更专注地研究和跟踪这些股票,提高资金使用效率。但风险集中,策略适应性差
由于内存有限,服务器有限,对参数alpha和beta利用两层for循环一次性无法完成遍历,需要进行两次遍历,遍历的结果如下。
alpha | beta | drawdown | total Return |
---|---|---|---|
3.0 | 3.0 | 0.56 | 49.81 |
3.0 | 4.0 | 0.45 | 100.55 |
3.0 | 5.0 | 0.48 | 32.32 |
3.0 | 6.0 | 0.45 | 44.02 |
3.0 | 7.0 | 0.43 | 57.72 |
3.0 | 8.0 | 0.43 | 64.87 |
4.0 | 3.0 | 0.50 | 31.40 |
4.0 | 4.0 | 0.43 | 72.56 |
4.0 | 5.0 | 0.48 | 23.33 |
4.0 | 6.0 | 0.45 | 28.90 |
4.0 | 7.0 | 0.43 | 30.18 |
4.0 | 8.0 | 0.43 | 54.81 |
5.0 | 3.0 | 0.50 | 18.08 |
5.0 | 4.0 | 0.43 | 44.28 |
5.0 | 5.0 | 0.45 | 28.46 |
5.0 | 6.0 | 0.42 | 16.06 |
5.0 | 7.0 | 0.40 | 20.45 |
5.0 | 8.0 | 0.42 | 47.00 |
6.0 | 3.0 | 0.48 | 14.54 |
6.0 | 4.0 | 0.41 | 28.10 |
6.0 | 5.0 | 0.39 | 27.59 |
6.0 | 6.0 | 0.40 | 17.71 |
6.0 | 7.0 | 0.39 | 17.40 |
6.0 | 8.0 | 0.40 | 26.27 |
结果显示,最大回撤drawdown和总收益total Return对apha和beta 的敏感度很高,这说明这两个参数尤为重要。一般来说,最大回撤反映资产价格波动的风险程度,取决于资产价格本身的走势,而非换仓周期和持仓数量。换仓周期影响的是交易频率,持仓数量关乎资金分配,都不直接改变资产价格的波动路径,所以最大回撤不受其改变。不过总收益率会受到改变,因为指标为10年的累计结果。可以看出,最大回撤的改变幅度不大,这两个参数不能在较大范围控制回撤。但total Return不同,其关于beta 的趋势相同,这说明持仓周期是一个重要的因素。通过观察上述两个表格,不难看出参数组合为(alpha,beta) = (3,4)时的策略是一个优秀的策略。当alpha和beta较大时,策略收益率降低了很多,这更加说明极大的归母净利润值可以使策略收益率提高。
5.4 选股参数优化
在5.3中,我们先固定了其他参数,执行了对其中两个重要参数的局部优化。现在我们再固定这两个局部最优参数,再调整其他参数。贝叶斯参数优化结合利用了先验信息,进行自适应采样和参数全局搜索,处理问题的时间较长。参数局部最优化的计算效率高,适用于局部性质较好的问题。在本问题中,调仓周期和持股数量是固定值,易于遍历。且筛选条件严格,导致单一因子筛选后股票池数量有限,策略效果对其他参数的依赖性较低,故使用参数局部优化即可。虽然参数局部优化容易陷入局部最优,但本策略的参数局部最优也已经达到了非常优异的效果。
尽管在初步参数研究时已经固定了参数 net_profit_to_parent_shareholders_ttm_yoy 大于 12,但由于对其他参数进行了变换,我们还需要重新进行该参数的优化。固定(alpha,beta) = (3,4),对参数min_ttm_yoy进行调参。事先对间隔较大的参数设置进行回测后,初步确定最合适的范围在7-12之间,参数过小或过高都回撤较高且收益较低。设置间隔为0.5,对2014-01-01到2025-04-15进行回测。这是一种典型的交替优化,这是一种用于求解多参数优化问题的方法。在这种方法中,将多个参数分成不同的组,然后在每次迭代中,固定其他组的参数,只对其中一组参数进行优化,通过不断交替地对不同组的参数进行优化,逐步找到最优解。
min_ttm_yoy | drawdown | total Return |
---|---|---|
7.0 | 0.51 | 60.39 |
7.5 | 0.51 | 51.54 |
8.0 | 0.47 | 150.57 |
8.5 | 0.42 | 171.40 |
9.0 | 0.44 | 105.67 |
9.5 | 0.41 | 119.94 |
10.0 | 0.43 | 152.34 |
10.5 | 0.43 | 193.94 |
11.0 | 0.45 | 128.83 |
11.5 | 0.45 | 94.58 |
5.5 调参后的参数优化
在调整参数后,策略回测的结果如下,在11年的周期内,年化收益率达到了惊人的62%,超过了最大回撤20个百分点。
\
6.参数敏感性分析
参数敏感性检验是一种用于评估模型中不同参数对模型输出结果影响程度的方法,评估模型的稳定性和可靠性,通过分析参数变化对输出的影响,判断模型在不同参数取值情况下的表现,从而评估模型的整体稳定性。由于在上述参数优化的过程中,我们已经给出了换仓周期、持仓数目、最小归属母公司净利润增长率变化时,总利润和最大回撤的变化趋势。在本节,只做对其他参数的敏感性分析,以最高市值上限和经营活动产生的现金流量净额下限为例进行测试。
在初步回测和参数优化中,各种参数组合下的曲线形态都类似,故为节约内存和时间,在此从18年4月回测到25年4月,去观察策略对参数的敏感度。我们希望找到一个指标去衡量策略的优劣,一般的都希望年化收益率较高并且回撤较小,故我们给策略评分为年化收益率—最大回撤,记为score。我们把所有信息储存在一个dataframe中。
alpha表示最小经营活动产生的现金流量净额(TTM)同比增长率,beta表示最大市值上限,drawdown是最大回撤值,total_return列表示总收益率,annual_return表示年化收益率,score表示评分。对参数利用for循环去跑七年的回测,并绘制score关于参数的变化图。
alpha | beta | drawdown | total return | annual return | |
---|---|---|---|---|---|
-0.10 | 2.0×10⁹ | 0.46 | 14 | 0.50 | |
-0.10 | 3.0×10⁹ | 0.46 | 29 | 0.65 | |
-0.10 | 4.0×10⁹ | 0.46 | 24 | 0.62 | |
-0.05 | 2.0×10⁹ | 0.46 | 12 | 0.47 | |
-0.05 | 3.0×10⁹ | 0.46 | 25 | 0.62 | |
-0.05 | 4.0×10⁹ | 0.46 | 21 | 0.58 | |
0.00 | 2.0×10⁹ | 0.40 | 13 | 0.48 | |
0.00 | 3.0×10⁹ | 0.43 | 26 | 0.62 | |
0.00 | 4.0×10⁹ | 0.43 | 20 | 0.57 | |
0.05 | 2.0×10⁹ | 0.40 | 14 | 0.49 | |
0.05 | 3.0×10⁹ | 0.43 | 26 | 0.63 | |
0.05 | 4.0×10⁹ | 0.43 | 21 | 0.58 | |
0.10 | 2.0×10⁹ | 0.41 | 12 | 0.47 | |
0.10 | 3.0×10⁹ | 0.43 | 22 | 0.60 | |
0.10 | 4.0×10⁹ | 0.43 | 18 | 0.55 |
从表格可以看出,年化收益率关于参数的波动幅度稍微有点大,但最大回撤几乎差不多,这说明这两个参数几乎不会影响最大回撤的区间。如果想要对策略评分可视化,可以绘制score关于两个参数的三维图示,直观考察结果。其中策略评分:
score = 10 ( annual return - drawdown )
7.止盈止损和风险控制
7.1 最大回撤
在上面的策略中,并没有设置止盈止损条件,严格按照选股进行轮动策略,得到了相当不错的效果。回测显示,在不同的参数下,大的回撤几乎都出现在2017年到2018年,以及24年1月底到2月初,这说明如果想要回撤需要更改指标/因子,而不是参数。然而根本性的选股条件是归属母公司净利润增长率,如果删除更改该参数,无疑无法取得高收益,这就是高风险高收益。
7.1 卖出条件止损
移动平均线交叉、成交量异常变化、随机指标(KDJ)超买区转向、布林线(BOLL)指标变化等都是常见的止损条件,但在本策略中如果使用这些卖出条件,不仅不能降低回撤,还会导致收益率大大降低。
8.压力测试和情景分析
我们以最优参数组合为例,
8.1 2015年股灾
在如 2015 年年中 A 股出现非理性大波动的股灾期间,该策略大面积空仓,避免遭遇股灾亏损,这是因为财报显示没有公司能满足本策略的选股条件。在非空仓期,策略还取得了良好的效果。
8.2 2020年疫情
在疫情冲击时,策略短暂收益为负,但很快就拉起爬升,在年末事先盈利。
8.3 2024年初至国庆前
在2024年大盘指数下跌时,该策略表现良好,波动稳定上升,且在国庆随浪潮拉起。
9.交易成本与滑点设置
设置手续费为A股市场的交易费用为:万3、 千1、 最低五元
10.设置最优参数后的策略代码
https://bigquant.com/codesharev3/dff5e715-3d14-4b1b-bedf-cd76faa3c01a
参数调优代码
说明:由于数据修复,故而下方参数调优版本的回测结果较之前回测结果有变化
https://bigquant.com/codesharev3/34971b05-e015-47b6-8c53-4f548332fe38
\