数据与算法

强化学习在量化交易中为什么屡屡失效?从模拟盘到实盘的四大鸿沟

回测曲线一路向上,模拟盘里的收益也没有立刻崩塌,可一旦接入真实账户,策略却开始频繁做出迟疑、追价,甚至在最不该承担风险的时候放大仓位。这样的经历,在强化学习量化交易中并不罕见。它往往不是某一个参数写错了,也不一定意味着模型完全没有价值,而是因为智能体在模拟环境里学到的东西,与真实市场允许它使用的东西,并不是同一件事。…

强化学习在量化交易中为什么屡屡失效?从模拟盘到实盘的四大鸿沟

我们很容易把回测中的一条漂亮净值曲线当作答案,仿佛模型已经理解了市场;但从更谨慎的角度看,那条曲线首先只能证明:在特定历史样本、特定数据处理方式、特定交易成本假设和特定奖励函数下,智能体找到了一个有效路径。它是否理解了可迁移的规律,是否能承受延迟、滑点和流动性变化,是否知道什么时候应该停止探索,仍然是另一组没有被回答的问题。

强化学习的困难,恰恰在于它比传统预测模型多走了一步:它不只要判断未来,还要决定行动,并根据行动后的结果调整自己。市场也因此不再只是一个被观察的数据集,而变成了一个会回应交易行为、会不断变化、又无法被完整看见的环境。

回测中的高收益,首先是一个需要被解释的现象,而不是一张可以直接兑现的承诺。

第一重鸿沟:智能体记住了噪声,而不是规律

历史数据太容易让模型产生“我已经懂了”的错觉

在监督学习里,我们通常会给模型输入特征和标签,让它学习某种映射关系;在强化学习里,智能体则通过与环境互动,观察状态、采取动作、获得奖励,再逐渐调整策略。表面上看,这种方式似乎更接近交易本身,因为交易也确实包含连续决策。

但金融市场中的历史数据有一个很难绕开的特点:有效信号稀少,噪声密度很高。

价格变化受到宏观政策、流动性、投资者情绪、行业轮动、资金结构和突发事件的共同影响。许多在历史样本中反复出现的形态,并不一定具备稳定的因果基础。一个模型可能在训练期间观察到:某种成交量变化之后,价格通常在若干个时间步内上行;也可能发现,在某个指标组合出现时,降低仓位会让奖励更好看。可是,这些关系有可能只是特定市场阶段中的偶然共振。

强化学习的风险在于,智能体不需要真正解释市场,只要能够在训练环境中持续获得较高奖励,就会把任何有用的模式都纳入自己的行动逻辑,包括那些不可复制的噪声模式。

这就是过拟合在强化学习中的另一种表现:模型没有简单地记住某个标签,而是记住了某段市场历史里,状态、动作和结果之间的偶然联系。它可能学会在某一天的波动结构中寻找机会,却没有学会面对另一种波动结构时如何重新判断。

这种失效有时很隐蔽。策略并不是一上线就完全失灵,而是收益逐渐变薄,交易频率开始异常,回撤恢复速度变慢,某些特定时段的决策明显变得不稳定。我们看到的是绩效下降,模型内部却可能仍然“相信”自己正在按照训练中最有效的方式行动。

过拟合不只来自模型复杂度

谈到过拟合,很多人第一反应是网络层数太多、参数量太大,或者训练轮次过长。这些确实可能增加模型记忆噪声的倾向,但强化学习量化交易的过拟合来源更广。

它可能来自以下几个方面:

  • 状态空间设计过于丰富。 输入了大量技术指标、盘口特征、宏观数据和衍生变量,模型拥有足够多的自由度去寻找偶然相关性。
  • 奖励反馈过于密集。 每个时间步都产生奖励,智能体会努力优化短期反馈,却未必理解交易成本、持仓风险和长期回撤之间的关系。
  • 训练环境重复使用同一段历史。 当智能体反复在固定样本上试错时,所谓的探索实际上可能变成了对历史路径的持续拟合。
  • 调参过程使用了测试集信息。 即使没有直接把测试集放入训练,只要我们根据测试表现反复修改模型、特征和奖励函数,测试集就已经不再真正独立。
  • 市场状态切分不合理。 随机打乱时间序列,会让相邻时期的信息泄漏到训练和验证过程之中,结果自然比真实部署更乐观。

