精华帖子

优秀策略分享——高股息多因子策略

由bqy53ve0创建,最终由bqy53ve0 被浏览 11 用户

1.市场观察和机会发现

优质高股息策略以稳定收益和抗风险能力为核心,在量化交易中具备独特价值。其逻辑层面,在经济下行或波动时,高股息企业商业模式成熟、现金流稳定,能提供防御性;股息再投资可实现复利增长,放大收益;被低估的高股息股存在估值修复机会;同时满足养老金等长期资金的配置需求。市场观察显示,牛市中该策略表现滞后但后期抗跌,熊市和震荡市成资金避风港。不同行业的高股息策略表现各异,金融、能源、公用事业、消费行业受各自行业特性及宏观因素影响,股息稳定性与收益存在差异。此外,市场风格轮动显著影响高股息策略,风格偏向价值股时表现优异,转向成长股时则较弱,投资者需关注风格变化,优化投资组合 。

哪些指标可以体现高股息呢?换言之,如何才能筛选出高股息股票呢?

最重要的指标是股息率,这是衡量股息收益的关键指标,股息率越高,说明公司分红慷慨,给股东的回报相对较高,但不同行业的股息率水平差异较大,需结合行业特点进行判断。

其次是每股股息,即公司向股东每股分配的股息金额。每股股息的增长趋势可以反映公司的盈利能力和分红政策的稳定性。如果一家公司的每股股息持续增长,说明公司经营状况良好,有能力持续为股东提供丰厚的回报。

当然还有一些其他指标,例如每股息税前利润,每股收益,扣非净利润,这些都是直接体现股权和股息的指标。

一般来讲,股息并不会在一个较短的周期内改变,故我们将持仓周期设置为10,持仓4只,再进行一些非常基础的基本面过滤,看看效果如何?

在上述策略中,我们要求每股息税前利润(最新一期, 连续3个季度的最小值)>0.1;基本每股收益(最新一期, 环比增长连续3个季度的最小值)>0.1;扣非净利润(滚动十二期, 环比增长连续3个季度的最小值)>0.1,再按照股息率从高到低排序买入三只股票。这样直观购入高股息股的效果还算不错但回撤较高,这说明还需要一些其他筛选条件,以及技术面指标衡量股票的优劣。通过考察公司的净利润增长率、营业收入增长率等指标来评估。稳定的盈利是公司持续分红的基础,只有公司盈利稳定,才更有可能维持高股息政策。通常,连续多年净利润增长率保持在一定水平且营业收入稳定增长的公司,更有可能是高股息股票的候选者。

        float_market_cap < 5e9 
        AND ebit_ps_lf_consec_min_3q > 0.1
        AND basic_eps_latest_capital_lf_qoq_consec_min_3q > 0.1
        AND net_profit_deducted_ttm_qoq_consec_min_3q > 0.1

回测结果显示,这样的结果其实还算差强人意,可以基于此继续优化。

1.市场观察和机会发现

优质高股息策略以稳定收益和抗风险能力为核心,在量化交易中具备独特价值。其逻辑层面,在经济下行或波动时,高股息企业商业模式成熟、现金流稳定,能提供防御性;股息再投资可实现复利增长,放大收益;被低估的高股息股存在估值修复机会;同时满足养老金等长期资金的配置需求。市场观察显示,牛市中该策略表现滞后但后期抗跌,熊市和震荡市成资金避风港。不同行业的高股息策略表现各异,金融、能源、公用事业、消费行业受各自行业特性及宏观因素影响,股息稳定性与收益存在差异。此外,市场风格轮动显著影响高股息策略,风格偏向价值股时表现优异,转向成长股时则较弱,投资者需关注风格变化,优化投资组合 。

哪些指标可以体现高股息呢?换言之,如何才能筛选出高股息股票呢?

最重要的指标是股息率,这是衡量股息收益的关键指标,股息率越高,说明公司分红慷慨,给股东的回报相对较高,但不同行业的股息率水平差异较大,需结合行业特点进行判断。

其次是每股股息,即公司向股东每股分配的股息金额。每股股息的增长趋势可以反映公司的盈利能力和分红政策的稳定性。如果一家公司的每股股息持续增长,说明公司经营状况良好,有能力持续为股东提供丰厚的回报。

当然还有一些其他指标,例如每股息税前利润,每股收益,扣非净利润,这些都是直接体现股权和股息的指标。

一般来讲,股息并不会在一个较短的周期内改变,故我们将持仓周期设置为10,持仓4只,再进行一些非常基础的基本面过滤,看看效果如何?

