任何回测都是近似 —— 这不是问题。问题是你不知道它往哪个方向偏。 一个标了「这是乐观上界」的数字仍然可用; 一个没标方向的数字不能拿来做任何决定, 因为你无法判断「差一点」到底是差一点还是差很远。
| 近似 | 方向 | 为什么 |
|---|---|---|
| 用最优价成交 | 乐观 | 实盘要逐档往上吃 |
| 用中间价成交 | 更乐观 | 连价差都没算 |
| 假设挂单都成交 | 乐观 | 成交与否不是随机的 |
| 把未成交的单从样本里删掉 | 严重乐观 | 等于用结果筛样本 |
| 保守队列假设 | 悲观 | 少吃良性流、多吃毒流 |
| 用长周期成交流模拟短周期 | 乐观 | 短周期的成交流更稀疏 |
| 忽略下单期间的价格漂移 | 乐观 | 漂移在短周期上很大 |
注意这张表的分布:七条里六条偏乐观。 这不是巧合 —— 每个近似都是为了「让回测跑得通」而做的简化, 而简化几乎总是去掉了一个成本,很少去掉一个收益。
我们要估「做市方能有多少仓位配成整套」(配对率)。 第一版用截断重放:拿一个长周期钱包的真实成交流, 假装它是短周期的持仓窗口,重新算。
后来用录制的真实盘口 + 完整成交流做了全额回放模拟:
| 周期 | 截断重放 | 真实模拟 | 高估 |
|---|---|---|---|
| 5 分钟 | 47.0% | 36.3% | 1.3 倍 |
| 15 分钟 | 70.9% | 33.6% | 2.1 倍 |
| 1 小时 | 95.4% | 54.9% | 1.7 倍 |
70.9% 看起来足够高,所以它一度是「悬而未决、值得一试」的状态。 真实模拟出来只有 33.6% —— 比 5 分钟还差,直接判死。
问题不在于近似不准(近似本来就不准), 而在于我们当时没有先判断它会往哪个方向偏。 如果先想清楚「用长周期成交流模拟短周期,会高估还是低估配对」, 就会知道 70.9% 是乐观上界,不能拿来做决定。
知道方向之后,一个很有用的做法出现了:同时给出下界和上界。
同一条路,我们有两个数:
| 来源 | 结果 | 方向 |
|---|---|---|
| 保守队列假设的全额模拟 | −3¢/股 | 悲观下界 |
| 熟练玩家的实测 | +0.1¢/股 | 乐观上界 |
那次的答案是没有,所以那条线没有上。
如果只有一个中间数字,这个问题根本问不出来 —— 你会以为自己知道答案,而实际上你只是有一个来路不明的点估计。
| 假设方向 | 如果错了 | 代价 |
|---|---|---|
| 乐观 | 回测正、实盘负 | 用真钱发现,代价无上限 |
| 悲观 | 回测负、实盘可能正 | 错过一个机会,代价有限 |
两种错误代价完全不对称,所以在所有说不准的地方都往对自己不利的方向取。 这不是悲观主义,是不对称风险管理。
| 问自己 | 不合格的答案 |
|---|---|
| 成交价怎么定的? | 「用的收盘价」——没算价差和走书 |
| 挂单怎么判成交? | 「框架默认的」——你不知道方向 |
| 没成交的单去哪了? | 「过滤掉了」——样本已被污染 |
| 这个数是上界还是下界? | 答不上就不能用 |
| 有证据拿到好的那一端吗? | 「应该可以吧」 |
| 判赢输用的是哪把尺? | 和市场结算不是同一把 → 见下 |
最后一条是我们付出代价最大的一次:判赢输的尺子和市场结算不一致, 全样本 10.1% 的窗口判反,而且带方向, 足以凭空造出一个看起来很稳的规律。那已经不是「偏差方向」的问题, 是整把尺子的问题 —— 展开在 你的回测赢了,可能只是尺子错了。
每个回测数字后面都该跟一句:这是下界还是上界。 写不出这句,那个数就不能拿来做决定 —— 因为你分不清「差一点」和「差很远」, 而这两者的代价差一个数量级。