FennEdge 学习

小盘股超短线交易:进阶

小盘股超短线交易(剥头皮 Scalping)进阶:读懂 Level 2、逐笔成交与集合竞价,把交易形态当作带失败路径的基础概率,并从自己的交易中衡量优势。

按约 398 分钟安排,已包含阅读、算例和练习;实际用时因人而异。

29节课程 ≈398预计分钟 —登录后保存进度
24
第 24/29 课 · 约 15 分钟

日内交易策略回测:前视偏差、幸存者偏差与过拟合

日内回测很容易骗过你自己。只用入场时已有的信息,在当时的股票池上测试,检查异常成交记录和拆股调整,并留出一段没有用来调参的数据。

先用白话说清楚

回测,是把一条交易规则放到过去的数据上重放一遍,然后统计结果。对于小盘股的日内想法,包括超短线交易(业内俗称“剥头皮”,即 Scalping;期货圈常叫“炒单”)的形态,这听起来是得到基础概率的诚实办法,它也确实可以是。但这同样是最容易骗过自己的地方,因为过去的数据里含有交易发生那一刻还拿不到的信息。本课讲解日内回测最常见的四种误导方式:前视偏差、幸存者偏差与拆股调整、异常成交记录,以及过拟合。

核心观点:回测的诚实程度,取决于它关于时间的规则。测试中的每一个筛选条件、入场、止损和成交,都只能使用交易者在那一刻能够知道的信息。除此之外的任何信息,都会把测试变成对已发生事情的描述。描述有用,但它不是一条你当时能交易的规则。

同一起点,不同路径

本例中的数据、规则和结果均为示意。

测试计划,在运行之前写好。股票池:美股中在 09:30 开盘时跳空高开 20% 或以上的股票,时间跨度六个月。入场:09:35 之后第一次突破 5 分钟开盘区间高点时做多。止损:开盘区间低点。目标 2R。时间止损 10 分钟。成本:一个来回每股 $0.005,每次止损离场再加 1 美分滑点。结果以扣除成本后的 R 计。

为了减少噪音,又加了一个筛选条件:“全天成交量至少 100 万股”。下面是同一个测试跑两遍的结果。

路径 A按原样使用成交量筛选条件

符合条件的高开股 340 只,其中 300 只全天成交量达到 100 万股或以上。在这 300 只中,规则触发了 212 次。扣除成本后平均每笔 +0.31R。

这个筛选条件看起来无害,其实不然:全天成交量要到 16:00 才知道,而规则在 10:00 之前就入场了。突破后全天持续大量成交的股票能通过筛选;突破失败、随后变得冷清的股票更可能被筛掉。这个筛选条件有一部分是在按结果挑股票。

路径 B换成入场时已知的筛选条件

同样的 340 只高开股。成交量筛选条件换成入场时已有的一个:到 09:35 至少成交 300,000 股。规则触发 241 次。扣除成本后平均每笔 −0.06R。

相差的 29 笔(241 − 212)是一个净差:两个筛选条件留下的是两组不同的高开股,而不是同一组再多出 29 笔。总的来看,早盘筛选条件多放进来的交易,大多是被全天成交量筛选条件剔除掉的失败突破。规则的其他部分都没变。

路径 C修正后的规则,放到它没用来构建的月份上

把路径 B 中修正后的规则冻结参数,放到接下来的两个月上运行。触发 88 次。平均每笔 +0.02R,粗略 95% 范围大约从 −0.23R 到 +0.27R。

没什么动静:在一个很宽的区间内,看不出任何方向的明显优势。

同样的数据,同样的入场逻辑。一个用到了未来的筛选条件,就把一个持平的想法变成了一个看起来很强的想法。本课其余部分讲解如何找到这类泄漏、FennEdge 自己发布的研究如何记录它的注意事项,以及如何检验过拟合。

前视偏差:用到了决策之后的信息

前视偏差(look-ahead)指测试用到了决策时还拿不到的数据,量化圈也叫“未来函数”。在日内研究里,它藏在一些看似普通的地方:

  • 在日内时点使用日线字段。全天成交量、当天的最高价或最低价、收盘价、“当日涨跌幅”,以及收盘后才更新的流通股数据。
  • 在 K 线内部成交。假设在一根 1 分钟 K 线的最低价入场,或者止损正好按止损价成交。只有 K 线收完,你才知道那个低点是最低价;止损以下一个可成交的价格成交。
  • 事后才建好的名单。按全天涨幅或成交量排序的“高开股排行”名单,被用作 09:35 入场的股票池。
  • 需要知道结局的事后标签。“收涨的交易日”“强势股”“首个收跌日(first red day)”都是结果。