在上述策略中,我们要求每股息税前利润(最新一期, 连续3个季度的最小值)>0.1;基本每股收益(最新一期, 环比增长连续3个季度的最小值)>0.1;扣非净利润(滚动十二期, 环比增长连续3个季度的最小值)>0.1,再按照股息率从高到低排序买入三只股票。这样直观购入高股息股的效果还算不错但回撤较高,这说明还需要一些其他筛选条件,以及技术面指标衡量股票的优劣。通过考察公司的净利润增长率、营业收入增长率等指标来评估。稳定的盈利是公司持续分红的基础,只有公司盈利稳定,才更有可能维持高股息政策。通常,连续多年净利润增长率保持在一定水平且营业收入稳定增长的公司,更有可能是高股息股票的候选者。

        float_market_cap < 5e9 
        AND ebit_ps_lf_consec_min_3q > 0.1
        AND basic_eps_latest_capital_lf_qoq_consec_min_3q > 0.1
        AND net_profit_deducted_ttm_qoq_consec_min_3q > 0.1

上面的回测结果说明这样的选股条件对应的结果还算差强人意,可以基于此继续优化。

2.策略想法

本策略希望通过基本面、技术面、资金面三个方向,优化出一个优良的高股息策略。选股条件和策略逻辑应当符合高股息股票的价值理论。

2.1 基本面想法

一般的基本面分析:具有优良的资本运转,市值在一定范围内,表现较好,有较好的未来成长价值,除此之外,净利润增长、收入增长可以保证公司的成长价值。

公司盈利稳定、现金流充沛、财务状况良好,且有较强意愿和能力为股东持续分红,体现在每股收益、股息率、股息增长率以及扣非净利润。

2.2 技术面想法

为捕捉轮动策略中可能的成长,避免遭遇较大的波动回撤,使用三条均线作为技术面支撑,用10日均线、20日均线、40日均线限制技术面形态。

2.3 资金面想法

除了基本面,技术面,本策略还聚焦于资金面,观察大单净流入,以及选择最近资金周转活跃的股票。

3.策略逻辑编写

3.1策略思想与指标介绍

3.1.1成长性指标

计算过去三年的平均毛利率增长率,要求其大于一定水平。

m_avg(gross_profit_yoy_ttm, 756) AS avg_gross_profit_margin_growth_3y

计算过去三年的平均营业总收入增长率,也要求其大于一定水平。

m_avg(total_operating_revenue_yoy_ttm, 756) AS avg_operating_revenue_growth_3y

3.1.2技术面指标

使用10日、20日、40日均线,限制波动性和多空头排列。

        m_avg(close,10) as ma_10,
        m_avg(close,20) as ma_20,
        m_avg(close,40) as ma_40,

3.1.3基本面指标

对股票的市值进行一定限制

float_market_cap

其他基本面过滤:非st,非停牌,非北交所,非科创板

        st_status = 0
        AND suspended = 0
        AND list_sector NOT IN (3)

3.1.4资金面指标

计算五日的主动买入成交额占比平均值。主动买入成交额占比(全单) = 主动买入成交额(全单) / 当日流通市值,要求其大于一定范围

m_avg(active_buy_amount_proportion_all,5) as avg_5day_buy_amout

除此之外,还要限制五天内交易足够活跃,避免出现偶然活跃的情况。要求五日的平均换手量大于流通股本的一定倍数

m_avg(volume,5)/free_float_shares 

3.1.4高股息指标

每股息税前利润(最新一期, 连续3个季度的最小值)需要大于一定水平

ebit_ps_lf_consec_min_3q

基本每股收益(最新股本摊薄)(最新一期, 环比增长连续3个季度的最小值)大于一定水平

basic_eps_latest_capital_lf_qoq_consec_min_3q

扣非净利润(滚动十二期, 环比增长连续3个季度的最小值)大于一定水平

net_profit_deducted_ttm_qoq_consec_min_3q

在满足所有条件的股票中,按照股息率从高到低

dividend_yield_ratio

3.2回测配置

股票策略统一设置回测配置,本策略使用的策略参数。

  • 回测时间:从 2021 年 1 月 1 日至 2025 年 4 月 27 日。
  • 初始资金:1,000,000 元
  • 交易频率:10天换仓

10天换仓会遗漏交易契机么?并不会,所有指标包括技术面和资金面,都使用几日的平均值,筛选出的股票满足长期条件。

4.数据回测与回测分析

