第 5 课
哪些九拍更值得买?
用统一尺度比较少量候选筛选器,并把通过事前标准的结果冻结为下一阶段买入规则。
上一节最后,1.35% 从一个差点被当成答案的数字,变成了下一个问题前面的冒号:
同样是下行九拍,能不能加入一些条件,找到历史表现更好的一部分?
蛙兄打开实验结果,发现桌面上还躺着 1,908 次合格九拍,而且它们的十日表现差得很远。
“能不能从里面找出更值得继续研究的一部分?”
他在纸上写下四个词:
MACD
成交量
市值
行业
“我们把它们全试一遍,哪个收益最高就用哪个。”
蛙博士看了一眼。
“可以试,但先说清楚。我们是在研究筛选器,不是在举行历史收益选美比赛。”

筛选器,其实我们每天都在用
打开外卖软件时,附近可能有几百家店。
我们通常不会从第一家慢慢看到最后一家,而是先加几个条件:
- 现在还在营业;
- 半小时左右能送到;
- 价格不要太离谱;
- 今天想吃面,不想吃汉堡。
一轮筛选以后,几百家店可能只剩十几家。
但筛选器不会保证每一家都好吃。它只是按照我们给出的条件,缩小了候选范围。
九拍实验也一样。
原来,我们面对的是全部 1,908 次合格下行九拍。加入一个条件以后,有些九拍会被保留,有些会被跳过。然后,我们再看看留下来的这部分,历史表现有没有发生变化。
全部合格下行九拍
→ 加入一个条件
→ 留下一部分九拍
→ 与原来的九拍比较
这就是本课所说的买入筛选器。
它不是水晶球,也不负责保证盈利。
它只回答:这一次候选事件,要不要继续进入买入名单?
九拍、买入时间和筛选器,不是同一件事
这三个概念很容易搅在一起,我们先把它们摆开:
| 它是什么 | 它负责回答什么 |
|---|---|
| 下行九拍 | 什么时候出现了一次候选事件? |
| 固定买入时间 | 如果决定参与,什么时候买? |
| 买入筛选器 | 这次候选事件是保留,还是跳过? |
本课不会重新寻找一个更晚、更漂亮的买入日期。
数字 9 仍然要等到当天收盘以后才能确认。如果一次九拍通过筛选,仍然在下一根有效 K 线开盘时进入。
筛选器改变的是“买不买”,不是“什么时候买”。

