每个维度的量化标准、阈值、权重、冲突处理规则
第97页 · 预计14页
上一章我们搭建了四维框架的整体骨架,确定了“产业+资金+基本面+技术”的四维度结构与权重分配。但骨架搭好了还不够,真正决定策略能不能落地、能不能复现的,是每个维度的细节定义:阈值取多少、依据是什么、特殊情况怎么处理、维度之间冲突了按什么优先级解决。这些细节模糊的话,看似完整的框架最后还是会沦为主观判断的工具。
对方听完框架概述后,问了一个很实际的问题:“老师,超跌的30%阈值是固定的,还是可以根据市场环境调整?”
这个问题触及了技术面维度的核心,也拉开了整个框架系统化定义的序幕。我决定将每个维度都拆解为三个层次:基准定义、动态调整规则、极值处理规则,再配套连续得分函数,把所有模糊地带全部量化清楚。
技术面是整个逆向策略的安全垫,也是最容易产生歧义的维度。30%的超跌阈值,是刻死的数字,还是可以随市场环境浮动?回撤是从年初算还是过去一年算?价格用不复权还是前复权?这些细节差一点,结果可能差很多。
我先给出最基础的标准定义,所有动态调整都基于这个基准衍生:
回撤基准价格:过去252个交易日(约一年)的最高收盘价(前复权)。之所以用252个交易日,是因为A股全年交易日大概在250-252天左右,过去一年的高点是技术分析中公认的重要压力位,比自然年度高点更合理——自然年度到1月1日就重置,会出现年初所有股票回撤都归零的失真。
回撤幅度计算公式:(当前收盘价 - 252日最高收盘价) / 252日最高收盘价 × 100%,结果为负数,代表下跌幅度。
基准阈值:≤ -30%,也就是从一年高点跌够30%,才算进入超跌区间。
这里必须强调前复权处理:如果个股在过去一年有过送股、转增、分红,必须用前复权价格计算回撤,否则会把除权导致的价格跳空当成下跌,严重高估回撤幅度。比如10送10的股票,价格从20元跌到10元,不复权看是跌了50%,复权后实际可能只跌了10%,完全不是一个概念。这是新手算超跌最容易犯的错误,没有之一。
基准阈值不是一成不变的,要根据大盘整体环境动态调整,本质是让超跌的“相对深度”保持一致,而不是绝对数值一致。牛市里股票普遍跌得浅,熊市里普遍跌得深,固定阈值会导致牛市选不出股票、熊市选出太多垃圾股。
| 大盘状态 | 定义 | 超跌阈值 | 理由 |
|---|---|---|---|
| 正常市 | 上证指数20日跌幅在-5%到+5%之间 | -30% | 标准安全边际 |
| 熊市 | 上证指数20日跌幅 > 5% | -25% | 整体估值下移,个股普遍超跌,需放宽以捕捉机会 |
| 牛市 | 上证指数20日涨幅 > 10% | -35% | 个股难有深度回调,需收紧以避免无股可买 |
熊市放宽到25%,是因为系统性下跌中,优质股票也会被错杀,本来25%的回撤就相当于正常市30%的超跌程度,再等30%可能就错过底部了。牛市收紧到35%,是因为牛市情绪高,回调20%就算很深了,30%可能都跌进趋势反转了,必须提高标准才能保证是真超跌,不是趋势走坏。
两种极端情况需要单独处理,不能直接套公式:
如果回撤幅度 > -15%,直接判定为“无超跌”,该维度得分归零。哪怕其他维度满分也无法进入前十,因为缺乏最基本的安全边际。15%以内的下跌属于正常波动,根本算不上超跌,要是这个程度都能入选,整个策略就从逆向变成追涨了,底线不能破。
如果回撤幅度 < -60%,需人工复核。跌这么深,很可能不是情绪性超跌,而是公司基本面出现重大恶化导致的价值毁灭,比如财务造假暴露、主业逻辑崩塌、行业被政策淘汰。这种股票跌了不会反弹,反而可能继续跌,绝对不能因为“超跌”就买,必须人工排查清楚下跌原因。
对方追问:“超跌得分怎么量化?不是简单的通过/不通过吧?”
是的。在四维框架中,每个维度都输出0-100的连续得分,而非二元开关。这样维度之间才能补偿,不会因为差一点点阈值就完全没分,也更能区分超跌的程度深浅。
超跌得分公式为:
超跌得分 = min(100, max(0, (|回撤幅度| - 15) / (45 - 15) × 100))
解释一下:回撤15%得0分,回撤30%得50分,回撤45%以上得100分。线性插值,回撤越深得分越高,完全贴合“超跌排名靠前”的核心诉求。之所以用线性函数,不用更复杂的非线性,是因为简单稳健,参数少,不容易过拟合。对超跌这个维度来说,能区分深浅就够了,不用搞太复杂的计算。
如果需要批量计算全市场个股的超跌得分,或者验证不同阈值下的超跌因子收益,可访问a-sig.com壹信因子查询平台,内置动态超跌计算模型,支持自定义回撤周期与阈值。
资金面是四维中最容易误用的维度。90%的散户用资金面,都是看一眼当日净流入,正的就觉得有资金进场,负的就觉得资金出逃。但单日主力净流入极易被操纵,尾盘几笔大单就能做出来,专门骗只会看单日数据的人。
所以我设计了三层过滤,层层筛掉虚假信号,只留下真实的资金趋势。
先把数据口径定死,不然后面怎么算都错。
主力净流入 = 超大单净额(单笔成交≥100万元)+ 大单净额(单笔成交20-100万元)。这是行业通用的主力资金定义,对应机构的交易单量。
统一使用Tushare Pro的moneyflow接口,与同花顺DDE大单净量做方向校验。符号不一致时标记为可疑,需调取第三个源仲裁。为什么不直接用一个数据源?因为不同平台的大单阈值、拆分逻辑都不一样,单一数据源很容易偏,两个源对方向,方向一致才可信,方向相反就说明数据有问题,不能用。
这是过滤虚假信号的核心,也是很多人最忽略的一步。
基本要求:近5个交易日中,至少有4个交易日的主力净流入为正。
不允许连续2日净流出,即使累计仍是正数。
近5日累计净流入占流通市值的比例 ≥ 0.3%。
这个“4/5正”的规则,比简单的“5日累计为正”严格得多,但能有效过滤“某一天巨量流入拉正、其余四天全流出”的诱多陷阱。很多主力出货的时候,会找一天拉一根大阳线,放一笔大单进去做出净流入的样子,剩下四天慢慢派货,5天累计下来还是正的,但实际就是出货。有了天数要求,这种模式就被过滤掉了。
累计占比0.3%的门槛,是为了排除金额太小的无效流入。几十万、几百万的净流入,对流通市值几十亿的股票来说根本没影响,推动不了行情,至少要达到0.3%的量级,才算得上有资金主动建仓。
有些资金数据明显异常,是统计bug或者对倒行为,必须剔除,不然会严重干扰判断。
若某日主力净流入绝对值超过该股当日成交额的30%,判定为数据异常或对倒行为,该日数据权重降为50%。正常情况下,主力净流入占成交额的5%-15%是比较合理的,超过30%基本不可能,要么是数据统计错了,要么是主力对倒做量,都不是真实的资金趋势。
若连续两个交易日出现此类异常,整只股票的资金面得分强制归零。连续异常就不是偶然了,基本可以判定是人为做出来的资金信号,没有参考价值。
资金面得分由三部分构成:连续性得分(50%)、强度得分(30%)、趋势得分(20%)。
连续性得分权重最高,因为资金的核心是趋势,持续流入才是真趋势,一天两天说明不了什么。计算方式:5日中正流入天数 × 20。5天全正得100分,4天正得80分,以此类推,少于3天直接0分。
强度得分权重次之,衡量资金流入的力度。计算方式:(近5日累计净流入占流通市值比例 / 1.0%) × 100,上限100分。例如占比0.5%得50分,1%得100分。
趋势得分权重最低,看资金是在加速还是减速。计算方式:近5日净流入 > 近20日净流入/4(即近5日占比大于总流入的25%),得100分,否则得50分。这个指标识别资金是否在加速流入,加速流入的后续爆发力更强。
最终资金面得分 = 0.5×连续性 + 0.3×强度 + 0.2×趋势。
我向对方举例说明:“生益电子近5日4天正流入,累计占比1.03%,近5日占20日流入77%(远大于25%),得分 = 0.5×80 + 0.3×100 + 0.2×100 = 40+30+20=90分。”
基本面维度的设计理念是:不要求完美,但必须排除烂公司。不用每个公司都是优等生,但不能是差生,更不能是问题公司。
核心因子有三个,满足任意两个即可通过基本面筛选(得分按满足程度计算)。为什么不是三个都满足?因为成长阶段的公司各有侧重,有的营收爆发但还没盈利,有的盈利稳但研发投入高,不用求全责备,有两个维度够强,基本面就过关了。
近三年营业收入复合增长率(CAGR)≥ 20%。
若赛道处于成熟期(如新能源中的部分环节),可放宽至15%。
计算公式:CAGR = (最近年度营收 / 三年前营收)^(1/3) - 1
得分 = min(100, CAGR / 20% × 100)(CAGR超过30%仍按100分计)
为什么营收增长权重最高,不用净利润?因为对于成长期公司,净利润可能被研发投入、资本开支、折旧摊销严重扭曲。比如中芯国际持续高资本开支导致净利润为负,但营收在增长、技术节点在突破。用净利润会错误地排除这类公司。而营收增长是硬道理——市场份额在扩大,产品在被市场接受,利润迟早会来。营收是最不容易被调节的硬指标,比净利润真实得多。
最近年度研发费用 / 营业收入 ≥ 8%。
对于半导体设计、AI软件公司,阈值提高至12%。这类行业本身就是技术驱动,研发投入低的话根本没有未来,所以门槛更高。
得分 = min(100, 研发强度 / 8% × 100)
研发强度是科技公司的“续命钱”,今天的研发就是明天的产品。没有持续高研发投入的科技公司,增长都是昙花一现,很快就会遇到天花板。所以研发强度作为核心因子,权重排第二。
最近报告期ROE(TTM)≥ 10%,且毛利率 ≥ 30%。
对于亏损但高增长的公司(营收增速>50%且PS<8倍),可以豁免ROE要求,但毛利率仍需≥25%。
得分 = 若同时满足ROE和毛利率条件得100分;仅满足一项得50分;均不满足且无豁免得0分。
为什么毛利率不能豁免?因为毛利率代表技术壁垒和定价权。哪怕公司暂时不盈利,只要毛利率够高,说明产品有竞争力,不是靠打价格战抢市场,未来盈利只是时间问题。如果毛利率也低,哪怕营收增长快,也是烧钱换增长,走不远。
近一个月有至少3家券商出具覆盖报告,且评级以“买入”或“增持”为主,加5分。
这是为了引入外部研究力量的验证,但不作为必要条件。很多小市值成长股没有券商覆盖,但不代表不好,所以只加分不扣分,避免把有潜力的小票排除在外。
对方问:“为什么不用净利润?营收增长比净利润更重要吗?”
我解释:“对于成长期公司,净利润可能被研发投入、资本开支扭曲。例如中芯国际持续高资本开支导致净利润为负,但营收在增长、技术节点在突破。用净利润会错误地排除这类公司。而营收增长是硬道理——市场份额在扩大,利润迟早会来。”
如果需要查询个股的基本面评分与历史财务数据,可访问a-sig.com壹信因子查询平台,覆盖全市场财报数据与成长指标,自动计算基本面得分。
产业面维度是四维框架的“方向舵”。权重最高(40%),因为它决定了策略是否站在时代浪潮的正确一侧。方向对了,慢一点也能到;方向错了,再努力也没用。
这不是我自己拍脑袋列的,而是结合工信部赛迪研究院的未来产业目录、A股资本开支方向、券商研报覆盖密度三个维度交叉验证出来的核心赛道,每一个都有真实的产业支撑,不是纯概念。
| 一级赛道 | 二级赛道 | 关键词映射 |
|---|---|---|
| AI算力 | 服务器、光模块、PCB、液冷、交换机 | 英伟达链、800G、1.6T、AI服务器 |
| 先进半导体 | 晶圆制造、设备、材料、先进封装、EDA | 国产替代、成熟制程扩产、HBM |
| 新能源高端制造 | 储能、锂电设备、光伏新技术、风电大型化 | 固态电池、钙钛矿、海上风电 |
| 人形机器人 | 减速器、伺服电机、传感器、行星滚柱丝杠 | 特斯拉链、国产替代 |
| 低空经济 | eVTOL、无人机、空管系统、电池 | 适航认证、商业化落地 |
光有赛道名单不行,还要解决“公司归哪个赛道”的问题。很多公司业务多元,不能简单按行业分类套。
自动映射:基于申万三级行业、中证主题指数、以及财报中“管理层讨论与分析”的关键词匹配。先批量打标,提高效率。
人工复核:对于边界公司(例如一家公司同时有传统业务和新兴业务),要求新兴业务收入占比 > 30%或近一年增速 > 50%才能打上赛道标签。30%的占比门槛,保证赛道业务对公司有实质性影响,不是纯蹭概念。
时效性:每季度更新一次赛道标签,因公司业务转型可能导致标签变更。产业不是一成不变的,公司会转型,标签也要跟着更。
产业得分不是简单的0或1,而是根据股票在赛道中的核心度赋分,越核心得分越高:
核心标的(赛道龙头,收入占比>50%,技术领先):100分
重要标的(收入占比30%-50%,或细分领域龙头):80分
边缘标的(收入占比10%-30%,或供应链二三级):60分
概念标的(收入占比<10%,仅蹭概念):30分(即使有标签,得分也很低,实际难以进入前十)
我向对方举例:“中际旭创,光模块全球龙头,AI相关收入占比超过70%,属于核心标的,产业得分100分。某家传统公司宣布‘布局AI’,相关收入不到1%,即使被打上AI标签,产业得分只有30分,几乎不可能靠总分入围。”
这样设计的好处是,不用人工去剔除概念股,得分自然就低,排不到前面,自动就被过滤掉了。
对方很好奇权重是如何确定的:“老师,产业面40%、资金面25%、基本面20%、技术面15%——这个比例是经验值还是做过测试?”
我承认,最初是经验值,但后续用历史数据做了敏感性分析。测试方法很简单:取过去一年(2024年5月-2025年4月)的月度筛选数据,测试不同权重组合下,入选组合在未来20个交易日的平均超额收益(相对于沪深300)。
一共测试了五种权重组合:
| 组合 | 产业 | 资金 | 基本面 | 技术 | 平均超额收益 |
|---|---|---|---|---|---|
| A(基线) | 40% | 25% | 20% | 15% | +3.2% |
| B | 50% | 20% | 15% | 15% | +2.8% |
| C | 30% | 35% | 20% | 15% | +2.5% |
| D | 40% | 20% | 25% | 15% | +2.9% |
| E | 40% | 25% | 15% | 20% | +3.0% |
结果很有意思:基线组合A的超额收益最高。
提高产业权重到50%(组合B)反而下降,说明过度集中于赛道会忽略资金验证,光有故事没有钱,涨不动。
提高资金权重(组合C)也下降,说明资金面信号噪声较大,不能过分依赖,权重太高会被假信号干扰。
提高基本面权重(组合D)和技术面权重(组合E)也都略低于基线。
“这个测试样本有限,但至少说明基线权重在历史数据上表现稳健。”我补充道。不是我不想调更高,是调了之后效果反而不好,基线是反复测试出来的最优解,不是拍脑袋定的。
框架运行中必然遇到维度间冲突。最典型的就是:产业面、技术面、基本面都很完美,但资金面为负,连续流出;或者资金面强劲,但基本面很差。这种时候听谁的?必须有明确的优先级规则,不然又回到主观判断。
我设定了五条冲突处理规则,按优先级从高到低排列:
规则一(最高优先级):资金面为负且近5日累计流出占流通市值>0.5%,直接剔除。
无论其他维度多高,不与资金趋势对抗。短期资金流向是市场最直接的投票,资金持续大幅流出,说明市场用脚投票,再好的逻辑也可能短期不涨,甚至继续跌。和趋势对抗,吃亏的是自己。
规则二:基本面得分为0(即不满足任何核心因子且无豁免),直接剔除。
不买烂公司。基本面是底,底漏了,上面再好看都是空中楼阁,随时可能爆雷。
规则三:技术面得分为0(回撤<15%),直接剔除。
不追高。这是逆向策略的底线,不能破。哪怕其他维度再好,没跌够就不能买,不然就不是逆向策略了。
规则四:产业面得分<60分(边缘标的),但其他三维总分>240分(满分300,即平均80分以上),可保留。
允许“优质小赛道”补足产业不足。一只基本面扎实、资金持续流入、深度超跌的传统行业股票,也可以进入候选——只是综合得分会被产业维度拉低,很难进前十。这符合我们的目标:优先选未来产业,但不完全拒绝传统行业中的黄金。
规则五:资金面与基本面方向相反(例如资金大幅流入但基本面得分<50分),触发“警告标记”
需要在最终输出时附加说明“资金驱动型,基本面薄弱”。不是直接剔除,因为资金驱动也有行情,但要提示风险,让使用者知道这是纯资金推动,不是基本面驱动,心里有数。
对方听完后总结:“老师,也就是说,三个维度有硬性门槛:资金不能持续流出、回撤不能太小、基本面不能太烂。产业可以稍微妥协,如果其他足够强?”
“对。产业方向很重要,但不是一票否决项。一只基本面扎实、资金持续流入、深度超跌的传统行业股票,也可以进入候选——只是综合得分会被产业维度拉低,很难进前十。这符合我们的目标:优先选未来产业,但不完全拒绝传统行业中的黄金。”
框架定义完成后,我将所有规则写成了Python函数,后续模拟盘系统都是基于这些函数搭建的。核心函数包括:calc_technical_score(ticker):计算超跌得分calc_fund_flow_score(ticker):计算资金面得分calc_fundamental_score(ticker):计算基本面得分calc_industry_score(ticker):计算产业得分screen_stocks(date):执行全市场筛选,返回综合得分前10
对方问:“这个框架多久运行一次?”
“每日收盘后运行一次,以前一日数据生成当日买入名单。第二天开盘执行。这就是我们从第五部开始要构建的模拟盘系统的基础。”
如果需要获取完整的四维选股Python源码,或者定制适配自身需求的选股策略代码,可访问intoquant.com壹信量化官网,提供专业的代写源码与策略部署服务,直接输出可实盘运行的自动化脚本。
def sensitivity_analysis(df, base_weights, ranges):
"""
敏感性分析:测试不同权重组合下的策略收益
df: 历史得分数据
base_weights: {'industry':0.4, 'fund':0.25, 'fundamental':0.2, 'tech':0.15}
ranges: 每个权重的测试范围,如 {'industry':[0.3,0.35,0.4,0.45,0.5]}
"""
results = []
for ind_w in ranges.get('industry', [base_weights['industry']]):
for fund_w in ranges.get('fund', [base_weights['fund']]):
for fnd_w in ranges.get('fundamental', [base_weights['fundamental']]):
tech_w = 1 - ind_w - fund_w - fnd_w
if tech_w < 0:
continue
# 计算综合得分和组合收益
df['total'] = ind_w*df['ind'] + fund_w*df['fund'] + fnd_w*df['fnd'] + tech_w*df['tech']
top10_returns = df.groupby('date').apply(lambda x: x.nlargest(10, 'total')['return'].mean())
results.append({
'ind_w':ind_w, 'fund_w':fund_w, 'fnd_w':fnd_w, 'tech_w':tech_w,
'avg_return': top10_returns.mean(),
'sharpe': top10_returns.mean() / top10_returns.std()
})
return pd.DataFrame(results).sort_values('sharpe', ascending=False)
这段代码可以批量测试不同权重组合的表现,帮你找到最优权重,不用手动一个个试。
如果相邻权重组合(相差5%)的收益差异小于10%,说明权重稳定,策略鲁棒性好,不会因为参数微调就大幅波动。
如果某权重组合收益显著高于其他(超过2倍标准差),说明过拟合,刚好卡在历史最优值上,换个时间段大概率失效。
对于资金量小于50万的用户,建议提高资金面权重(因为可以通过小资金跟随主力),降低产业面权重。小资金船小好调头,跟着资金做反应更快。
对于资金量大的用户,建议提高产业面权重(因为需要提前布局,不能等主力进场才买),大资金进出冲击大,必须提前站在正确的赛道上,不能跟着资金追涨杀跌。
本章内容节选自原创量化书籍《因子会说谎》,更多四维选股框架细节与回测验证方法,可登录intoquant.com查阅完整内容。
本章完。下一章将呈现四维框架下的最终榜单,对每只入选个股进行深度解析,并展示其四维得分雷达图。
⚠️ 风险提示:本书内容仅为量化研究与知识分享,不构成任何投资建议。套利交易存在基差、费率、流动性、平台与极端行情等风险,历史表现不代表未来收益。投资有风险,入市需谨慎,请自主决策、量力而行。
💡 键盘 ←/→ 翻章 · T 键切换目录