初步筛选,对上面的指标设置一些下限,暂时不限制k线形态,直接带入回测中,结果如下图所示,回测结果并不佳。

由于策略的参数如持股数量、交易频率、上市时间等参数的设置的科学性有待确认,回测周期中有1/3低于基准收益,且年化收益不高,最大回测达到21.14%,策略表现略差。

可能原因是参数的设置是基于理论,与实际的数据会产生偏差,下面进行参数优化,探寻最适合该策略思想的参数设置方案。

5.参数优化

5.1 遗传算法

5.1.1 简介

遗传算法通过选择、交叉和变异等操作,在搜索空间中逐步搜索最优解。模式定理指出,具有低阶、短定义距以及平均适应度高于群体平均适应度的模式,在遗传算法的迭代过程中,其样本数将按指数级增长。这为遗传算法能够快速找到全局最优解提供了理论依据。该假设认为,遗传算法通过将低阶、高适应度的模式(积木块)逐步组合成高阶、高适应度的模式,最终构建出全局最优解。

5.1.2 遗传算法的流程

  1. 编码:将优化问题的参数表示为染色体的基因编码。常见的编码方式有二进制编码、实数编码等。
  2. 初始化种群:随机生成一组初始染色体作为种群。种群规模通常根据问题的复杂程度和计算资源来确定。例如,设定种群规模为 100,即随机生成 100 个染色体,每个染色体代表一个可能解。
  3. 适应度评估:根据优化问题的目标函数,计算每个染色体的适应度值。适应度函数用于衡量染色体所代表的解的优劣程度。
  4. 选择操作:根据染色体的适应度值,按照一定的选择策略从当前种群中选择出一些染色体,作为下一代种群的父代。常用的选择策略有轮盘赌选择、锦标赛选择等。
  5. 交叉操作:对选择出的父代染色体,按照一定的交叉概率进行交叉操作,生成新的子代染色体。交叉操作模拟了生物遗传中的基因交换过程。例如,采用单点交叉方式,随机选择一个交叉点,将两个父代染色体在交叉点后的基因片段进行交换。
  6. 变异操作:对生成的子代染色体,按照一定的变异概率进行变异操作。变异操作模拟了生物遗传中的基因突变过程,以一定的概率随机改变染色体上的基因值。
  7. 种群更新:用经过选择、交叉和变异操作后生成的新子代染色体替换当前种群中的染色体,形成新的种群。
  8. 终止条件判断:判断是否满足终止条件。常见的终止条件有达到预定的迭代次数、适应度值收敛到一定精度等。如果满足终止条件,则输出当前种群中适应度值最优的染色体作为最优解;否则,返回步骤 3,继续迭代优化。

5.1.3 遗传算法的优点

优点

  1. 全局搜索能力:遗传算法从多个初始点开始并行搜索,而不是局限于一个点,能够在整个搜索空间中进行广泛探索。通过选择、交叉和变异等操作,它可以跳出局部最优解,有较大概率找到全局最优解,尤其适用于复杂的非线性、多峰优化问题。
  2. 通用性强:遗传算法不依赖于问题的具体领域和数学模型的性质,只需要定义适应度函数来评估解的优劣。因此,它可以应用于各种不同类型的优化问题,如函数优化、组合优化、机器学习参数调优等。
  3. 鲁棒性好:该算法对问题的初始条件不敏感,即使初始解的质量较差,也能通过迭代逐渐找到较好的解。而且,它在存在噪声和干扰的环境中也能保持较好的性能。
  4. 并行性:遗传算法的搜索过程本质上是并行的,种群中的每个个体都可以独立进行评估和进化操作。这使得它很容易在并行计算环境中实现,从而显著提高算法的运行效率,缩短求解时间。
  5. 可扩展性:遗传算法可以很方便地与其他优化算法或技术相结合,形成混合算法,以提高搜索效率和求解质量。例如,与局部搜索算法结合,在遗传算法的基础上进行局部精细搜索,进一步优化解的质量。