尤其是最后一点,时间序列不能像普通分类数据那样随意打乱。市场具有时间依赖性,昨天的流动性状态、政策预期和资金行为,可能影响今天的价格形成。一个更接近现实的验证方式,应当保留时间顺序,并把训练、验证、测试和模拟运行放在不同的时间段里。

怎样辨认模型是在学习,还是在背诵

这里没有一个指标可以单独给出结论,但我们可以从策略表现的形状中寻找一些不安的信号。

如果模型只在一段非常具体的行情环境中有效,离开该阶段就明显失去优势;如果轻微调整交易成本、滑点或执行延迟,收益便大幅缩水;如果替换随机种子之后,策略表现从优秀变成平庸;如果把特征减少一半,模型就无法维持基本决策能力,那么我们面对的可能不是稳定的市场规律,而是一套依赖细节的历史记忆。

在实践中,较有价值的验证通常包括:

1. 滚动训练与滚动测试。 让训练窗口向前移动,观察策略能否在不同阶段保持相对稳定,而不是只在一段固定历史中表现良好。

2. 跨市场状态测试。 将趋势、震荡、高波动、低波动和重大事件阶段分开观察,避免用一个总体收益掩盖策略在特定环境下的脆弱性。

3. 扰动测试。 对价格、成交量、延迟、手续费和成交概率进行合理扰动,检查模型是否依赖某个过于精确的参数。

4. 多次独立训练。 使用不同随机种子、不同初始化方式和不同训练区间,观察结果是否具有一致方向。

5. 特征消融。 暂时移除部分输入,考察模型的核心决策是否仍然存在,避免一个看似重要的变量实际上只是历史噪声的入口。

6. 保留真正未触碰的样本。 这部分数据不能用于选模型,也不能用于调整奖励函数,否则它就只剩下形式上的“测试”。

这里需要一种不那么急于证明自己的心态。我们当然希望模型成功,但验证的意义并不是尽快找到一条能够展示的曲线,而是耐心地确认:当环境不再配合时,模型是否还保留一点可解释、可控制的行为。

第二重鸿沟:模拟盘没有告诉你,交易本身会改变价格

固定的十个基点,可能只是一个过于温柔的世界

许多交易模拟器会使用固定手续费或固定滑点。比如,每次交易统一假设成本为十个基点,也就是成交金额的千分之一。这个设定有一定的便利性:它简单、清晰,也便于比较不同算法。

但真实市场中的交易成本很少如此平整。

滑点会随着波动率、盘口深度、下单方向、成交量和交易时段变化。延迟意味着你看到的价格并不一定还是可以成交的价格。冲击成本则更直接:当智能体的订单足够大,或者市场流动性不足时,它的交易行为本身就会反过来影响价格。

模拟环境通常把市场当成一面平静的镜子,智能体下单,环境返回成交结果;真实市场更像一块有弹性的水面,订单落下去之后,水面会出现波纹,而波纹又会改变下一次成交的条件。

对于低频策略而言,单次延迟也许不至于立即摧毁逻辑;但对于依赖短时价格变化的策略,几个时间单位的延迟就可能让原本的优势消失。对于高频或高换手策略,交易成本不是收益曲线旁边的一行备注,而是决定策略能否存在的基础条件。

四个经常被模拟器忽略的细节

交易环节理想化模拟中的常见处理实盘中可能发生的变化对强化学习智能体的影响
滑点使用固定比例或固定基点随波动率、盘口深度和订单方向变化模型可能过度交易,却低估实际成交损耗
交易延迟默认观察、决策、下单即时完成数据传输、计算、风控和撮合都需要时间智能体依据已经过期的状态行动
成交概率假设订单可以按目标价格成交限价单可能排队、部分成交或完全不成交模拟中的收益来源在真实环境里无法兑现
市场冲击智能体的订单不影响价格大额订单会消耗盘口并改变后续价格模型忽略自身行为对环境的反馈
流动性任何时刻都拥有足够成交量盘中不同阶段、极端行情下流动性差异很大回测仓位和换手率可能无法落地
交易规则规则被简化为统一撮合涨跌停、最小价位、停牌、熔断等限制会改变执行智能体可能做出系统无法执行的动作