这次先认识四种筛选器
我们从四个比较容易理解的方向开始。
| 筛选器 | 它在问什么 | 课程参考版本怎样看 |
|---|---|---|
| MACD | 九拍结束时,价格动量有没有开始改善? | 比较当天与前一根有效 K 线的 MACD 柱 |
| 相对成交量 | 当天成交是不是比这只股票平时更活跃? | 与此前 20 根有效 K 线的平均成交量比较 |
| 市值 | 不同规模公司的九拍表现是否不同? | 按当天相对市值分成小、中、大三组 |
| 行业 | 不同行业里的九拍表现是否不同? | 使用数据中固定的 11 个教学行业 |
这里的四个方向都不是唯一分法。
MACD 可以看柱体变化,也可以讨论零轴、金叉和其他状态;成交量可以和过去 5 天、20 天或者更长时间比较;市值也可以使用固定金额线,或者按照每天的相对排名分组。
这些方法没有一条写着“官方唯一正确”。不同分法回答的是稍有不同的问题。
本课不会把它们全部展开。我们先学会和 AI 商量一个说得清楚的版本,再看看它会带来什么结果。
开始以前,先把同一把尺子放在桌上
筛选器可以改变,下面这些内容暂时不变:
候选事件:完整下行九拍
原始基准:所有合格下行九拍都进入
买入时间:数字 9 确认后的下一根有效 K 线开盘
临时退出:从买入日算起,第 10 根有效 K 线收盘
研究数据:2021—2022 年
留出数据:2023 年继续封存
为什么还在使用固定十日退出?
因为我们现在只想比较买入筛选器。如果一边更换筛选器,一边又改变卖出时间,最后即使收益变了,也很难说清楚是谁带来的变化。
十日退出目前只是一把统一的比较尺,不代表我们已经找到了最终卖点。
这一次,不必完全照着课程走
这里可以把实验室打开,和 AI 认真聊一轮。
你可以继续使用前面那段对话。如果对话已经很长,也可以在同一个实验室文件夹里新开一段 Codex 对话。无法使用 Codex 时,依然可以使用 WorkBuddy。
新对话不会自动知道我们刚刚研究了什么,所以先让它查看现有文件,而不是让它凭空续写故事。
可以从下面这段话开始:
开放探索|先讨论,不急着计算
我已经在当前项目中完成了一次下行九拍事件研究。请先查看现有数据、程序和研究摘要,用大白话告诉我:当前冻结的九拍定义、合格公司名单、研究日期、买入时间、十日临时退出规则,以及现有十日事件数量和基准结果分别是什么。
这一轮我想研究买入筛选器。候选方向包括 MACD、相对成交量、市值和行业。请先不要计算收益,也不要读取、计算或透露 2023 年的价格方向、九拍信号和收益。
请分别解释这四种筛选器可以怎样定义,并告诉我不同分法各自在回答什么问题。不要自动穷举大量参数,也不要替我寻找历史收益最高的组合。如果我不知道怎样选择,请推荐一套简单、适合第一次实验的划分方法。
在开始计算以前,请和我确认:本轮采用哪些分组、每组至少保留多少事件、准备查看哪些结果,以及怎样避免只挑最好看的数字。最后把确认后的版本写成一份简短实验约定,等我同意后再运行。
AI 给出的划分方法不一定和课程一样。
你可以追问它:
- 为什么成交量要和过去 20 根 K 线比较?
- 如果改成 10 根,会改变我们正在问的问题吗?
- MACD 的“改善”到底指什么?
- 市值为什么可以按每天的相对排名分组?
- 某个组只剩几十次事件,还值得相信吗?
这些问题没有要求每个人得到同一个答案。
当你和 AI 商量出一个当前愿意尝试的版本,就让它冻结这版约定,再继续运行:
开放探索|运行当前版本
请按照我们刚刚确认并保存的实验约定运行买入筛选器实验。九拍定义、合格公司名单、买入时间、十日临时退出和研究日期保持不变,2023 年继续封存。
请一次只比较一种筛选器,保留所有预先约定的组别。每组至少汇报事件数、公司数、九拍完成日期数、平均收益、中位数、正收益比例和收益分布;如果事件明显集中在少数日期,也要主动指出。
不要只展示最漂亮的组,不要因为结果不好就临时移动分界线,也不要继续自动尝试新的参数和组合。请保存完整尝试记录、清晰图表和一份大白话摘要。最后告诉我哪些结果值得继续观察、哪些没有改善,以及当前证据还不能支持什么。
开放,不等于让 AI 一直试到出现高分
蛙兄很快发现,和 AI 对话时有一句话特别诱人:
“请继续优化,直到找到收益最高的参数。”
这句话听起来很努力,实际上可能让 AI 在历史数据里不停翻抽屉,直到碰巧翻出一个漂亮答案。
我们当然可以提出新问题,也可以在下一版实验里修改规则。但每次修改都应该留下记录:上一版试了什么、为什么不满意、下一版改变了什么。
不能让 AI 擦掉前面的答卷,只留下最高分的那一张。
这也是为什么开放探索仍然有三条底线:
- 不打开 2023 年;
- 不同时改变九拍、买入时间和临时退出;
- 不把“目前找到的候选”写成“已经找到最优解”。