缺点

  1. 计算量大:由于遗传算法需要对种群中的每个个体进行适应度评估,并且在每一代都要进行选择、交叉和变异等操作,随着种群规模和迭代次数的增加,计算量会显著增大,导致算法的运行时间较长,尤其是对于大规模问题,计算成本可能会变得难以承受。
  2. 参数选择困难:遗传算法中有多个参数需要设置,如种群规模、交叉概率、变异概率、迭代次数等。这些参数的选择对算法的性能影响很大,但目前没有通用的方法来确定最优的参数组合,通常需要通过大量的实验和经验来进行调整,增加了算法的使用难度。
  3. 容易早熟收敛:在算法运行过程中,可能会出现种群中个体的多样性过早丧失的情况,导致算法过早收敛到局部最优解,而无法继续探索其他可能的更优解。这种早熟收敛现象在处理复杂问题时尤为明显。
  4. 局部搜索能力较弱:遗传算法主要侧重于全局搜索,对于局部区域的精细搜索能力相对较弱。当接近最优解时,它可能需要较多的迭代次数才能进一步提高解的质量,不如一些局部搜索算法在局部优化方面高效。
  5. 解的精度难以保证:遗传算法得到的解通常是近似最优解,很难保证得到的解具有很高的精度。在一些对解的精度要求极高的应用场景中,可能需要进一步的处理或结合其他算法来提高解的精度。

5.2 遗传算法与策略优化

5.2.1 优化思路

由于策略回测周期为4年时,设置较大的种群数目和迭代次数算力不足,需要手动依照经济学理论和满足的数目对参数设置较为精确的参数范围,再进行具体的参数优化。

经过多次匹配尝试,本策略使用“类多头均线排列”作为k线限制。均线关系反映短期趋势向上,中期趋势得到确认,并且趋势协同增强可靠性,避免出现严重下跌的情况。股息可持续性依赖于估值提升潜力和抵御风险能力,设置最低增长率要求为0.1

设置后具体参数范围和k线限制后,先对三个基本面参数进行遗传算法参数优化,再对剩余三个资金面参数进行优化。

遗传算法理论上可以找到全局最优解,但在实际应用中往往受到多种因素影响,可能只能找到局部最优解。交叉和变异操作则不断产生新的个体,增加种群的多样性,有助于算法在整个搜索空间中进行广泛探索,从而有机会找到全局最优解。但在算法运行后期,由于选择操作的作用,种群中适应度较高的个体逐渐占据主导地位,可能导致种群多样性降低,使算法过早收敛到局部最优解,而无法继续探索其他更优的区域。

    drawdown = performance.raw_perf['max_drawdown'].tail(1).values[0]
    totalreturn = performance.raw_perf['algorithm_period_return'].tail(1).values[0]
    annual_return = (1 + totalreturn) ** (1 / 4) - 1
    pnl_ratio = performance.raw_perf['pnl_ratio'].tail(1).values[0]
    score = annual_return - 1.1 * drawdown + 0.3 * pnl_ratio

简而言之,目标函数是策略评分score = 年化收益率 - 1.1 倍最大回撤 +0.3倍胜率

5.2.2 参数优化

经过尝试,(alpha,beta,theta) = (0,1,0,1,0.005)是一组很好的参数,设置合理的参数范围后,进行参数优化。以下是第一组参数遗传算法下的结果,很显然,算法找到了两组参数局部最优,然而,这两组参数最优值所对应的score并不比原始参数更高,反而低了不少,这说明种群数目太少,导致迭代结果陷入了很差的参数组合中。在下面的表中,alpha、beta、theta是三个参数,分别表示三年的平均毛利率增长率下界、三年的平均营业总收入增长率下界、五日主动买入成交额占比率均值的下界,score表示参数组合对应的策略评分。

 score = annual_return - 1.1 * drawdown + 0.3 * pnl_ratio

为什么呢?不难看出,参数alpha,beta的范围太广,这导致选出的策略彼此差异很大,第一次迭代的score差异非常大。第二次迭代很快陷入了第一次迭代的局部最优参数组合中。为解决这个问题,我们让第二组参数优化的迭代次数减少为2,种群数目增加为12。这就是过拟合,过拟合是机器学习和统计学中的一个重要概念。它是指模型在训练数据上表现得非常好,能够准确地拟合训练数据中的各种细节和噪声,但在新的、未见过的数据(测试数据)上表现却很差,泛化能力不足。

第二组参数优化中,alpha表示每股息税前利润(最新一期, 连续3个季度的最小值)的下界、beta表示基本每股收益(最新股本摊薄)(最新一期, 环比增长连续3个季度的最小值)的下界,theta表示扣非净利润(滚动十二期, 环比增长连续3个季度的最小值)的下界。与上一组参数优化的过程类似,score仍然表示参数组合对应的策略评分,定义为

score = annual_return - 1.1 * drawdown + 0.3 * pnl_ratio

5.2.3 过拟合

