为什么量化交易用“裁剪对数收益率”更靠谱?
《为什么量化交易用“裁剪对数收益率”更靠谱?——强化学习中的回报函数选择》
这是一个非常核心的强化学习环境设计问题。选择裁剪后的对数收益率(Clipped Log Return)而非简单收益率(Simple Return),主要基于以下三个层面的考量:
1. 为什么用「对数收益率」而非「简单收益率」?
| 维度 | 简单收益率r=Pt−Pt−1Pt−1r = \frac{P_t - P_{t-1}}{P_{t-1}}r=Pt−1Pt−Pt−1 | 对数收益率r=log(PtPt−1)r = \log(\frac{P_t}{P_{t-1}})r=log(Pt−1Pt) |
|---|---|---|
| 时间可加性 | 不可加:(1+r1)(1+r2)≠1+r1+r2(1+r_1)(1+r_2) \ne 1 + r_1 + r_2(1+r1)(1+r2)=1+r1+r2 | 可加:∑logri=log(∏ri)\sum\log r_i = \log(\prod r_i)∑logri=log(∏ri),与 RL 累计奖励定义天然一致 |
| 对称性 | 不对称:跌 -50% 后需要涨 +100% 才回本,算术均值≠0\ne 0=0 | 对称:+x% 和 -x% 数值相等符号相反,均值=0 表示不赚不亏 |
| 值域 | [−1,+∞)[-1, +\infin)[−1,+∞),正收益无上界 | (−∞,+∞)(-\infin, +\infin)(−∞,+∞),分布更接近正态 |
| 梯度信号 | 大涨时梯度爆炸,小涨时梯度饱和 | 自然压缩极端值,梯度更平稳 |
核心原因:RL 的目标是最大化∑γtrt\sum \gamma^tr_t∑γtrt。
其中,rtr_trt是即时奖励(Immediate Reward),在时间步ttt执行动作后,环境返回的标量反馈(当日对数收益率);γ\gammaγ是折扣因子(Discount Factor),0≤γ≤10 \le \gamma \le 10≤γ≤1,用于降低未来奖励的重要性,使问题有界且符合人类“重视当下”的偏好;γt\gamma^tγt,折扣权重,时间越远的奖励,权重越小(指数衰减);∑γtrt\sum \gamma^tr_t∑γtrt是折扣累积回报(Discounted Return),表示 Agent 从初始状态开始,按策略执行到终止(或截断),所获得的总“价值”。
如果用简单收益率,代理优化的是"各期简单收益之和",但这不等于终端资产。例如连续两天 +50% 和 -50%,简单收益之和为0,但实际资产变为 1.5×0.5=0.751.5×0.5=0.75 ,亏损25%。
对数收益率之和 = log(终值/初值),严格等价于最大化终端财富的对数,这正是投资组合理论中 Kelly Criterion 的最优目标。
2. 为什么要「裁剪(Clip)」?
对数收益率虽然解决了可加性和对称性问题,但引入了新的风险:
当portfolio_value→0时,log(portfolio_value/pre_value)→−∞ 当 \mathrm{portfolio\_value} \rightarrow 0 时,\log(\mathrm{portfolio\_value}/\mathrm{pre\_value}) \rightarrow -\infty当portfolio_value→0时,log(portfolio_value/pre_value)→−∞
这在训练中会导致:
- 梯度爆炸:一次极端亏损产生的巨大负奖励会摧毁网络权重
- 价值函数发散:Critic 网络无法拟合包含
-inf的目标值 - 探索崩溃:Agent 因恐惧极端惩罚而退化为"永远持有现金"的保守策略
裁剪操作np.clip(log_ret, -max_log_return, max_log_return)的作用:将奖励限制在有限区间内,保留方向信号的同时消除数值灾难。
max_log_return=0.5对应单步约 ±65% 的涨跌幅,对于日频交易数据已远超正常范围,既不会丢失有效信息,又能完全屏蔽异常值。
3. 为什么不直接用简单收益率 + 裁剪?
你可能会想:那直接clip(simple_return, -0.5, 0.5)不也行吗?
答案是可以,但次优。因为即使裁剪了,简单收益率仍然缺乏时间可加性。Agent 在训练中学到的"最优策略"仍然是对简单收益求和的最优,而非对终端资产的最优。在长周期任务中,这种偏差会持续累积。
实践建议:如果你的环境是日频且杠杆不高,简单收益率裁剪后也能工作;但如果涉及高频、杠杆或长episode,裁剪对数收益率是业界标准做法(FinRL、TensorTrade 等主流框架均采用此方案)。
