仙统价格行为
Al Brooks Price Action
按 Al Brooks 的价格行为学识别 SPY / QQQ 的 5 分钟 setup,带图推到频道。 下单口径完全按他的书:信号棒 = 最后一根已收盘的 K 棒, 进场是信号棒极值外 1 tick 的停止单,初始止损在信号棒另一端外 1 tick。
⚠️ 先读这一条
在 77 个交易日的 SPY / QQQ 样本上,本系统的信号平均期望为负 (−0.090 R 每笔), 且把样本按时间对半切开后,前半段 −0.251 R、后半段 +0.108 R —— 结论不一致。
它确实比"随机进场"好(零假设基准 −0.140 R,增量 +0.050 R),信号也确实出现在 Brooks 意义上的合理位置,但"能赚钱"这件事没有被证明。
请当看盘助手用,不要当自动交易信号。 完整证据在下面,一个数字都没有删。
它认哪些形态
信号发出时还没进场(停止单挂在信号棒之外),所以不存在用未来数据的可能。
| 形态 | 代码 | 说明 |
|---|---|---|
| 回调第 1/2/3 次尝试 | H1 H2 H3 / L1 L2 L3 | Brooks 的主力 setup,H2 / L2 最经典 |
| 双底牛旗 / 双顶熊旗 | DB / DT | 必须是确认过的摆动点,且两脚间有 ≥1×ATR 的真实反弹 |
| 微型双底 / 双顶 | MDB / MDT | 相邻两棒极值几乎相同 |
| 楔形三推 | WEDGE_BULL / BEAR | 三推动能递减,牛旗/熊旗或反转 |
| 突破回踩 | BOPB_L / S | 突破后第一次回调守住突破棒实体 |
| 假突破陷阱 | FBO_L / S | 区间边缘假突破 —— Brooks:区间里约 80% 的突破会失败 |
| 大趋势反转 | MTR_L / S | 破趋势线 → 回测极值 → 反转棒,三步全齐才算 |
| 区间反抽 | TR_FADE_L / S | 区间上下沿高卖低买 |
| 20EMA 回踩 | EMA_L / S | 趋势中回到均线的顺势位置 |
| 已按实测证据停用 —— 训练 −0.179 / 验证 −0.122,两边都负 |
位置门控 —— Brooks 的硬门槛
「形态对了但位置不对,就不是 setup。」
一根反转棒出现在半空中毫无意义。每条信号都必须落在 20EMA / 前摆动高低点 / 交易区间边缘 / 趋势线 之一上, 位置分低于门槛直接丢弃。
实测结果
逐棒回放(只喂到第 i 根,模拟当时的信息状态)。口径包含两条"往难了算"的修正: 尾盘不跨夜、当日强制平仓,以及每笔扣 0.05 R 的摩擦成本 —— 信号与基准同等扣除。
有没有 edge?跟零假设基准比
基准 = 对每一根 K 棒都做多也做空,用与信号完全相同的进场 / 止损 / 目标机制。 这是判断形态识别有没有提供信息量的唯一诚实办法。
| 笔数 | 平均 R | 胜率 | |
|---|---|---|---|
| 零假设基准 | 13,804 | −0.140 R | 32.0% |
| 本引擎 | 281 | −0.090 R | 37.0% |
引擎比基准好 +0.050 R / 笔,但绝对期望是负的。
时间切分:这套阈值是拟合到最近这段行情的
| 时段 | 笔数 | 平均 R | 胜率 |
|---|---|---|---|
| 前半段 | 155 | −0.251 R | 31.0% |
| 后半段 | 126 | +0.108 R | 44.4% |
调参过程中用的是"最近 38 个交易日"的数据,而那 38 天整个落在后半段里。 在那个窗口上,引擎显示 +0.13 R / 笔、相对基准 +0.31 R,看起来很漂亮。 把样本往前扩一倍之后,前半段是 −0.251 R —— 结论直接翻转。
所以:两道硬门槛是过拟合的产物。它们在选它们的那段行情上有效,换一段就不成立。
把门槛全关掉,看贡献怎么拆
| 笔数 | 平均 R | 相对随机 | |
|---|---|---|---|
| 随机基准 | 13,804 | −0.140 | — |
| 引擎,门槛全关 | 1,607 | −0.098 | +0.042 |
| 引擎,当前门槛 | 281 | −0.090 | +0.050 |
- 形态识别本身贡献了 +0.042 R —— 小,但在两个窗口上符号一致。
- 两道门槛只再贡献 +0.008 R,几乎可以忽略。它们真正的作用是把信号量从约 26 条/天砍到约 5 条/天。 对一个推送系统来说这个价值是真的(没人看得完 26 条),但请不要以为"过了门槛所以质量更高"。
我们把这个结论原样留着,而不是回去把参数再调到"两段都为正"—— 因为在同一份数据上反复调到好看,只会制造更隐蔽的过拟合。 真正能解决它的只有两件事:更长的样本,和积累真实的前向记录。
唯一有效的结构性改善方向:拉长周期
多重比较警告
到这里已经试过 17 种口径 + 3 个周期。一直换下去总能试出一个正的,那是运气不是边际。 规矩:任何正结果必须通过时间切分(前后两段都为正)才算数。 这条规矩已经救过两次 —— 揭穿了那个 +0.127 R 的假象,也拦下了 30 分钟这个 +0.016 R。 排查到此为止,不再继续试参数。
为什么期望这么低
被问到"是不是算法错了"之后做的系统性排查。结论:不是算法错误,但低收益是真的,且与测量口径基本无关。
同一批 281 笔信号,换 5 个维度共 17 种口径,全部为负(−0.093 ~ −0.040 R): 同棒歧义算止损还是算目标、目标取 1R/1.5R/2R/3R、到 1R 移成本价、持有 12/24/48 根、 进场用停止单/市价/限价 —— 一个都没救回来。
更根本的原因
Brooks 是主观交易方法,本系统是它的几何投影。 他真正下判断的东西 —— 今天是趋势日还是区间日、跟随棒有没有急迫感 —— 是读盘经验, 不是 K 棒的几何关系。再加上 SPY / QQQ 的 5 分钟数据是全世界被套利得最彻底的价格序列之一, 纯形状特征剩不下多少东西。这是合理的先验,不是意外。
而"在信号棒高点上方挂停止单、拿整根 K 棒当止损"这个动作本身的结构性成本 (随机基准 −0.140 R)远大于那 +0.05 R 的增量。
一个不该用的出场方式
图上的「目标1 (1R)」是减仓参考位,不是出场位。 本系统之所以还能比基准好,靠的是让盈利单跑到目标 2。看到 1R 就全平,期望是 −0.23 R。
三个失败的改进方向
都做了完整验证,都失败了。记录在此,以免有人重复劳动。
① 只做胜率高的形态 —— 做不了
15 个形态做时间切分(要求前后两段都为正、每段至少 12 笔):
| 判定 | 数量 | 形态 |
|---|---|---|
| ✅ 通过 | 0 个 | — |
| ❌ 两段都为负 | 1 个 | MDB |
| ⚠ 符号翻转 = 噪声 | 2 个 | FBO_L(−0.507 / +0.254)、MTR_S(−0.414 / +0.605) |
| 样本太少,不可判 | 12 个 | 其余全部 |
15 个形态里 12 个连判断样本都不够。DB 两段各只有 2 笔和 4 笔; L1 前半段 1 笔 +1.950 R —— 按平均 R 排名它是"最强形态",实际只有一笔交易。
注意 FBO_L:它曾是唯一在标的训练/验证集上都为正的形态(+0.146 / +0.215), 加上时间切分后符号翻转。按标的切分不够,必须同时按时间切分。
② 用 5 分 K 给 15 分 K 的信号找更精细的进场点 —— 结果相反
思路针对已诊断的根因(进场棒太大导致止损太宽),88% 的 15 分 K 信号确实能在 5 分 K 上找到同向的合格信号棒。但:
| 口径 | 笔数 | 平均 R | 胜率 | 时间切分 |
|---|---|---|---|---|
| A 基准(15 分 K 进场) | 107 | +0.042 | 44.9% | −0.011 / +0.099 ⚠ |
| B 5 分收窄(同 R 倍数) | 94 | −0.060 | 35.1% | −0.022 / −0.108 ❌ |
| C 5 分收窄(同绝对目标) | 94 | −0.170 | 27.7% | −0.377 / +0.086 ⚠ |
收窄止损让胜率从 44.9% 崩到 27.7%。风险确实变小了, 但你在行情展开之前就被日内噪声扫出局,R 倍数的增益远不够补偿多出的止损次数。
这个实验在 n=25 的小样本上曾显示 C = +0.146 R,全样本变成 −0.170 R。这是本项目第三次小样本反转。
③ Brooks 式自上而下级联过滤 —— 唯一可复现的负面结果
| 过滤条件 | 笔数 | 平均 R | 胜率 | 时间切分 |
|---|---|---|---|---|
| 无过滤(基准) | 281 | −0.090 | 37.0% | −0.251 / +0.108 ⚠ |
| ★ Brooks 级联(趋势顺/区间逆) | 127 | −0.145 | 33.9% | −0.153 / −0.134 ❌ |
| 60 分趋势中 且顺势 | 49 | −0.231 | 30.6% | −0.088 / −0.439 ❌ |
| 60 分 + 日线 双同向 | 75 | −0.128 | 33.3% | −0.228 / −0.007 ❌ |
| 60 分钟反向 | 177 | −0.051 | 39.0% | −0.197 / +0.144 ⚠ |
| 60 分区间中 且逆势(反抽) | 78 | −0.091 | 35.9% | −0.200 / +0.030 ⚠ |
这三个 ❌ 是整个项目里唯一"前后两段都为负"的结果。 其它所有失败都是符号翻转(噪声),而这个是可复现的负面效应: 要求与高级别同向,会让结果稳定变差。
一个必须说清的保留意见:这检验的是本系统的 Always-In 判定,不是 Brooks 本人的判断。 已知本系统的 Always-In 在单根强棒后就翻转,很可能把趋势认得太晚 —— 于是"顺大周期"实际变成"在一段走完的行情末端追进去"。 所以失败的可能是这个分类器,而不是 Brooks 的框架。 但修分类器又是一轮新的参数搜索,正是本项目反复证明会自欺的做法,故不做。
最终判定
| 命题 | 证据强度 |
|---|---|
| 形态识别比随机进场好 | 较可信 +0.042 R,多窗口符号一致,基准样本 1.4 万笔 |
| 信号出现在 Brooks 意义上的合理位置 | 可信 位置门控是硬约束,图上可逐条肉眼复核 |
| 门槛提升了单笔质量 | 不成立 只 +0.008 R;它的作用是控制信号数量 |
| 当前阈值有正期望 | 不成立 77 天样本 −0.090 R,时间切分前后不一致 |
信息量是真的,边际不足以覆盖交易成本。
这两件事可以同时成立,本系统就是同时成立的那种情况。 所以它挂在频道里的定位是「在合理的位置提醒你看一眼」 —— 它负责提醒,最终判断和仓位是你的。
样本量的天花板也要说清楚:系统是刻意筛得很严的(这是对的), 代价是 30 分钟周期上 154 个交易日只产生 82 笔。 要把样本做到能下统计结论的 500 笔以上,需要好几年的数据。 这不是多跑几次回测能解决的问题。
三条不会让它乱发的保险
- 只用已收盘的 K 棒(数据层直接剥掉未收盘的最后一根)。
- 陈旧数据守卫:最后一根 K 棒比现在旧超过 15 分钟就本轮不发。 这条独立于节假日表,休市 / 半日市 / 取数中断全都挡得住。
- 去重键(标的|周期|K棒时间|形态代码)落盘,重启也不会重复推同一根 K 棒的同一形态。
它管不住什么
- 没有可验证的正期望。这是本页反复说的第一件事,不是免责套话。
- 样本只覆盖了一种市场环境。真正的考验(趋势市、崩盘、财报跳空)都没在样本里。
- 摩擦按固定 0.05 R 估算,不是你真实的滑点。停止单在快速行情里的滑点可能远大于此。
- 没有移动止损、没有分批止盈 —— 而 Brooks 本人是一定会做这两件事的。这里的口径比他的实际打法更笨。
- 方向拆分不要照搬。只做空 +0.31 / 只做多 −0.03(n=67/76),样本太小,不要据此只做空。
- 评分 → 胜率的映射是启发式的,未经你账户的历史数据校准。请把分数当相对排序用,不是绝对胜率。