3、动作空间设计:离散动作 vs 连续动作的取舍,仓位管理的动作约束,交易成本与滑点的动作惩罚机制
动作空间设计,说白了就是决定你的交易智能体「能做什么」。这个问题我琢磨了很久,刚开始做RL交易系统时,我踩过不少坑。今天咱们就聊聊这块的核心要点。
3.1 离散动作 vs 连续动作:怎么选?
先问个问题:你的交易策略是「买、卖、持有」三选一,还是「我要精确地买多少股」?
这两种思路,对应着离散动作和连续动作。我个人习惯这样区分:
- 离散动作:动作数量有限,比如{-1, 0, +1}代表卖出、持有、买入。适合做方向性判断。
- 连续动作:动作是一个连续值,比如[-1, 1]之间的实数,代表仓位比例。适合做精细化仓位管理。
我在项目中遇到过这样一个案例:用离散动作做股指期货日内交易,效果还不错。但换到股票上,离散动作就有点力不从心了——你想加仓到80%仓位,离散动作只能给你「加仓」或「不加」,太粗糙了。
核心取舍原则:
- 高频交易、做市策略 → 离散动作(动作空间小,训练快)
- 中低频、组合管理 → 连续动作(精细化控制仓位)
- 混合方案:先离散选方向,再连续定仓位(我常用这个)
嗯,这里要注意:连续动作空间虽然灵活,但训练难度大。你想想看,一个连续值域里有无穷多种可能,智能体得探索多久才能找到最优解?
3.2 仓位管理的动作约束
动作空间设计好了,不代表智能体可以乱来。仓位管理必须有约束,否则它会干出一些离谱的事——比如满仓加杠杆梭哈。
我曾经吃过这个亏。早期一个模型训练到一半,突然发现智能体学会了「全仓买入,然后爆仓归零」的骚操作。它不在乎,因为训练目标是最大化累积收益,爆仓了正好重新开始?
所以,动作约束是必须的。我一般这样设计:
| 约束类型 | 实现方式 | 我的经验 |
|---|---|---|
| 仓位上下限 | 动作输出后做clip | 比如限制仓位在[0, 1]之间,不允许做空 |
| 单笔变动限制 | 限制动作变化率 | 每次最多调整20%仓位,防止剧烈波动 |
| 风险预算约束 | 基于VaR动态调整 | 波动率大时自动降低仓位上限 |
我的小技巧:把约束直接编码进动作空间,而不是在奖励函数里惩罚。比如用tanh激活函数把输出限制在[-1,1],再映射到实际仓位范围。这样智能体从一开始就学不会「越界」的行为。
举个例子,假设你的仓位范围是[0, 1],可以这样映射:
def action_to_position(raw_action):
# raw_action 来自神经网络输出,范围[-1, 1]
# 映射到仓位 [0.1, 0.9],保留一些现金
position = 0.5 + 0.4 * raw_action
return np.clip(position, 0.1, 0.9)
这样设计,智能体永远无法满仓或空仓,安全多了。
3.3 交易成本与滑点的动作惩罚机制
这是新手最容易忽略的地方。你想想看,如果奖励函数里不考虑交易成本,智能体就会疯狂交易——反正不花钱嘛。
我刚开始做的时候也犯过这个错。模型训练出来,回测曲线漂亮得不行,一上实盘就亏成狗。为什么?因为回测里没算滑点和手续费。
正确的做法是:在奖励函数里加入惩罚项。我一般这样设计:
def calculate_reward(portfolio_value, action, prev_action, trade_cost=0.001, slippage=0.0005):
# 基础收益
pnl = portfolio_value - prev_portfolio_value
# 计算交易量(仓位变化绝对值)
turnover = abs(action - prev_action)
# 惩罚项:交易成本 + 滑点
penalty = turnover * (trade_cost + slippage) * portfolio_value
# 最终奖励
reward = pnl - penalty
return reward
避坑指南:我曾经把惩罚系数设得太小,结果智能体学会了「高频刷单」——每次赚一点点,但交易成本累积起来把利润全吃掉了。后来我把惩罚系数调大了3倍,模型才老实下来。
这里有个关键点:惩罚系数需要根据你的交易品种和市场环境调整。比如:
- 股票:手续费约万1-万3,滑点看流动性
- 期货:手续费低,但滑点可能大
- 加密货币:手续费低,但滑点波动剧烈
我个人习惯在训练初期用较大的惩罚系数,让智能体先学会「少交易」。等策略稳定了,再逐步降低惩罚,给它更多交易自由度。
3.4 知识体系总览
说了这么多,咱们用一张图来梳理一下动作空间设计的核心逻辑:
这张图把咱们刚才聊的内容串起来了。从动作类型选择,到约束设计,再到惩罚机制,每一步都环环相扣。
最后说一句:动作空间设计没有标准答案。我见过有人用离散动作在股票上跑出年化30%,也见过连续动作策略亏到姥姥家。关键是要根据你的交易品种、频率和风险偏好来定制。多试几次,找到最适合你的方案。
公众号:蓝海资料掘金营,微信deep3321