撮合层有一条硬约束:最小成交单位 5 股。 听起来只是个小限制,实际上它决定了一件大事 —— 低于 $5 的「固定注额」在这里根本不存在。 你以为在等额下注,其实注额随价格上下漂,而这足以让回测和实盘对不上。
你想每笔固定投 $1。价格不同,能买到的股数就不同:
| 成交价 | $1 能买 | 够 5 股吗 | 实际会发生 |
|---|---|---|---|
| 0.10 | 10 股 | 够 | 正常成交 $1 |
| 0.20 | 5 股 | 刚好 | 正常成交 $1 |
| 0.50 | 2 股 | 不够 | 被补到 5 股 → 实付 $2.50 |
| 0.90 | 1.1 股 | 不够 | 被补到 5 股 → 实付 $4.50 |
于是「每笔 $1」变成了:便宜的窗口投 $1,贵的窗口投 $4.50。 注额和价格绑在了一起 —— 而价格通常和你想研究的东西也相关。
只要注额 ≥ $5,无论价格是 0.01 还是 0.99,你都能买到至少 5 股, 不会触发补足,注额就是你定的那个数。
| 注额 | 在 0.99 处能买 | 结论 |
|---|---|---|
| $1 | 1.0 股 | 被补足,注额漂移 |
| $4.95 | 5.0 股 | 临界值 |
| $5 | 5.05 股 | 任何价位都成立 |
所以想做等额下注,$5 是数学上的最低值,不是经验值。
不是「多花了一点钱」这么简单。它会污染整个统计:
| 后果 | 说明 |
|---|---|
| 不同窗口不可比 | 一笔押 $1、一笔押 $4.50,两笔的权重差 4.5 倍 |
| 回测和实盘分家 | 回测按固定注额算,实盘按补足后算,逐笔都对不上 |
| 产生一个隐藏的加权 | 贵的窗口自动被加大仓位——你没这么设计,但事实如此 |
| 盈亏归因失效 | 分不清赚的是判断对了,还是恰好在被加权的那一侧 |
第三行最阴险:它是一个你没打算加的权重。 统计里所有「没打算加但确实存在」的权重,最后都会以某种方式误导你。
挂单可能只被吃掉一部分。所以「我挂了 100 股」和「我有 100 股」是两回事。 写程序的必须处理部分成交,否则账从这里开始就错了。
想用最小成本验证整条链路能不能跑通,那么最小的一次完整测试就是 $5 左右。 比这更小的金额没法测出真实行为 —— 因为它会走到补足那条分支上去。
如果要在一个 N 档的盘上凑齐一整套,每一档都要满足 5 股下限。 档位越多,最小可行规模越大。互补集与 NegRisk 里那些 「纸面上有价差」的机会,很多就是死在这里 —— 冷门档要么买不到,要么为了满足下限必须超配。
最小 5 股这件事,本质上是「执行层有一条回测里不存在的规则」。 这类分歧不止一处,它们的共同特征是:单看都很小,合起来足以让符号反过来。
我们的检查方法是逐笔对账:拿实盘的每一笔,和回测在同一时刻、 同一条件下算出来的那一笔比对。对不上的地方,就是执行层多出来的规则。
这一步做过之后,才有资格说「回测和实盘之间没有缝」。 没做过就假设没缝,是判死档案里最常见的死因之一。
$5 不是「建议起投额」,是数学上的地板 —— 低于它,你以为的固定注额会变成一个跟着价格走的变量, 而那个变量恰好和你想研究的东西相关。 这是最便宜的一次教训:改个常数就能避免。
5 × 0.99 = $4.95 < $5,因此 $5 在 0.99 以内任意价格都能买到至少 5 股。可自行验算。