这些因素有一个共同点:它们往往不会让模型在回测中显得更复杂,却会在实盘中持续收取代价。模型在理想环境中每次都能以“正确价格”完成行动,于是它会逐渐形成一种行为习惯——只要发现预期收益略高于理论成本,就积极执行。

而真实市场会让它明白,理论上的边际优势,经过排队、延迟、部分成交和价格冲击之后,可能已经不再存在。

交易执行不是策略的附属模块

有些系统把信号模型和执行系统分得很开:模型负责决定买入、卖出或持有,执行模块负责把这些决定送到交易接口。这样的分层在工程上很常见,但在强化学习中,执行条件其实应该成为状态和动作设计的一部分。

如果智能体只能选择“买入多少”而看不到盘口深度、当前成交量、订单排队情况和实时延迟,它做出的决定就建立在不完整的信息上。它以为自己在控制仓位,实际上只是在控制一组理想化的数字。

更合理的模拟环境,至少应当尝试描述以下内容:

  • 订单从生成到送达,再到交易所撮合之间的时间差;
  • 市价单和限价单不同的成交机制;
  • 部分成交、撤单失败和订单排队;
  • 成交量对价格的影响;
  • 不同波动阶段的滑点分布;
  • 交易时段、涨跌幅限制和流动性中断;
  • 风控系统对订单大小、频率和方向的限制。

当然,我们不可能把市场的每一个细节都完整复制进模拟器。模拟器永远只是现实的近似。但近似的方向很重要:如果它只保留价格变化,却删掉了交易行为发生的摩擦,那么智能体得到的不是一个简化版市场,而是一个在关键处失真的市场。

实盘不是把模拟器的最后一个按钮打开,而是把那些被模拟器隐藏的摩擦全部带回决策过程。

从“固定成本”走向“成本分布”

单一的固定交易成本假设很适合作为第一版实验,却不适合成为最终结论。成本更应该被看作一个分布,而不是一个常数。

例如,在低波动、深盘口的环境中,实际滑点可能相对温和;在剧烈波动和流动性快速收缩的阶段,同样的订单规模可能遭遇完全不同的成交结果。因此,训练和测试中可以对滑点、延迟和成交概率进行随机化处理,使智能体不再依赖一个过于固定的交易世界。

这种做法并不能消除实盘风险,却能够让模型在训练期间提前遇到一些不舒服的情况:订单无法立即成交,收益被成本吞掉,动作执行后价格出现反向变化。一个从未经历过这些情况的智能体,到了实盘中往往需要用真实资金完成第一次学习;而这通常是我们不希望发生的学习方式。

第三重鸿沟:奖励函数把什么写进去,智能体就会追逐什么

只奖励收益,模型就会把风险当作不存在

强化学习系统不会自动理解“稳健”“克制”或“不要在不确定时重仓”。这些词对人类交易者有丰富的经验含义,对算法而言却必须被转译成明确的状态、约束和奖励。

如果奖励函数主要由收益构成,智能体自然会努力提高收益;如果奖励函数对短期盈利反馈得很快,对回撤和尾部风险反馈得很慢,智能体就可能愿意承担较大的风险来换取眼前的分数。它并没有违背设计者的意图,只是在非常认真地执行设计者写下的目标。

问题在于,我们经常把“收益最大化”写成一个看似合理、实际过于单薄的目标。

一套交易策略真正需要面对的,通常不只是最终赚了多少钱,还包括:

  • 收益是否依赖极少数极端交易;
  • 最大回撤是否超过账户可以承受的范围;
  • 波动是否过高,以至于实盘中难以坚持;
  • 换手率是否让交易成本吞掉优势;
  • 是否频繁改变仓位,造成执行压力和系统风险;
  • 是否在极端行情中出现连续加仓;
  • 是否在流动性不足时持有无法退出的仓位;
  • 是否存在某种单一市场状态下的脆弱暴露。

如果这些因素没有进入奖励函数或硬性约束,智能体没有理由主动关注它们。我们不能一边给它一张只写着收益的评分表,一边期待它像经验丰富的交易员那样理解风险边界。

奖励函数不是一个数字,而是一种价值排序

