选股阈值怎么设:查看边界附近哪些股票反复进出
选股阈值敏感性,是固定数据和股票池,只移动一个明确门槛,观察研究名单怎样变化。先选档位,再执行并比较真实成员集合,分出始终入选与靠近边界的股票。这是研究工作量和规则边界检查,不是回测调参,也不证明某个条件具有收益预测能力或统计稳健性。
本例改变市盈率上限,固定增长条件,用合成输入实际运行集合比较,检查成员变化方向,并拒绝一个故意注入的非嵌套结果。CoTrading相应阈值预览仍为规划或待核实;本地脚本不连接行情,也没有通过未来表现选择最赚钱的门槛。产物是一份可以复查的范围实验。
除一个门槛外全部冻结
保存股票池、输入值、字段定义、缺值政策、规则版本和观察日期,明确只改变哪个参数及其运算符。严格低于与不高于不是同一条件。若一边改变市盈率阈值,一边把盈利分母换成下一年,就无法干净解释成员为什么变化;数值表面相近也不能当作同一次单变量实验。
AAA到EEE市盈率依次17、18、20、21、23,增长均0.12。FFF市盈率19、增长0.08;GGG缺市盈率、增长0.12。共同要求为有值的正市盈率与增长至少0.10,市盈率严格上限档位18、20、22。所有行同一合成快照,实验中不自动更新任何字段。
档位应有操作理由,例如可处理研究范围或业务要求本身的精度,不根据后来收益反选。本例没有入选后的价格和绩效指标,因此不能回答哪个门槛更有投资价值。看到某档位候选太多可以提出范围选择,但这与证明该档位经济上最佳不同,报告要分开。
执行前先写预期方向
严格市盈率上限提高,条件变宽;其他输入固定时,18档通过者应包含于20档,20档应包含于22档。集合应嵌套,股票不应仅因这一上限提高就消失。先写方向再运行,才能把不符合预期的输出当作需要调查的信号,而不是事后想一个理由解释。
这种预期取决于完整规则。若另加只取最便宜两只、排名总体变化或同步调整其他条件,简单嵌套未必成立,应把这些操作分离。本例没有研究容量截断,也没有软评分排序。阈值预览与最终排序可以相邻使用,但不能混成无法定位变化来源的一步。
GGG缺市盈率,整个档位网格都不应通过填零变成低估值。FFF始终被固定增长挡住,即使市盈率门槛已经放行。它们说明放宽一个数字不能解决所有未入选原因,最终报告应保留其他排除条件与未知记录,避免读者以为全部股票都只受PE影响。
执行预先声明的档位
members = [{symbol for symbol, pe, growth in rows
if pe is not None and 0 < pe < cutoff and growth >= .10}
for cutoff in grid]
for left, right in zip(members, members[1:]):
if not left <= right:
raise ValueError("non_monotone_membership")
stable = set.intersection(*members)
union = set.union(*members)
Python集合官方参考说明子集、交集和并集操作。这里运算对象是证券身份,不是独立统计观测。转展示表时按固定标识排序,避免无序存储造成表面顺序变化,让审阅者误以为成员发生改变。
下载完整示例。使用Python 3.12+、标准库与合成数据,运行python R526.py。作者文件为docs/growth/research/round-5/examples/R526.py。
实际输出18档一只、20档两只、22档四只,依次为AAA;AAA与BBB;AAA、BBB、CCC、DDD。断言核对每个集合、嵌套关系,以及输入行散列未变化。额外注入前档只有AAA、后档只有BBB的集合,确认检查抛出非单调错误,即使两档候选数都为一也不能通过。
读边界表时核对等号
| 严格上限 | 成员 | 相对前档新增 |
|---|---|---|
| 18 | AAA | 初始成员 |
| 20 | AAA、BBB | BBB |
| 22 | AAA、BBB、CCC、DDD | CCC、DDD |
BBB恰好18,不通过第一档;CCC恰好20,不通过第二档。这些等号案例验证真正运算符。若用户原意是“不超过”,应修改规则并重写预期边界,而不是认为当前结果少就悄悄加等号。规则与样例一起变更,下一次维护才知道哪个行为是有意选择。
稳定交集为AAA,并集为AAA、BBB、CCC、DDD;边界成员是并集减交集,即BBB、CCC、DDD。这里稳定只表示这三个档位与固定快照上的成员稳定,不是跨时间稳定、统计显著或对未知市场环境稳健。名称应保留适用范围,不能缩写成“稳健股票”。
接近精度边界的财务数据,应明确数值表示,比较前使用未舍入观测。Decimal官方文档说明十进制表示。本例整数PE避免浮点边界,但真实来源若只显示两位小数,要说明阈值比较究竟用显示值还是更高精度底层值。显示相同不必然代表比较值相同。
不把重复成员当更多机会
三个候选数量相加是七,并集却只有四只股票。七是股票乘档位的成员出现次数,不是七家独立研究对象。AAA出现三次、BBB出现两次,单报总和会夸大实验产生的覆盖。表中同时写唯一股票数和成员出现次数,才能避免相同公司被反复计为新增机会。
数量表必须附成员迁移。两个档位数量相同也可能换了全部股票,在本次单调实验里这就违反嵌套。注入的AAA换BBB反例专门保留数量一,却改变身份并触发错误。仅看折线图上的候选数量无法发现这个问题,所以逐股集合是必需交付,不是可选附件。
遇到方向异常先比输入与配置,再写经济解释。检查档位间是否刷新数据、另一条件是否变化、是否存在排名截断。不能在实验没有真正固定之前,就把程序不一致称为某只股票对门槛特别敏感。修正后重新执行整张网格,保留错误运行供查证。
以研究容量选择范围
研究者可以把一只、两只、四只的清单与阅读精力比较。选择可处理范围是合理操作决定,前提是放宽后的要求仍回答原问题,并保存选择依据。选定档位另行记录,不覆盖完整网格,也不把被放弃方案从历史中删除。今后容量变化可以在同一证据上重新判断。
稳定集不应直接叫最好,边界集也不应叫差。边界股只是受指定门槛范围影响,值得检查取值精度和最近修订;离阈值很远的股票同样可能数据有问题或业务不适用。筛选成员位置不能代替来源质量与公司研究。下一轮工作可以优先核对最接近等号的记录,但这是研究安排而非预测结论。
保存可以重放的敏感性包
交付冻结输入引用、档位、成员集合、数量、稳定交集、边界表及单调检查结果,包含固定增长条件与缺市盈率处理。最终采用哪个档位与实验输出分开,审阅者才能看出这是研究决策而非脚本自动挑选。为每次运行保留时间与输入版本,防止后来数据覆盖旧实验。
新数据、来源更正或规则定义改变后,重跑整个档位网格,在可比快照之间解释变化。不要原地更新旧实验输入,再说过去成员改变。这样阈值敏感性真正交付的是研究工作量与边界成员的可操作检查,而策略优化和收益评价继续由各自设计的任务完成。
把容量决定与实验结果分开
记录最后采用的上限、可用研究容量,以及该范围仍回答原请求的理由。实验提供信息,不替研究者自动选择。后来时间增加时,可以在保留网格上重新作工作量决定,不需要重写旧筛选曾经产生的结果。研究容量变化不应被包装成指标有效性提升,也不意味着先前少看几只就是程序错误。
对边界观测先查来源精度与最近修订,再解释经济含义。发布指标舍入越过严格边界,成员就可能改变,但业务本身变化很小。保存实际比较输入与发布精度,才能重现这种迁移。若决定以更宽容区间处理测量精度,应另外声明新规则,不能在结果层面临时把不通过改成通过。
扩大网格时保留原档位,并解释新增理由。看到候选不喜欢,就替换掉原范围,还继续称预先选定,是不诚实的实验记录。完整成员对比,包括重复股票、未入选与未知行,才是有用证据;挑一个漂亮名单对应的门槛,无法说明边界究竟在哪,也不便于下一位研究者复核选择过程。
输出可以额外保存每股首次进入的档位,但不能把它当独立机会数或收益强度。它只描述本次固定输入上规则何时放行,与未来上涨概率没有对应保证。这样新增的解释维度仍然来自实际执行,而不是在简单数量表上附加未经验证的投资意义。
常见问题
候选数量相同就说明成员稳定吗?
不能,要比较标识,相同数量可能隐藏完全替换。
每个档位都通过就是稳健吗?
仅表示当前网格与快照上的成员稳定,不说明未来收益或其他未测变化。