优质策略分享—稳定冷门行业国企选股策略
由bqy53ve0创建,最终由small_q 被浏览 5 用户
1.市场观察和机会发现
策略目标:选取未来有较高稳定长期增长可能的股票,进行定期轮动,期望捕捉稳定增长,控制最大回撤。选择营业成本低、运营高效,且营业收入持续增长、发展态势良好的公司;同时要求资产负债率合理,确保财务稳健、风险可控;再结合低估值指标,挖掘被市场低估、具有价值潜力的股票,以提升投资性价比与安全性 。在初步尝试时,往往不会想到这么复杂的组合,需要按照经济学逻辑和不断地因子尝试替换,确定最后的策略框架。
为了验证我们的思想是否合理,或者不那么不合理。选择pb和pe在较低范围内,保证低估值;选择盈利增长和营业增长的股票,保证盈利情况良好;过滤掉st股和停牌股,保证基本面良好。在满足的股票中按照营业成本升序排序选择股票,买入进行轮动,回测结果如下。
从回测效果看,从19年以来尽管实现盈利,但波动非常大,趋势很不稳定,夏普比例非常低。这说明通过资产负债率、股息率等指标进行控制和限定是有必要的,仅仅通过简单筛选不能选出低风险的成长股。
实践结果显示,这种直观筛选高股息股票的策略虽能获取一定收益,但面临着较高的回撤风险。这表明,仅仅依靠当前的筛选条件还不足以有效控制风险,还需引入更多维度的筛选标准,结合技术分析指标对股票的综合表现进行更全面的评估。
本策略想捕捉低风险高成长低估值股票,要尽可能将筛选条件放严格。
2.策略想法
从多个角度出发,目标是通过严格的选股条件,选出低价、低估值、稳定的股票,尽可能控制最大回撤,力图稳定增长。
价格与估值层面:低价股通常对于中小投资者的资金压力较小,更容易吸引资金入场,并且购买低价股的容错空间更大;市盈率(PE)反映了投资者为获取公司每一元盈利所愿意支付的价格,较低的市盈率意味着投资者能够以相对较低的成本获取公司的盈利,具有较高的投资性价比‘;市净率(PB)是股票价格与每股净资产的比率。较低的市净率意味着股票价格相对公司的净资产较低,公司的资产质量可能较好。
流动性与稳定性层面:当流通市值大于一定阈值时,市场上有足够多的股票可供交易,也避免了较大的风险。被标记为 ST 说明公司面临较大的经营风险和财务困境,不予购买;停牌股票在停牌期间无法进行交易,不予购买。作为风险控制手段。
分红回报层面:投资者从股票分红中获得的收益。较高的股息率意味着公司有较好的盈利能力和现金流状况,并且愿意将利润分配给股东
盈利与增长层面:较高的净利润增长率表明公司的经营业绩在不断提升,未来可能有更好的发展前景。营业总收入环比增长率较高说明公司的营业收入在最近一个季度相对于上一个季度有所增长,更有可能在未来获得较高的收入水平。经营活动产生的现金流量净额为正表明公司的主营业务能够产生足够的现金流入,这是公司持续经营和发展的基础。
资产负债率:资产负债率反映了公司的负债水平和偿债能力。合理的资产负债率范围表明公司既能够利用债务杠杆来扩大生产和提高盈利能力,又不会承担过高的财务风险。
MACD 指标:短期趋势向上,市场处于多头行情,避免死叉形态时购入股票。
按季度营业成本升序排序:选择满足条件的股票中营业成本高的,这说明它们对单位成本的应用较好。
3.策略逻辑编写
3.1策略思想与指标介绍
3.1.1低估值
低价股、低pe、低pb:从三个方面筛选股票低估值
-- 股票价格最高限制——购买低价股
close < 15
-- 市盈率较低,低估值
AND pe_ttm > 0 AND pe_ttm < 30
-- 市净率较低
AND pb < 5
3.1.2成长性指标
从净利润、营业收入环比、经营活动现金方面,确定营业状况和成长性要求,筛选未来可能具有高成长性的股票
-- 净利润增长为正
AND net_profit_rate_ttm > 0
-- 营业总收入环比增长率为正
AND total_operating_revenue_ttm_qoq > 0
-- 经营活动产生的现金流量净额为正
AND net_cffoa_ttm > 0
3.1.3稳定性指标
历史指标稳定:股息率不低、资产负债率合理
-- 股息率不能太低
AND dividend_yield_ratio > 0.02
-- 合理的资产负债率
AND debt_to_asset_lf >= 0.40 AND debt_to_asset_lf <= 0.70
3.1.4技术面形态
不能出现macd死叉形态,如果出现macd死叉就不购买。
m_ta_macd_dif(close) > m_ta_macd_dea(close) OR m_lag(m_ta_macd_dif(close), 1) < m_lag(m_ta_macd_dea(close), 1)
3.1.5基本面良好
避免买入风险较高的股票
-- 流通市值大于5亿,避免购买不合理股票
AND float_market_cap > $market_cap_threshold
-- 非ST股票
AND st_status = 0
-- 非停牌股票
AND suspended = 0
在这样严苛的过滤条件下,按照营业成本从低到高买入股票。
在研究的开始,我们其实并不知道什么是合理的因子和参数配置,初步选择较为合理和理想的因子和参数有利于后续策略优化和参数优化的步骤。不同投资者的风险偏好和爱好不同,本策略聚焦于低回撤稳定股,不追求非常高的收益,但希望购买的股票是低风险的,并且能实现稳定增长,故希望把选股条件放的非常严苛,更关注股票本身。
经过初步的参数设置,由于因子和参数较多,这些指标的搭配,选出的股票已经非常少,从2019年初到2025年4月底,大约1400个交易日,一共只有2万条,这样的初筛下来,平均每天满足的只有15条左右,这些就是满足我们选股经济学原理的目标股。
3.2回测配置
股票策略统一设置回测配置,本策略使用的策略参数。
- 回测时间:从 2019 年 1 月 1 日至 2025 年 5 月 07 日。
- 初始资金:1,000,000 元
- 交易频率:5天换仓
5天换仓会遗漏交易契机么?并不会,所有指标包括技术面和资金面,都使用较长范围的指标,筛选出的股票满足长期优质。并且,不会购买近期呈现macd死叉的股票。
4.数据回测与回测分析
初步筛选,对上面的指标设置一些初步合理的参数,直接带入回测中,结果如下图所示,回测结果较为不错。
由于策略的参数设置的科学性有待确认,并且策略参数和因子较多,策略表现还不是足够好。可能原因是参数的设置是基于理论,与实际的数据会产生偏差,下面进行参数优化,探寻最适合该策略思想的参数设置方案。
5.参数优化
参数优化在各个领域都具有重要的必要性,主要体现在以下几个方面:
- 提升策略绩效
- 通过优化参数,可以使交易策略更好地适应历史市场数据,从而提高策略的盈利能力。例如,在移动平均线交叉策略中,合理优化短期和长期移动平均线的周期参数,能够让策略更精准地捕捉市场趋势变化,把握买卖时机,实现更高的收益。
- 优化参数还可以降低策略的风险指标,如最大回撤、波动率等。以止损参数为例,通过优化设定合理的止损水平,能够在控制损失的同时,避免因过早或过晚止损而影响策略的整体收益,使策略在风险可控的前提下实现较好的回报。
- 增强策略适应性
- 市场环境是复杂多变的,不同的市场阶段具有不同的特征。参数优化能够使量化交易策略更好地适应市场的动态变化。比如,在趋势明显的市场中,优化趋势跟踪策略的参数可以让策略更紧密地跟随市场趋势;而在震荡市场中,调整参数则可以使策略减少不必要的交易信号,避免频繁交易带来的损失。
- 不同的金融市场或交易品种也具有各自独特的价格波动特性。通过参数优化,可以针对特定市场或品种的特点,定制适合的交易策略。例如,股票市场和期货市场的交易规则、波动性等有所不同,对同一策略在不同市场中进行参数优化后,能够更好地发挥策略在相应市场中的优势。
- 提高策略效率
-
优化参数可以减少策略的运算量和交易成本。例如,在一些复杂的多因子模型中,通过对因子权重和筛选条件等参数进行优化,去除冗余的因子和无效的交易信号,能够降低模型的计算复杂度,提高策略的运行效率,同时减少不必要的交易操作,降低交易佣金和滑点等成本。
-
合理的参数优化还可以缩短策略的回测和验证时间。在策略开发过程中,快速有效地找到最优参数组合,能够加快策略的研发进度,使策略更快地投入实际应用。
\
-
但是,本策略希望选择稳定的、风险较小的股票,所以需要弱化参数优化的重要性,而更看重股票本身的性质。换言之,不要把重心放在参数优化选出更好的策略,而是更侧重经济学逻辑。
5.1 初步选择参数合理范围
为了达到严格的筛选目的,本策略使用的指标较多,所以进行初步优化是有必要的。换言之,先确定参数的大致合理范围和可能对应优质策略的区间;或者初步判定参数组合在哪段区间内,策略回测效果相对较好。可以对每组参数灵活变动,观察每组参数下选出的股票数量,观察对应的回测效果,选择出初始的参数合理范围。也可以对某些因子删除观察效果,或调整因子观察。
本策略的目标是控制最大回撤,用严格的选股条件保证风险相对较小,获取稳定的增长价值。初步选定其他参数后,先对持股数量stock_num和换仓周期rebanlance_day在一定范围内进行遍历。
max_drawdown列表示最大回撤,toal_return列表示总收益,annual return列表示年化收益率,win percent表示胜率,pnl_ratio表示盈亏比。为评判量化策略的优劣,希望年化收益率越高越好,最大回撤越低越好,胜率越高越好,用score表示初步策略优化时的策略评分。
score = annual_return - 1.1 * drawdown + 0.3 * pnl_ratio。
从结果来看,策略绩效不太会受调仓周期影响。这个选股策略更侧重于股票本身的内在价值和基本面分析,而不是通过调整持股数量或频繁换仓来获取收益。更关注公司的财务状况、盈利能力、行业地位等基本面因素,相信通过对这些因素的深入分析,能够挑选出具有长期投资价值的股票,而不受持股数量多少和换仓周期的干扰。不会因短期市场波动而轻易调整投资组合,而是基于对公司长期价值的判断来持有股票。换言之,更关注股票本身的价值,而不在意K线形态。所以在后面的研究中,我们固定换仓周期5天,每次持仓4只股票。
以一个初步参数调试为例,无论怎么调整市净率上界,选出的股票都几乎恒定,策略绩效也不会改变。经过观察,就算不进行pb筛选,其他选股条件选出的股票都已经小于3了,这说明其他选股条件组合可能蕴含了“低市净率”,利用其他条件筛选的股票从概率上,很可能满足pb<3的要求。
在此不展示参数初步优化的过程,这是一个不断尝试和优化的过程。经过参数初步局部优化,策略选出的股票已经非常有限,平均每天只有5只股票满足,这说明我们的筛选条件已经及其严格。初步的参数设定如下:
sql = """
SELECT
date,
instrument,
m_ta_macd_dif(close) as dif,
m_ta_macd_dea(close) as dea,
1.0/$stock_num AS weight
FROM cn_stock_prefactors
WHERE
-- 股票价格最高限制——购买低价股
close < 10
-- 市盈率较低,低估值
AND pe_ttm > 0 AND pe_ttm < 20
-- 流通市值大于5亿,避免购买不合理股票
AND float_market_cap > $market_cap_threshold
-- 股息率不能太低
AND dividend_yield_ratio > 0.02
-- 市净率较低
AND pb < 3
-- 非ST股票
AND st_status = 0
-- 非停牌股票
AND suspended = 0
-- 净利润增长率
AND net_profit_rate_ttm > 0.1
-- 合理的资产负债率
AND debt_to_asset_lf >= 0.45 AND debt_to_asset_lf <= 0.65
-- 营业总收入环比增长率大于0
AND total_operating_revenue_ttm_qoq > 0
-- 经营活动产生的现金流量净额为正
AND net_cffoa_ttm > 0
--k线不能呈现死叉形态
QUALIFY m_ta_macd_dif(close) > m_ta_macd_dea(close) OR m_lag(m_ta_macd_dif(close), 1) < m_lag(m_ta_macd_dea(close), 1)
ORDER BY date, operating_costs_mrq ASC
"""
在初步参数优化后,我们确定了参数的大致合理范围,这有助于提高参数优化的效率。在初步参数合理范围确认后,带入回测,结果如下。
从回测结果来看,最终的回测结果显示,策略年化在24个点,最大回撤也比较稳定,只有不到15%。策略从19年到现在表现较好,最大回撤非常低,并且年化收益率也非常不错,保持连续七年稳定增长。胜率也超过了55%,夏普比例大于1,说明该策略是一个风险较小的增长策略。对风险比较敏感的投资者可以选用该策略,但如果希望冒更大的风险去博取更高的收益可能,也可以进行初步参数局部优化来提高绩效。
\
5.2 初步参数局部优化
反复强调,本策略希望筛选出本身稳定的股票,而不是通过复杂的参数优化手段来作数据挖掘和数据提取,这样可能导致策略的可解释性弱以及过拟合,实盘稳定性较差。所以对于部分参数,没有必要作参数优化或者作简单的优化即可,但为了保证策略稳定性,需要作参数敏感性分析。
首先,对希望从估值层面优化策略,初步参数选择已经发现选出的股票池市净率普遍非常低,所以对市盈率上界和市净率上界进行遍历时,市净率上限设置的普遍较低。如下min_pe、min_pb分别表示市盈率上界和市净率下界。
从上述结果可以看出,市净率在该范围内变化仍然不影响选出的股票以及最终策略的绩效,这说明这不是重要的影响参数,换言之,设置最大值在一定范围内最终的绩效不会改变。当市盈率太大或太低时,策略绩效都不太好,这说明在20-25区间附近绩效相对达到局部最优。
随后研究股息率最低值和净利润增长率最低值的影响,min_divident表示股息率最低值,min_profit表示最低净利润增长率。从结果来看,股息率太低时最大回撤较高,股息率太高选股条件太严格,选出的股票非常有限。净利润增长率要求太低时容易选到风险股降低绩效,要求太高时可以在一定程度提高绩效,但程度不明显。
本策略希望通过严格的选股条件限制股票种类,故严格保证股票市值大于5亿,非st非停牌,以避免较高的风险。另外,策略要求经营活动产生的现金流量净额为正,避免公司经营不善。
资产负债率对公司非常重要,尤其是希望选择稳定的股票。一开始为避免资产负债率较高时公司存在经营不善的情况,设置的资产负债范围较低,现在尝试对该参数优化。第一列min_debt表示最低资产负债率限制,第二列max_debt表示最高资产负债率限制。
从该结果看,资产负债率上限提高时,策略绩效明显有提高趋势,这说明可能某些资产负债率较高的公司可能更适配我们的选股条件。当然,这说明我们设置初始范围时可能不太合理,再尝试对更高的资产负债率区间遍历。
从结果可以看出,当资产负债率限制的更大时,策略绩效显著提高,这说明我们一开始设置的区间的确不合理,有必要调整该区间。
5.3 最优参数下的回测结果
在调整该参数后,还可以循环上述过程直到找到相对的局部最优,在此不展示详细的流程。基于起始参数设置,结合局部适当参数优化后的结果,在这样的参数设置下,进行2019-01-01年至今的回测,结果如下图所示。
6.参数敏感性分析
6.1 参数敏感性分析的意义
6.1.1 参数敏感性分析的意义
参数敏感性分析是一种用于研究模型中参数变化对模型输出结果影响程度的方法。局部敏感性分析每次只改变一个参数的值,保持其他参数不变,来研究该参数对输出的影响。这种方法简单直观,能清晰地展示单个参数的作用,但无法考虑参数之间的相互作用。全局敏感性分析:同时考虑所有参数的变化及其相互作用对模型输出的影响。它能更全面地反映模型的不确定性,但计算成本较高,分析过程相对复杂。
6.1.2 局部敏感性分析
从两组参数优化的结果可以看出,在一定参数范围内时,score都保持在0.3以上,这说明年化收益率几乎都大于最大回撤,参数不是很敏感。在第二组参数中,每个参数组合对应的策略都跑出来极高的score,这更加说明局部参数不敏感。k线限制条件中,参数改变意味着形态要求不同,如果设置为1,这就是严格的多头排列,而设置为>1的值代表强多头排列,设置为<1代表弱多头排列。可以从选股的行数看出,弱多头条件并不是决定性的,仅仅排除了极少部分的异常股票。
6.1.3 全参数敏感性分析
全参数敏感性分析是一种系统分析方法,用于研究模型中所有参数对模型输出结果的影响程度。它通过改变参数值,观察输出变化,能全面评估参数的重要性,识别关键参数,为模型优化、决策制定及不确定性分析提供重要依据。
6.2 参数敏感性分析
由于本策略固定了某些参数,对局部的参数进行了参数最优化。从回测效果看,策略表现过于良好,故需要进行参数敏感性分析,以确定策略的确有效。为方便衡量策略效果随变量变化的趋势,用最大回撤、累计收益率、年化收益率、盈亏比以及胜率来衡量策略的效果。
max_drawdown列表示最大回撤,toal_return列表示总收益,annual return列表示年化收益率,win percent表示胜率,pnl_ratio表示盈亏比。
为了在图片中更明显展示趋势,统一测度,在敏感性分析的绘图中,对胜率和盈亏比进行了缩放,倍数分别为0.5和0.2.
df['pnl_ratio'] = 0.2 * df['pnl_ratio']
df['win percent'] = 0.5 * df['win percent']
6.2.1 收盘价最低值
在下图中,横坐标表示参数“收盘价最低值”,绘制各项指标关于参数的变化趋势。
从结果来看,收盘价在10左右时策略绩效达到局部最优。在各组参数下,年化收益率超过20%,但最大回撤变化较大,这说明对参数较为敏感。
6.2.2 市盈率最高值
在下图中,横坐标表示参数“市盈率最高值”,绘制各项指标关于参数的变化趋势。
从结果来看,市盈率最大值在20左右时策略绩效达到局部最优。在各组参数下,年化收益率都超过30%,最大回撤也几乎控制在20%以内,变化较小,这说明对该参数不敏感。
6.2.3 市净率最高值
在前文,我们发现市净率在较高范围内时策略绩效不会变动,这说明其他选股条件已经保证选出的股票满足<3的条件了,所以我们尝试对较小的pb进行遍历,观察pb要求更严格时策略绩效会如何变化。在下图中,横坐标表示参数“市净率最高值”,绘制各项指标关于参数的变化趋势。
从结果来看,pb较小时,变化仍然不敏感,甚至在pb继续减小时,策略还可以在控制最大回撤的基础上,继续提高一定的绩效。由此看,pb是一个不敏感的参数。
6.2.4 股息率最低值
在下图中,横坐标表示参数“股息率最低值”,绘制各项指标关于参数的变化趋势。
股息率本身是策略的关键因素,股息率较高说明公司经营良好,愿意分红。股息率越高,筛选条件越严格。在要求太低时,选出的股票不算优质,绩效不够好。在要求太高时,选出的股票太少,最大回撤很小但收益也很低,这说明过于严苛。把握适当的筛选尺度非常关键。
6.2.5 营业总收入环比增长率最低值
在下图中,横坐标表示参数“营业总收入环比增长率最低值”,绘制各项指标关于参数的变化趋势。事实上,净利润增长率大于0.1是比较严格的要求,为了考察变化趋势,只需要研究较小范围内的敏感性即可。
不难看出,策略绩效对净利润增长率最低值参数不敏感。最大回撤非常稳定、年化收益率也非常稳定。
6.2.6 净利润增长率最低值
在下图中,横坐标表示参数“净利润增长率最低值”,绘制各项指标关于参数的变化趋势。事实上,净利润增长率大于0.1是比较严格的要求,为了考察变化趋势,只需要研究较小范围内的敏感性即可。
策略绩效对净利润增长率最低值参数不敏感。最大回撤非常稳定、年化收益率也非常稳定。
除了这些参数,我们并没有考察st股和停牌股,以及最小市值要求、现金流为正的要求,这些都是出于稳定性条件。本策略的目标是保证严格筛选条件,没有必要对其作参数性分析,即不把其看作参数。
7.策略分析
7.1 选股分析
从策略回测看,在6年内购买的股票几乎都是能源行业的国企,并且具有很强的地区性。除此之外,它们具有很强的宏观经济关联度,并且具有一定的区域垄断性或资源优势。
7.2 压力测试
首先,将策略从2015年1月1日运行至今,观察一下策略的绩效。
上述回撤结果发现,2015年到2019年,几乎没有股票能够满足我们的选股条件。结合我们的选股条件,我们推测是我国政策推动了新能源产业的发展,这些公司的股息率提高,净利润增长率也在一定程度提高。
例如,《“十四五” 现代能源体系规划》:明确了非化石能源消费比重、发电装机容量等具体目标,为新能源产业发展指明了方向,引导新能源国企按照规划要求进行产业布局和项目建设,推动新能源产业的规模化、高质量发展。《关于深化新能源上网电价市场化改革 促进新能源高质量发展的通知》:推动新能源上网电量全面进入电力市场,通过市场交易形成价格。完善现货市场和中长期市场交易及价格机制,建立新能源可持续发展价格结算机制。
这更加证明了这是一个适合A股政策市的策略,即更关注政策推动的股票增长,而不是技术面指标。
8.交易成本与滑点
万3 千1 最低五元
9. 策略完整代码
在此附上完整的策略代码,包括初步回测、初步参数优化后的回测、最终策略的回测、参数局部最优化、参数敏感性分析。
{{pro}}
https://bigquant.com/codesharev3/2763b4e3-3f15-4c88-a819-b16417bf8fb2
\