设想两个策略在一段时间里获得相同收益:一个策略波动较低、回撤可控,另一个策略多数时间平静,却在少数时刻承担极端风险。单看累计收益,它们可能没有区别;但对真实账户而言,两种体验完全不同。

这正是奖励函数困难的地方。它不仅要衡量结果,还要表达我们愿意用什么代价换取结果。

常见的设计思路包括,将收益与风险、成本、回撤和换手率结合起来。但简单地把几个指标相加,并不意味着问题已经解决。不同指标的量纲、时间尺度和惩罚强度会改变智能体的行为倾向。惩罚太轻,风险约束只是装饰;惩罚太重,模型可能变得过度保守,在所有不确定性面前都选择不行动。

可以把奖励设计理解为一份写给智能体的“行为边界说明”:

  • 允许它在什么情况下承担风险;
  • 哪些损失属于正常波动,哪些损失意味着策略失控;
  • 短期收益与长期稳定性发生冲突时,优先保留什么;
  • 交易成本达到什么程度后,应当减少动作;
  • 回撤扩大时,是降低风险、暂停交易,还是继续寻找机会;
  • 当状态信息不足时,是否允许模型保持谨慎。

在这个意义上,奖励函数与交易策略的价值观有关。我们不是在寻找一个数学上最漂亮的目标,而是在决定:希望这个系统成为一个怎样的参与者。

奖励延迟与风险错配

金融交易里的许多损失并不会立刻出现。一个仓位今天看起来没有问题,可能在数个交易时段之后,因为波动率上升、流动性下降或政策预期改变而产生大幅回撤。若奖励机制过度偏好即时反馈,智能体可能学会把风险推迟,而不是减少风险。

这会带来一种很容易被误判的现象:训练初期,策略表现越来越好;随着训练继续,短期收益仍然不错,但尾部风险开始积累。最终,某个之前被认为不太可能发生的市场状态出现,回撤迅速扩大。

在这里,最大回撤、波动率和交易成本不能只是事后统计指标。它们需要在训练阶段就以足够清晰的方式影响策略更新。某些风险约束也不宜完全依赖软惩罚,而应当设置为动作层面的边界,例如仓位上限、单次交易规模、连续亏损后的风险缩减、异常波动时的暂停机制。

这些限制并不会让强化学习失去灵活性。恰恰相反,边界可以让探索发生在一个尚可承受的范围内。没有边界的自由,有时只是把不可逆的损失留给未来。

探索并不适合直接发生在真实资金上

强化学习需要探索—利用的权衡。智能体要利用已经知道有效的动作,也要尝试新的动作,以便发现更好的策略。但交易市场不是一个可以无限重置的游戏环境,真实资金也不会因为一次试错而恢复原状。

随机探索在实盘中尤其危险。一个动作可能只是为了获得更多信息,却带来超出账户承受能力的损失;一次连续试错可能撞上低流动性时段、突发政策事件或极端价格跳变。更现实的做法,通常是先利用历史数据和模拟环境完成大部分探索,再通过模仿学习、行为克隆或演示缓冲区,让智能体从已有的相对稳健行为开始。

这并不意味着把人的策略当成绝对答案。人类交易行为同样会受到锚定效应、损失厌恶和沉没成本影响,也可能包含并不稳定的判断。但一个经过筛选的演示数据集,至少可以为智能体提供初始边界,减少它在早期训练阶段做出完全无约束动作的概率。

第四重鸿沟:市场不会保持原来的样子

非平稳性让“过去有效”变得非常脆弱

许多机器学习任务默认数据分布相对稳定:训练集和未来数据虽然不完全相同,但大致遵循相似规律。金融市场却不断变化,参与者会调整,规则会变化,资金会迁移,宏观环境会切换,投资者情绪也会在很短的时间里改变。

这就是非平稳性。

同一个成交量信号,在流动性充足、风险偏好较高的阶段,可能表达趋势延续;在政策不确定性上升、资金快速撤离的阶段,可能只代表短期拥挤。相同的价格形态,放在不同的波动率环境和市场结构中,也未必具有同样的含义。

强化学习策略尤其容易受到这种变化的影响,因为它学习的不是一个静态预测关系,而是一整套“在什么状态下采取什么动作、能够得到什么反馈”的策略。如果状态转移规律改变,过去的最优动作就可能变成新的风险来源。

