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 知识体系总览

说了这么多,咱们用一张图来梳理一下动作空间设计的核心逻辑:

动作空间设计核心逻辑 离散动作 {-1, 0, +1} 连续动作 [-1, 1] 实数 混合方案 离散方向 + 连续仓位 仓位管理约束 仓位上下限 单笔变动限制 风险预算约束 编码进动作空间 交易成本与滑点惩罚 手续费惩罚 滑点惩罚 惩罚系数调参 奖励函数设计 目标:平衡探索效率与交易成本

这张图把咱们刚才聊的内容串起来了。从动作类型选择,到约束设计,再到惩罚机制,每一步都环环相扣。

最后说一句:动作空间设计没有标准答案。我见过有人用离散动作在股票上跑出年化30%,也见过连续动作策略亏到姥姥家。关键是要根据你的交易品种、频率和风险偏好来定制。多试几次,找到最适合你的方案。

公众号:蓝海资料掘金营,微信deep3321