对每个筛选条件做一个检验:写下它的值最早在什么时间可知。如果这个时间晚于入场,这个筛选条件就是前视偏差。

FennEdge 的高开股日内高点研究(Gapper HOD)自己就标出了一个例子。研究按高开股收盘是否不低于开盘价来拆分:收盘不低于开盘价的(n = 233,日内高点时间中位数为美东时间 10:25),以及低于开盘价的(n = 438,中位数为美东 08:37)。研究写明,这个拆分用到的信息只有收盘后才有(2026-07-01 至 2026-10-02;FennEdge 数据存档;数据截至 2026-10-02;见小盘高开股统计数据(2026))。作为对两种交易日的描述,这个拆分没有问题。作为 09:35 入场的筛选条件,它就是前视偏差。

同一项研究还显示了一种更隐蔽的形式:它的样本按官方 09:30 开盘价的跳空幅度定义,所以并不是盘前扫描器当时所显示内容的重建。盘前大涨、但开盘时涨幅低于 +20% 的股票不在其中。在这个股票池上回测盘前入场,就是按一个当时还不存在的数字来挑股票。

幸存者偏差与拆股调整

幸存者偏差来自用今天的股票代码名单构建测试股票池。小盘股经常退市、更名和反向拆股(并股);一份当前仍在交易的代码名单,会悄悄漏掉许多最差的结果。高开股日内高点研究按每个历史交易日当时的参考数据确定每只证券的类型,而不是用今天的在交易名单,所以后来退市、更名或反向拆股的代码仍留在样本中。研究也说明,这样做能减少幸存者偏差,但不能消除所有分类错误。

拆股调整会改写历史。一次 1 并 20 的反向拆股之后,一只当时交易价为 $0.20 的股票,在调整后的数据里显示为 $4.00。在调整后的数据上用“价格高于 $1”筛选的回测,会把这只股票实际远低于 $1 交易的日子包括进来,而那些日子有亚美分报价、不同的价差和不同的交易者。价格筛选要用当天实际报出的价格核对。高开股日内高点研究在 676 个符合条件的观测中排除了 5 个分钟数据与日线数据价格尺度不一致的观测(2026-07-01 至 2026-10-02;FennEdge 数据存档;数据截至 2026-10-02);其中四个超过开盘价和收盘价的 10 倍,属于拆股调整不匹配。研究还指出,调整之后可能被修订。

异常成交记录

一笔偏离市场的成交记录,可能制造出一个任何订单都不可能成交的 1 分钟高点或低点。在回测中,这样一笔成交记录可能触发一个实际并不存在的入场、止损或目标价。常用的检查是敏感性检验:按写明的规则剔除可疑观测,看结果是否还站得住。

同一项研究还写明了两条会在边缘上改变数字的约定:同一个最高价在不止一分钟里出现时(671 个观测中有 78 个,11.6%;2026-07-01 至 2026-10-02;FennEdge 数据存档;数据截至 2026-10-02),取第一分钟;同一代码重复出现时每个交易日只计一次,所以 461 个代码产生了 671 个观测。两条约定无所谓对错。它们都被写了下来,这才是关键。

过拟合与样本外检验

过拟合,是指不断调整一条规则,直到它拟合了某一个样本里的噪音。日内想法有很多旋钮:区间长度、入场偏移量、止损位置、目标价、时间止损、成交量门槛、价格区间档、时段。试的组合足够多,总有一个会碰巧看起来很出色。

所以,在你试了 50 个变体之后,一条在 40 笔交易上显示每笔 +0.4R 的规则,大约就是纯噪音能产生的水平。Bailey 等人(2014)描述了回测过拟合的概率如何随尝试的配置数量上升;White(2000)以及 Harvey、Liu 和 Zhu(2016)描述了在同一份数据上检验许多想法时的修正方法(数据窥探问题)。

实用的防御办法:

  • 冻结规则,再到没用来调参的数据上测试(样本外),就像路径 C。
  • 滚动前推检验(walk-forward)。用第 1–3 个月调参,第 4 个月测试;用第 2–4 个月调参,第 5 个月测试;依此类推。
  • 统计你试过的变体数量,并把这个数字和结果一起报告。
  • 参数越少越好。每多一个参数,就多一次拟合噪音的机会。

观察与推断

一个论坛帖子写着:“回测了 2,000 次小盘股突破,胜率 61%,稳如磐石。”请把展示出来的内容和声称的内容分开。