概念漂移不是一次性的故障

我们常常把市场变化想象成一次明确的切换:牛市结束,熊市开始;高波动到来,低波动结束。但真实的概念漂移往往更缓慢,也更难被察觉。

订单行为可能逐步改变,某类参与者的占比可能慢慢上升,政策预期会在数周甚至数月内重新定价。模型的表现不会立刻从正变负,而是先出现一些细小的不协调:

  • 某个时段的交易胜率下降;
  • 获利交易的平均持有时间缩短;
  • 交易成本占收益的比例上升;
  • 原本较少出现的连续亏损变得更常见;
  • 模型在高波动阶段频繁改变动作;
  • 回撤之后的修复能力明显变弱;
  • 模拟环境与真实成交之间的差距扩大。

如果我们只盯着累计收益,可能要等到策略已经产生明显损失,才意识到环境早已改变。

因此,部署强化学习量化系统时,监控对象不能只有净值。状态分布、动作分布、换手率、成交偏差、延迟、滑点、风险暴露和不同市场阶段下的表现,都应该被持续观察。模型需要被当成一个会老化的系统,而不是上线之后就自动保持年轻。

不能只用更长的历史解决非平稳性

面对市场变化,一个直觉做法是收集更多历史数据。但更多数据不一定意味着更多有效信息。如果很久以前的市场机制与当前环境差异很大,简单地把它们放进训练集,反而可能让模型在不同机制之间学到混杂关系。

另一种做法是缩短训练窗口,让模型更快适应最新数据。这样能够提高时效性,却也可能让策略更加依赖近期噪声,形成新的过拟合。

这是一种没有简单答案的张力:窗口太长,模型对变化反应迟缓;窗口太短,模型容易被局部情绪牵着走。我们能够做的,不是寻找一个永远正确的窗口,而是建立一套持续检验与重新评估的机制。

可以考虑将市场状态作为显式信息纳入模型,例如波动率水平、流动性、相关性、趋势强度和宏观事件状态,但这些变量也不能被当作完美的“市场阶段标签”。它们只是帮助智能体更清楚地知道自己所处的环境,最终仍然需要通过样本外表现来检验。

一个相对稳妥的系统,往往允许策略在不确定时降低行动强度,而不是强迫自己每个时间步都做出明确判断。暂停、减仓和延后决策并不是模型能力不足的表现,有时恰恰是它开始认识到信息边界的迹象。

市场是部分可观察的:智能体看到的从来不是完整现实

强化学习常借助马尔可夫决策过程来描述环境:只要当前状态充分,就可以据此决定下一步动作。但在金融市场里,智能体几乎不可能获得完整状态。

它看见的是价格、成交量、盘口、新闻或一些衍生指标,却看不见所有参与者的真实意图,也无法完整知道场外资金、政策谈判、机构风险限额和突发事件。即使两个时刻呈现出相同的市场数据,它们背后的原因也可能不同。

这使得交易环境更接近部分可观察的决策过程。模型不仅要理解当前状态,还要从一段时间的变化中推测隐藏状态。循环神经网络,例如长短期记忆网络和门控循环单元,可以用来捕捉时间依赖;但引入记忆并不会自动补全不可见的信息。它只能帮助模型保留历史痕迹,不能把未知变成已知。

这也是为什么单个时间点的特征往往不够。盘口看起来平衡,不代表买卖双方真的平衡;成交量放大,也不代表趋势一定延续。智能体需要观察状态如何形成、如何变化,以及这些变化是否在不同市场环境中具有一致含义。

不过,增加记忆长度也有代价。输入的历史越长,模型拥有的自由度越多,训练难度和过拟合风险也会提高。我们还是会回到最初的问题:哪些信息是可迁移的,哪些只是历史留下的纹理。

为什么回测表现特别好,反而值得多问几句