课程也跑了一套参考实验
开放探索以后,我们还需要一条共同路线。
否则,下一阶段每个人使用的买入规则都不同,课程里的样本数、图表和结论也就无法继续对照。
因此,我们在查看筛选器收益以前,固定了一套简单的课程参考版本:
- MACD 使用标准
12 / 26 / 9参数,只看数字9当天的柱体是否比前一根改善; - 相对成交量使用当天成交量除以前 20 根有效 K 线平均成交量,并按
< 0.8、0.8—1.2、≥ 1.2分组; - 市值按照数字
9当天、全部合格公司中的相对排名分成小、中、大三组; - 行业直接使用数据中固定的 11 个 PY_L1 教学行业。
课程还提前放了一道比较保守的门槛。
一个候选组不能只剩很少几次事件,也不能只在平均收益上好看。我们同时查看中位数、正收益比例、去掉少量极端值后的平均表现,以及事件是否过度挤在少数日期。
这套划分不是唯一正确答案,也没有穷举所有可能参数。
它只是课程为了继续向前走,事先选定的一次有限实验。
课程使用的公司、行业与行情均为虚构教学数据。下面的结果只能帮助我们学习研究过程,不能用于评价现实行业或指导现实交易。
四个筛选器交出了什么结果?
原始基准仍然是 1,908 次合格下行九拍:
| 事件数 | 平均收益 | 中位数 | 正收益比例 | 1% 截尾平均收益 |
|---|---|---|---|---|
| 1,908 | 1.35% | 0.50% | 53.14% | 1.16% |
加入筛选器以后,结果没有整齐地指向同一个方向。
| 课程参考分组 | 事件数 | 平均收益 | 中位数 | 正收益比例 | 课程怎样处理 |
|---|---|---|---|---|---|
| MACD 开始改善 | 873 | 0.85% | 0.00% | 49.83% | 没有改善 |
| 相对成交量接近平时 | 456 | 2.47% | 1.27% | 59.65% | 数据漂亮,但时间集中度超过预设上限 |
| 相对成交量偏高 | 217 | 2.05% | 1.52% | 55.30% | 数据漂亮,但时间集中度超过预设上限 |
| 小市值 | 607 | 2.24% | 1.37% | 58.48% | 数据漂亮,但时间集中度略微超过预设上限 |
| PY-04 城市脉络 | 195 | 2.82% | 1.26% | 55.38% | 通过课程门槛 |
| PY-10 出行网络 | 151 | 2.71% | 1.93% | 62.25% | 通过课程门槛 |
这张表只放了理解结论最关键的分组。完整实验仍然保留了其他成交量、市值和全部 11 个行业的结果,没有把表现不好的组删掉。
不同筛选器存在少量数据缺失,因此课程正式判定时,每个分组都与“拥有该筛选器数据的合格基准”比较,而不是只看上表中的全体基准。

数据更漂亮,为什么还是没有通过?
相对成交量接近平时、相对成交量偏高和小市值组,平均收益、中位数和正收益比例都比各自基准更好。
如果只举行“谁的收益更高”比赛,它们完全有资格站到领奖台上。
但上一节那场雨还没有停。
如果一组事件过度集中在少数市场日期,它们可能只是一起赶上了同一段有利行情。课程在看结果以前,已经规定了可以接受的集中程度。
这些组越过了那条线,所以没有进入课程候选。
这不等于它们已经被证明无效,也不代表那条集中度界线放到任何研究中都正确。它只表示:按照这一次提前写好的保守规则,我们不能看到漂亮数字以后,再临时把门槛搬开。
为什么最后不是平均收益最高的那一组?
通过课程门槛的组有两个:
| 候选 | 事件数 | 平均收益 | 中位数 | 正收益比例 | 1% 截尾平均收益 |
|---|---|---|---|---|---|
| PY-04 城市脉络 | 195 | 2.82% | 1.26% | 55.38% | 2.61% |
| PY-10 出行网络 | 151 | 2.71% | 1.93% | 62.25% | 2.68% |
PY-04 的平均收益更高。
如果只看这一列,它应该获胜。
但课程在实验以前就约定:多个候选同时通过时,先比较中位数改善,再比较正收益比例改善和样本覆盖,不让少数高收益事件单独决定冠军。
PY-10 的中位数和正收益比例更高,1% 截尾平均收益也略高。因此,课程参考路线最终选择了 PY-10“出行网络”。
这不是“所有分法里的最优答案”。
更准确的说法是:
在这份虚构教学数据、这套九拍定义、这组筛选器分法和这套提前确定的选择规则下,PY-10 是课程准备带入下一阶段的候选。
到这里,课程出现了一处分岔
你不必因为课程选择了 PY-10,就删除自己的实验结果。
接下来有两条都合理的路。
跟随课程参考路线
使用 PY-10 作为买入筛选器。
后面的事件数量、卖出实验、图表和结果更容易与课程保持一致。第一次走完整条研究链时,这条路会更省力。
保留自己的路线
使用你和 AI 冻结的筛选器,或者继续保留“所有合格下行九拍都进入”的原始规则。
后续依然可以研究卖出和账户回测,只是样本数量、收益数据和最后结论可能与课程不同。这不是错误,而是研究在不同规则下自然产生的分岔。
唯一不建议做的是:一会儿使用自己的筛选器,一会儿又拿课程数字填补结果,最后谁也说不清当前运行的究竟是哪套规则。

