策略分享

量化回测中,哪些“默认假设”最容易被忽略?

由bq5l7qg6创建,最终由bq5l7qg6 被浏览 3 用户

很多量化研究,失败并不是因为策略“想错了”,而是因为一些被默认接受的前提,其实并不成立。

回测框架往往给人一种安全感:数据已经准备好,撮合规则也写好了,回测结果能直接画成一条漂亮的收益曲线。可一旦把视角从“策略逻辑”挪到“这些结果是如何被算出来的”,就会发现,回测里藏着不少未经确认的假设。

这些假设并不显眼,甚至从不写在策略代码里,但它们会悄悄决定回测是否可信。

成交,真的像你想象中那样发生了吗?

很多回测的第一步,就是“在某个价格下单,并立刻成交”。

这一步在代码里极其自然,甚至是默认行为: 只要触发条件满足,订单就被认为已经在当前 bar 的价格成交了。

问题在于,这里隐含了几个没有被明说的前提。

比如: 这个价格在当时是否真的可成交? 你的下单规模是否会影响成交? 策略触发的那一刻,市场上是否存在足够的对手盘?

在日线级别的研究中,这种假设看起来问题不大;但一旦策略开始依赖更细的时序关系,成交假设就会变得非常“锋利”。 你会发现,回测里那些看似合理的进出场点,在真实行情中根本没有出现过“可交易的瞬间”。

更微妙的是,很多策略并不是被“逻辑”打败的,而是被这种过于顺滑的成交过程放大了收益。 等到实盘再去补滑点、补撮合规则,策略往往已经面目全非。

数据是连续的,但市场不是

回测数据通常是整齐的。

时间戳是规则的,K 线是一根接一根的,看起来市场始终在“持续运行”。 但真正的交易环境,从来不是这样。

交易所会停盘,品种会换月,流动性会在某些时段突然变薄;有些价格跳动,并不是连续演化,而是直接“跳过去了”。

在回测中,如果默认数据是连续的,就等于默认: 策略可以在任意一个 bar 之间自由切换状态,信号永远不会“错过”。

这在很多趋势策略里不容易被察觉,但在依赖精细入场时机的策略中,影响非常大。 你可能在回测中捕捉到了一个极佳的入场点,但真实市场中,那根 K 线根本不存在你想要的成交路径。

更现实的一点是: 当数据出现缺口时,回测系统往往会“自动帮你补上逻辑”,而不是提醒你这里发生过中断。

于是,一个本应被视为异常的行情区间,被平滑地纳入了策略收益之中。

价格是“已知的”,但在当时并不可得

回测中最容易被忽略的,反而是价格本身。

我们在写策略时,习惯直接使用 close、high、low,甚至是 bar 内的极值来判断条件。这在事后看是完全合理的,但在当下,却未必成立。

一个典型的问题是: 你在策略里用到的那个价格,是在信号产生时就已经知道的吗?

例如,使用整根 K 线的最高价来判断突破,在回测里毫无问题;但在真实交易中,这个价格只有在 K 线走完之后才被确认。 如果回测系统默认“你可以在 bar 内任何时刻使用这些信息”,那策略的反应速度,其实已经被提前了一步。

这种提前,在统计结果上往往表现得并不夸张,却足以让一个边际优势策略,看起来稳定盈利。

很多人直到对接实盘,才意识到: 不是策略突然失效,而是回测阶段使用了当时根本不可得的信息。

回测结果的“可信度”,来自这些细节

这些假设本身并不是错误的。

问题在于,它们经常是在没有被明确意识到的情况下,被整个研究过程默认接受了。 当策略表现很好时,很少有人会反过来追问: “如果这些前提稍微不成立,结果还会一样吗?”

在量化研究中,策略逻辑只是表层。 真正决定回测是否有研究价值的,是你是否清楚: 结果建立在什么样的假设之上。

当你开始主动检查这些“默认前提”,回测曲线可能会变得不那么好看,但它也会变得更诚实。

标签

交易成本
{link}