帖子展示的(观察) 推断的内容 为什么不能成立
2,000 笔交易的计数和 61% 的胜率 “稳如磐石的优势” 不看盈亏比和成本,胜率几乎说明不了期望值
“小盘股突破” 一个可交易的股票池 不知道股票池用的是今天的代码名单,还是全天数据筛选条件
没有说明成交规则 成交是现实的 在 K 线最高价或最低价成交、止损正好按止损价成交,是常见的前视偏差
没有提到试过多少变体 一条规则只测试了一次 不知道变体数量,就无法排除过拟合

哪些条件会改变概率

下面这些条件决定一个回测结果有多可信。它们是检查项,不是研究结论:

  • 每个筛选条件的时间戳都不晚于入场。
  • 成交计入价差和滑点,止损的成交价比止损价更差。
  • 股票池按时点名单(point-in-time)构建,包括后来退市的代码。
  • 价格用当天实际报出的价格核对,而不只看调整后的数据。
  • 对异常成交记录和并列处理约定做敏感性检查。
  • 样本外或滚动前推检验的结果与样本内结果并列报告。
  • 按市场状态拆分。按月份或市场环境报告结果;见日内交易的市场环境。

看错的代价

假设有人相信了路径 A 的每笔 +0.31R,并按每笔 $50 风险、每季度 200 笔去交易(示意):

相信的结果 每季度预期 修正后的测试提示的结果
路径 A,有前视偏差:+0.31R +$3,100 —
路径 B,修正后:−0.06R — −$600
路径 C,样本外:+0.02R,范围约 −0.23R 至 +0.27R — 约 −$2,300 至 +$2,700

代价不只是亏掉的钱。相信路径 A 的交易者可能会加大仓位,这会把差距成倍放大。

要多少笔交易,这些数字才有意义

在每笔分布标准差为 1.2R 的情况下,要以大约 95% 的置信度把每笔 +0.10R 的优势估计到 ±0.10R 以内,大约需要 (1.96 × 1.2 ÷ 0.10)² ≈ 553.2,向上取整为 554 笔交易(示意,正态近似)。大多数用几个月小盘股数据做的日内回测,交易笔数都比这少,而且同一只股票同一天的多笔交易,分量更轻。方法见测试一个策略要多少笔交易,数字才有意义;为什么结果应以 R 计,见 R 倍数。

本课不作哪些结论

  • 本课不认为示例中的任何规则有效或无效;所有规则结果都是示意。
  • 高开股日内高点研究的数字描述的是一个样本中高点出现的时间,不是任何一笔交易的结果。
  • 一份干净的回测仍然只是对过去的描述。过去的规律不代表未来的结果。
  • 去掉前视偏差并不会让结果变成真的;它只是去掉了一种已知的、会产生假结果的方式。

延伸阅读

  • 先看 FennEdge。
    • 小盘高开股通常几点见日内高点?是一个关于方法和注意事项的完整实例:股票池、排除项、敏感性检查,以及在正文中标出的前视偏差(n = 671,数据截至 2026-10-02)。
    • Gapper HOD Timeline(高开股日内高点时间线)展示背后的每日日内高点数据(访客、Free 和 Plus:最近一个已完成的交易日;更早的交易日需要 Pro(两个月)或 Max(一年);工具权限截至 2026-10-05)。
    • In-Play Days(活跃交易日)展示过去活跃交易日的 1 分钟图。没有 Max 时(包括访客),你可以完整打开每个代码最近一个活跃交易日;更早的日子和两年历史需要 Max,回放许多过去的交易日也需要 Max。用它逐根 K 线手动核对一部分回测交易。
    • Top Gappers 日历列出过去的高开股(访客、Free 和 Plus:默认筛选条件下的最近一个交易日;完整历史为 Pro 和 Max)。它的默认筛选条件包括全天成交量至少 100 万股,如果你把这份名单用作日内入场的股票池,就落入了路径 A 的陷阱。
  • 回测中的 MAE 与 MFE 会继承上面所有问题;见交易中的 MAE 与 MFE。
  • 形态测试。高开股的开盘区间突破把这些检查用在一个常见形态上。
  • 后见之明。用概率思考交易讲解图表示例中的后见之明;前视偏差就是它在回测中的形式。
  • 结业复盘。如何找到你的交易优势:100 笔交易复盘把同样的纪律用在你自己的交易记录上。

练习

本课后附六道练习:三道概念检查(用今天的代码名单作股票池;在拆股调整后的数据上做价格筛选;样本外数据的用途),两道情景判断题(找出回测中的前视偏差),以及一道计算题(检测一个小优势需要多大样本)。登录后即可做练习、查看答案并保存进度。

原始来源

资料核对于 2026-10-05。回测规则、其结果和模拟均为虚构和示意。实测数字按文中所述来自 FennEdge 数据存档。本课仅用于学习,不构成买卖任何证券的建议。过去的规律不代表未来的结果。