当一套强化学习策略在回测中表现异常出色,我们通常会先感到兴奋,随后才开始检查数据和代码。也许这条曲线确实来自一个有价值的发现,但它同样可能由几类因素共同制造:

  • 使用了未来信息或隐含的标签泄漏;
  • 调参次数过多,最终挑中了最漂亮的一组结果;
  • 交易成本设置过低,甚至没有计入;
  • 默认每次订单都能按目标价格成交;
  • 没有处理停牌、涨跌幅限制、无法成交和部分成交;
  • 用随机切分破坏了时间顺序;
  • 在同一段历史上重复训练和验证;
  • 只报告累计收益,没有展示回撤、换手和稳定性;
  • 策略实际收益依赖极少数极端行情;
  • 环境中的动作空间比真实账户更自由。

回测并不是没有意义。它能够帮助我们理解策略逻辑,筛掉明显不可行的想法,也能提供关于风险暴露和交易行为的初步信息。问题在于,回测结果必须被放回它产生的条件里阅读。

一条收益曲线不是模型的身份证,更像是一份实验记录。我们需要知道它是在什么数据、什么成本、什么撮合规则、什么风险边界下形成的,才能判断它是否有机会走出模拟环境。

从模拟盘走向实盘:真正需要搭建的不是一条直线

强化学习量化交易的部署,不适合被理解为“训练完成—接入账户”这样简单的两步。更接近现实的过程,是让模型逐渐面对更多摩擦,同时保留随时退出和复盘的边界。

先让环境变得不那么理想

模拟器可以从简单开始,但不能永远简单。随着模型进入下一阶段,交易成本、延迟、成交概率、流动性和规则限制都应该逐步加入。最初的环境用于验证逻辑,后续的环境用于接近执行现实。

这里有一个容易被忽视的顺序:不是先把模型训练到极致,再补充市场细节,而是尽早让模型接触关键摩擦。否则,智能体可能在一个不真实的环境里形成稳定习惯,等到最后才发现,所有优势都建立在一个不存在的成交假设上。

用行为约束代替无限自由

动作空间越大,模型越灵活,也越容易在极端状态下做出难以解释的行为。限制单次交易规模、总仓位、交易频率和连续风险暴露,并不是对强化学习的否定,而是对真实账户边界的承认。

尤其是在训练早期,风险约束应当优先于收益追求。一个可以在短期内获得高收益、却会在异常行情中持续加仓的智能体,距离实盘可用还很远。我们更愿意看到一个收益没有那么耀眼、但行为可解释、风险可收敛的系统。

把退出机制写进系统,而不是留给情绪

真实交易中,最难的时刻往往不是策略盈利时,而是模型开始偏离预期、我们又不确定这只是正常回撤还是结构性失效时。那种悬而未决的状态很容易唤起沉没成本:已经投入了这么多数据、算力和时间,是否应该再等一等?

因此,系统需要预先定义监控与暂停条件,例如成交偏差持续扩大、策略风险暴露异常、状态分布显著漂移、实际表现超出历史回撤范围等。具体阈值需要结合品种、频率和账户风险承受能力设定,但原则是明确的:暂停并不等于失败,重新评估也不是对模型的否定。

它只是为我们保留了一个边界,让一次不确定的变化,不至于自动变成无法挽回的损失。

先验证行为,再谈收益

在从模拟盘过渡时,关注重点不应只有盈亏。我们还需要观察:

  • 智能体是否按照预期控制交易频率;
  • 订单是否在真实延迟下仍然具备可执行性;
  • 部分成交后,后续动作是否会失控;
  • 遇到连续亏损时,是否出现报复性加仓;
  • 遇到盈利回撤时,是否突然改变风险偏好;
  • 模型是否过度依赖某个时间段或某类行情;
  • 实盘中的滑点和冲击成本是否显著高于模拟假设;
  • 风控限制触发后,智能体能否平稳地重新进入决策流程。

这些行为指标,有时比短期收益更早暴露系统问题。因为收益具有随机性,而行为往往更接近模型真正学会了什么。

强化学习仍然有价值,但它更适合被放在边界清楚的位置

讨论强化学习在量化交易中的失效,容易走向两个极端:一种认为只要模型足够复杂,就能跨越模拟与现实之间的差距;另一种则认为强化学习完全不适合金融市场。

这两种判断都过于绝对。

强化学习并非没有应用空间。它可以作为经典策略的增强层,用于交易执行、订单拆分、动态调整参与率,或者在给定风险边界内优化仓位和执行过程。相较于让智能体直接承担所有方向性判断,把它放在一个边界更清楚、反馈更及时、动作影响更容易建模的局部问题中,往往更容易控制风险。