把买入规则写成一张能交接的卡片
如果选择课程参考路线,冻结后的买入规则是:
- 研究对象:通过数据体检的 292 家虚构公司;
- 候选事件:按照已确认规则完成的下行九拍;
- 买入筛选器:公司属于 PY-10“出行网络”教学行业;
- 信号确认:数字
9当日收盘以后; - 实际买入:下一根有效 K 线开盘;
- 当前证据:来自 2021—2022 年研究数据;
- 尚未处理:最终卖出规则、有限资金、手续费、滑点、市场基准和 2023 年留出验证。
注意,固定十日退出没有被写进最终买入规则。
它完成了筛选器之间的比较任务,但还没有资格冒充最终卖点。
无论选择课程路线还是自己的路线,都要把决定告诉本地 AI,并让它保存交接单。只在网页上看过 PY-10 的名字,项目并不会自动知道你准备采用它。
可以把下面这段话交给 AI:
冻结我的买入规则
请停止继续搜索新的筛选器和参数,先向我确认最终选择:采用课程参考路线,还是保留我自己的路线。课程参考路线是:在已经冻结的合格公司和下行九拍事件中,只保留 industry_id 为 PY-10(出行网络)的事件;数字 9 当日收盘后确认,下一根有效 K 线开盘进入。不要替我默认选择。
确认以后,根据项目中的实际数据和已有实验记录,把选定规则及相关文件位置保存为一份独立的研究交接单。如果选定版本与刚刚运行的不同,请保留原实验,只补算交接所需的选定版本结果,不要搜索其他方案或照抄课程数字。
请写清楚我最终选择了哪个筛选器或是否保留原始规则、它的精确定义、保留的事件数、主要历史结果、没有选择其他方案的理由,以及当前仍然存在的风险。还要写清九拍定义、公司名单、研究日期、信号确认时间和实际买入时间。
十日退出只能标注为本轮比较使用的临时尺子,不能写成最终卖出规则。2023 年继续封存。不要把当前候选称为最优策略,也不要省略失败和放弃的尝试。保存后告诉我交接单的文件位置,并用几句话复述:买哪些、什么时候买、还有什么没解决。
一份合格的交接单,不应该依赖 AI 记得这段聊天。
把它交给一段全新的对话,对方也应该能够说清楚:我们准备买哪些九拍、什么时候买,以及还有哪些问题没有解决。
买入规则有了,什么时候卖?
蛙兄把课程参考买入卡保存好。
“现在简单了。只要出现 PY-10 的下行九拍,我就在下一根 K 线开盘买入,然后第十天卖掉。”
“前半句是刚刚冻结的候选买入规则。”蛙博士说。
“后半句呢?”
“还是临时尺子。”
我们已经回答了两个问题:
哪些九拍考虑买?
什么时候买?
但“买进去以后什么时候卖”,还没有经过真正的比较。
固定十日、MACD、成交量或者其他当时可知的条件,能不能帮助我们设计更合适的退出规则?
这就是下一阶段要面对的问题。