过拟合通常发生在模型过于复杂,例如参数过多、模型结构过于精细时。此时模型会记住训练数据中的所有细节,包括一些偶然的特征或噪声,而这些在实际应用中可能并不具有代表性。为避免过拟合,可采用正则化、增加数据量、提前停止训练等方法,以提高模型的泛化能力,使其在未知数据上也能有良好的表现。在本策略中,我们确定了研究思路后,希望调整参数搭配提高收益率,降低回撤,并提高胜率。两次大范围的参数优化无法提高score,而小范围的参数优化可以在一定程度继续优化模型,但小范围的参数优化会导致严重的过拟合,即参数过于依赖历史数据,对未来的预测不足,导致模型在历史期间回测效果很好,而在未来效果可能无法保证,甚至出现很大的反向回撤。策略指定一定要避免过拟合的发生。

5.3 最优参数下的回测结果

基于起始参数设置,结合参数优化后的结果,最终本策略选择如下参数设置。在这样的参数设置下,进行2021-01-01年至今的回测,结果如下图所示。

    sql = """
    SELECT
        date,
        instrument,
        -- 计算过去三年的平均毛利率增长率
        m_avg(gross_profit_yoy_ttm, 756) AS avg_gross_profit_margin_growth_3y,
        -- 计算过去三年的平均营业总收入增长率
        m_avg(total_operating_revenue_yoy_ttm, 756) AS avg_operating_revenue_growth_3y,
        1.0/$stock_num AS weight,
        m_avg(close,10) as ma_10,
        m_avg(close,20) as ma_20,
        m_avg(close,40) as ma_40,
        m_avg(active_buy_amount_proportion_all,5) as avg_5day_buy_amout
    FROM cn_stock_prefactors
    WHERE
        st_status = 0
        AND suspended = 0
        AND list_sector NOT IN (3)
    QUALIFY
        avg_gross_profit_margin_growth_3y > 0.1
        AND avg_operating_revenue_growth_3y > 0.1
        AND float_market_cap < 8e9 AND float_market_cap > 5e8
        AND avg_5day_buy_amout > 0.005
        AND m_avg(volume,5)/free_float_shares > 0.005
        AND ebit_ps_lf_consec_min_3q > 0.033
        AND basic_eps_latest_capital_lf_qoq_consec_min_3q > 0.03
        AND net_profit_deducted_ttm_qoq_consec_min_3q > 0
        AND ma_10 > 0.90 * ma_20 
        AND ma_20 > 0.90 * ma_40 
    ORDER BY date,dividend_yield_ratio DESC
    """

5.3 参数敏感性分析

5.4.1 参数敏感性分析的意义

参数敏感性分析是一种用于研究模型中参数变化对模型输出结果影响程度的方法。局部敏感性分析每次只改变一个参数的值,保持其他参数不变,来研究该参数对输出的影响。这种方法简单直观,能清晰地展示单个参数的作用,但无法考虑参数之间的相互作用。全局敏感性分析:同时考虑所有参数的变化及其相互作用对模型输出的影响。它能更全面地反映模型的不确定性,但计算成本较高,分析过程相对复杂。

5.4.2 局部敏感性分析

从两组参数优化的结果可以看出,在一定参数范围内时,score都保持在0.3以上,这说明年化收益率几乎都大于最大回撤,参数不是很敏感。在第二组参数中,每个参数组合对应的策略都跑出来极高的score,这更加说明局部参数不敏感。k线限制条件中,参数改变意味着形态要求不同,如果设置为1,这就是严格的多头排列,而设置为>1的值代表强多头排列,设置为<1代表弱多头排列。可以从选股的行数看出,弱多头条件并不是决定性的,仅仅排除了极少部分的异常股票。

5.4.3 全参数敏感性分析

6.压力测试和情景分析

以下是2015年至今的回测结果

6.1 2015年股灾

在2015年股灾期间,严格的筛选条件导致长期空仓,避免了部分不利,但年底遭遇了10年来的最大回撤,不过回撤后用4个月拉起到更高水平。长期来看,本策略比较依赖于长期趋势。

6.2 疫情期间

疫情期间,该策略一路高飞,几乎没有回撤,表现非常良好。这说明策略对极端灾难和意外事件有很强的抗干扰能力。

6.3 25年贸易战

近期,该策略在2025贸易战期间,仍然表现出震荡稳定上涨的趋势。

7.交易成本与滑点

万3 千1 最低五元

8. 设置最优参数后的策略代码

https://bigquant.com/codesharev3/04cef8eb-f221-4e63-9d94-e95ef84cd563

\

{link}