reinforcement learning in trading · why it usually fails
"让 agent 自己学怎么交易"听起来很美。问题是它学到的往往不是市场规律,而是训练集的偶然规律。
Atari 的规则 30 年不变,agent 玩 1 亿次还是同一个游戏。市场不是——2015 和 2024 的微观结构完全不同,agent 在 2015-2020 学到的策略,2021 后大概率失效。RL 的高自由度让它在非平稳序列上极容易过拟合,比监督学习还狠。
奖励函数是 RL 的灵魂,也是最容易翻车的地方。只奖励 PnL,agent 学会高频刷单吃成本;加交易成本项,agent 学会不交易;加 drawdown 惩罚,agent 学会一亏就跑。每一项都"对",组合起来就矛盾——奖励函数的设计本身就是量化研究,不是 RL 能自动解决的。
调三项奖励权重——PnL、交易成本惩罚、回撤惩罚——看 agent 最终 PnL 怎么变、交易频率怎么变。权重不对,agent 学到的是"钻空子"而不是"做交易"。
一次持仓 30 天才平仓,奖励只在最后一天给。中间 29 天 agent 不知道做得对不对,credit assignment 极难。监督学习每条样本都有标签,RL 要等回合结束才有奖励——样本效率差一个数量级。
市场制度(regime)会切换:牛熊、流动性、波动率结构都在变。agent 在一个 regime 学的策略,换 regime 就失效。而 Atari 的状态分布是固定的,这是 RL 在交易上最根本的不匹配。
RL 自由度极高,policy 网络几百万参数,A股有效训练样本就那么几年。模型容量>>数据信息量,过拟合几乎是必然。PPO 在 Atari 能跑 1 亿次,交易上跑 1 亿次就过拟合 1 亿次。
回测里交易免费,实盘里成本能吃掉一半收益。agent 学会高频交易,回测漂亮,实盘手续费+滑点直接亏穿。没把成本放进奖励函数的 RL,等于在另一个宇宙训练。
这四个陷阱不是"调调参数能解决"的,是问题结构层面的。所以业界做 RL 交易的人,多半把它用在执行层(怎么拆单减少冲击)而不是策略层(什么时候买卖)——执行层问题结构更接近 RL 擅长的马尔可夫决策过程。