这一章真正完成了什么?
我们没有穷举所有筛选器,也没有得到一套已经能够交易的策略。
我们完成的是:
理解筛选器在做什么
→ 和 AI 开放探索不同分法
→ 保留全部尝试
→ 阅读课程参考实验
→ 选择课程路线或自己的路线
→ 冻结一条明确的买入规则
AI 可以帮助我们快速计算许多分组。
但试哪些问题、什么时候停止,以及最后保留哪一套规则,仍然需要我们自己说清楚。
筛选器可以帮助我们找到更值得继续研究的一部分九拍,但“当前候选”不是“穷举最优解”;规则一旦冻结,下一步就该研究怎样卖,而不是回头偷偷改答案。
备用工具:结果不同再看
下面是完整的参考规则与复核提示词。主线已经读完;只有在你想核对课程版本时,才需要用到它,不必把它当成继续学习前的必做步骤。
先看你走的是哪条路。
如果你和 AI 采用了不同的 MACD 定义、成交量窗口、市值分组或选择门槛,结果不同完全正常。你正在运行的是自己的实验,不需要把数字改成课程答案。
如果你使用同一份教学数据,并且完整采用了课程参考分组,基准事件数和各组结果应该能够对上。明显不同就意味着某处口径可能发生了变化,需要先找出从哪一步开始不同。
这时不用再复制上面的表格。下面这段任务已经包含了课程参考规则和关键校验点,可以直接交给 AI:
直接交给 AI|课程参考规则复核
我想检查当前项目中的下行九拍买入筛选器实验是否忠实执行了下面这套参考规则。请先阅读实际使用的数据、已有九拍事件、程序和研究输出,不要为了迎合参考数字直接修改程序或结果,也不要读取、计算或透露 2023 年的价格方向、九拍信号、筛选器结果和收益。
先核对实验基准:研究对象是通过数据体检的 292 家虚构公司;研究期为 2021-01-04 至 2022-12-30;基础事件是已经确认的完整下行九拍;数字 9 当日收盘后确认信号;下一根有效 K 线的前复权开盘价是进入价;从进入日算作第 1 根,第 10 根有效 K 线的前复权收盘价是临时退出价;拥有完整十日窗口的事件应该为 1,908 次。2023-01-03 至 2023-12-29 继续封存。
四类筛选器必须只使用数字 9 当日收盘时及更早已经知道的信息,并分别运行:
- MACD 柱是否改善:使用单只股票的前复权收盘价,按照 pandas 的递推口径计算标准
12 / 26 / 9MACD。EMA12 = ewm(span=12, adjust=False, min_periods=12),EMA26 = ewm(span=26, adjust=False, min_periods=26),DIF = EMA12 - EMA26,DEA = DIF.ewm(span=9, adjust=False, min_periods=9),MACD 柱 = DIF - DEA。数字 9 当日柱严格大于前一根有效 K 线柱时分为“开始改善”,小于或等于时分为“没有改善”;两根柱无法比较时单列“数据不足”。不要增加零轴或金叉条件。 - 相对成交量:使用
数字 9 当日 trading_volume_shares ÷ 此前 20 根有效 K 线的平均 trading_volume_shares,过去 20 根不包含当天。结果< 0.8为“偏低”,0.8 ≤ 结果 < 1.2为“接近平时”,≥ 1.2为“偏高”;历史不足、成交量缺失或历史平均值不大于零时单列“数据不足”。 - 当日相对市值:使用数字 9 当日的
total_market_cap_cny。每个交易日只在固定的 292 家合格公司中,对当日非空市值从小到大计算横截面排名,并列值使用平均排名。底部三分之一为“小市值”,中间三分之一为“中等市值”,顶部三分之一为“大市值”;缺失时单列“市值缺失”。不能只在当天出现九拍的公司中排名。 - 教学行业:直接使用
companies.parquet中预先固定的industry_id与 PY_L1 教学行业。11 个行业必须全部汇报,不能根据收益重新合并、拆分或隐藏行业。
每个筛选器先建立“拥有该筛选器数据的合格基准”,再比较其中各组。每组都要汇报事件数、公司数、不同九拍完成日期数、单日最多事件数及占比、平均收益、中位数、正收益比例、1% 截尾平均收益和 5%—95% 收益范围。不能只报告表现最好的一组。
候选组必须同时满足:至少 100 次事件、10 家公司和 50 个不同完成日期;相对该筛选器的合格基准,平均收益至少提高 0.20 个百分点、中位数提高、正收益比例至少提高 1 个百分点、1% 截尾平均收益提高;单日最多事件占比不能比合格基准恶化超过 2 个百分点。多个候选同时通过时,先比较中位数改善,再比较正收益比例改善,最后比较日期、公司和事件覆盖,不能只按平均收益选冠军。本次复核不要增加组合筛选器。
下面是定位差异使用的课程参考检查点,不是要求你照抄的答案:原始十日事件应为 1,908 次;MACD 可比较 1,779 次、数据不足 129 次,其中开始改善 873 次、没有改善 906 次;相对成交量可比较 1,893 次、数据不足 15 次,其中偏低 1,220 次、接近平时 456 次、偏高 217 次;市值三组分别为 607、671 和 630 次且没有市值缺失;11 个行业的事件数按 PY-01 至 PY-11 依次为 251、278、114、195、219、107、139、73、248、151、133。课程参考规则最终有两个组通过门槛:PY-04“城市脉络”和 PY-10“出行网络”,按上述选择顺序应由 PY-10 排在前面。
请先把当前程序实际执行的口径与上述规则逐项对照,再从冻结事件开始复算关键检查点。输出一张“检查阶段、参考规则、实际结果、是否一致、可能影响”的审计表,并找出最早出现差异的阶段。请用大白话解释差异来自数据版本、事件清单、字段、计算时点、分组边界还是候选判断。
如果本地采用的本来就是另一套自定义规则,请保留本地结果,明确说明它与参考规则的差别,不要假装两项实验可以直接对照。如果确认是程序错误,请先说明最小修复方案及其可能影响,等我确认以后再修改和重新运行。
课后讨论
留下你的问题、理解或不同意见,也看看其他学习者怎么想。