例如,传统的成交量加权平均价格或时间加权平均价格策略,本身已经提供了一套基本执行框架,强化学习可以在不同流动性和波动状态下调整执行节奏,而不必从零开始决定所有交易行为。这样的设计不是降低算法的“智能程度”,而是承认金融系统的复杂性,并把学习任务放在它更可能做好的范围内。

同样,模仿学习、规则约束、风险预算和传统统计模型,也不必被视为强化学习的竞争者。它们可以共同构成一个更有层次的系统:预测模型负责提供信息,强化学习负责在边界内做决策,执行系统负责处理市场摩擦,风险模块负责在异常状态下拥有更高优先级。

一个成熟的交易系统,很少是某一种算法单独完成的作品。它更像一间夜里仍然亮着灯的工作室,不同工具各自承担一部分责任,彼此之间保留足够清楚的边界。

我们真正需要防范的,是把模型当成了不会犯错的交易者

强化学习量化交易的四大鸿沟——过拟合与噪声依赖、市场微结构缺失、奖励函数失衡、市场非平稳性——表面上属于技术问题,深处却也与人的心理有关。

我们希望回测能够尽快给出确定答案,于是容易对漂亮曲线产生锚定效应;我们已经投入大量时间训练模型,于是会受到沉没成本影响,不愿承认环境可能已经改变;我们希望系统替自己承担不确定性,却忘记了算法只能处理被观测、被定义和被约束的部分现实。

模型并不会因为使用了深度学习或强化学习,就自动获得对市场的理解。它不会天然知道什么是过度冒险,也不会因为经历过一万次模拟,就真正经历过一次流动性突然消失的夜盘。它所拥有的经验,仍然来自我们提供的环境;它所追逐的目标,仍然来自我们写下的奖励;它所看见的世界,也仍然受限于数据和接口。

所以,从模拟盘到实盘的关键,不是寻找一种能够完全消除鸿沟的算法。这样的算法并不存在。更现实的方向,是尽量让鸿沟变窄,让模型在进入真实系统之前,已经面对过更多不完美的成交、更复杂的市场状态和更严格的风险边界。

我们也许无法让交易系统永远正确,但可以让它在不确定时少做一点,让它在偏离时更早被看见,让它在失效时保留退出的余地。对一个真正要与市场长久相处的智能体来说,这些能力可能比一段耀眼的回测收益更值得珍惜。

夜深之后,屏幕上的净值曲线仍会有起伏。我们能做的,不是要求它替我们消除所有焦虑,而是在一次次验证、复盘和自我和解中,重新确认人与模型各自应该站在哪里。

Related reading: 量化交易的区别与判断标准 and 线性模型与深度学习在量化交易中的博弈:简单与复杂的策略抉择.

常见问题

为什么强化学习模型在回测中表现很好,实盘却亏损?
这通常是因为模型在回测中过度拟合了历史噪声,或者模拟环境过于理想化,忽略了真实市场中的滑点、延迟、流动性限制及交易行为对价格的冲击。
如何判断强化学习模型是在学习规律还是在背诵历史?
可以通过滚动测试、跨市场状态验证、扰动测试(如改变手续费或延迟)以及特征消融实验来观察。如果模型对参数微调极其敏感,或离开特定历史区间后表现大幅下滑,则说明它可能只是在背诵历史。
在强化学习中,奖励函数应该包含哪些要素?
奖励函数不应仅包含收益,还应综合考虑最大回撤、波动率、换手率、交易成本及风险暴露。它应被设计为一份明确的“行为边界说明”,以约束智能体在不确定性下的行为。
如何解决强化学习在金融市场中的非平稳性问题?
不能仅靠增加历史数据,因为旧机制可能与当前环境冲突。应建立持续的监控机制,观察状态分布、成交偏差及风险暴露,并允许策略在环境不确定时降低行动强度或暂停交易。
强化学习在量化交易中还有应用价值吗?
有。它适合在边界清晰的局部问题中发挥作用,如交易执行、订单拆分、动态调整参与率或在给定风险约束下优化仓位,而非作为从零开始预测市场的全能模型。