作者使用强化学习构建了一个 agent,可以在股票市场下达买卖订单。仅使用历史观察数据构建环境模型,RL agent 通过与环境模型而不是与真实市场交互来学习交易策略,以最小化风险和潜在的经济损失。本文的环境模型以 无监督 和 自监督 的方式进行训练,通过深度神经网络学习了市场潜在空间的时间和因果表示。作者证明了完全在环境模型中训练的交易策略可以转移回真实市场并保持其盈利能力。作者认为这种环境模型可以作为一个稳健的模拟器来预测市场走势以及贸易影响,以供进一步研究。
1 解决了什么问题?目前现有的 MBRL 依赖于一些来自现实的交互式反馈,用于在线更新模拟器。这对于避免不匹配问题至关重要:环境模型的近似误差可能会导致 RL 策略朝着错误的方向发展。使用固定的数据集来训练策略,这种偏离最佳策略的问题变得难以自我纠正。为了在更复杂的现实世界中提出没有真实环境交互数据的 MBRL 系统,作者提出基于模型的 RL 框架并测试其在电子交易领域的稳健性。
鉴于 MBRL 和电子交易系统之间的结构相似性,作者认为基于模型的 RL 代理在观察数据上训练有可能解决电子交易中的问题。本文有两个主要贡献:
在 MBRL 框架中,作者使用潜在表示学习对 状态空间 和 奖励 进行建模,并证明了这种表示学习在金融领域的有效性,其中数据是高维和非平稳的。
作者证明,使用这种环境模型,基于模型的 agent 始终优于常用的基准交易策略。这种方法可以使用观察数据学习有利可图的交易策略,而无需环境交互或人类专家的标记。
1 限价订单簿(Limit Order Books)。LOB 有两种类型的订单:出价和问价。在任何给定时间 t t t,一个出价(问价)单是在或低于(高于)指定价格 b p ( t ) bp(t) bp(t)( a p ( t ) ap(t) ap(t)) 买入(卖出)一定数量 b s ( t ) bs(t) bs(t) ( a s ( t ) as(t) as(t)) 的金融工具。在时间 t t t 提交的订单根据其价格被分类到不同的级别。例如,最低问价和最高买入价被分组到第一级订单中,其次是第二低的ap和第二高的bp作为第二级,依此类推。 { ap, bp, as, bs } i {text { ap, bp, as, bs }}_{i} { ap, bp, as, bs }i 是不同价格等级 i i i 的值和数量的向量。LOB 的时间序列演化可以看作是一个 3 维张量:第 1 维代表时间,第 2 维代表水平,第 3 维代表买卖双方的价格和订单数量。当提交的订单由 LOB 的交易匹配算法执行时,订单的价格和数量以及方向(bid or ask)将从 LOB 中删除并记录在历史交易记录(trade print)中。
2 中间价(mid price)。第一级订单的问价和出价的平均值。
mid
t
=
a
p
1
+
b
p
1
2
operatorname{mid}_{t}=frac{mathrm{ap}_{1}+mathrm{bp}_{1}}{2}
midt=2ap1+bp1
如上图,mid price 为 (408.0+408.3)/2 = 408.15。中间价的变动通常用于 近似市场变化。在本文中,作者 使用中间价来计算奖励。
3 交易记录(trade prints)。交易记录是执行交易的记录,包含方向(买入或卖出)、交易价格和数量等信息。交易记录的收集可能由市场上的不同 agent 执行。在本文中,作者使用历史交易记录作为 RL agent 的探索行动,同时将在目标操作之前的一系列交易记录作为状态的一部分。该数据为状态转换概率模型提供了关键信息。
4 强化学习算法。本文使用三种通用的强化学习算法来训练策略,分别为 Double DQN,Policy Gradient 和 A2C。
2.2 Problem Formulation and Dataset限价订单簿数据是具有高采样频率的时间序列。作者使用在香港证券交易所交易的一只股票的时间序列数据(LOB + 交易记录)。LOB 的更新频率约为 0.17 秒。我们使用 2018 年 1 月~2018 年 3 月(61 天) 的数据进行训练,以 20% 作为验证集,并在 2018 年 4 月(19 天) 测试模型性能。该数据集包含大约 600 万个用于训练的转换和 200 万个用于测试的 transitions。
1 State space ( S ) (S) (S): s t = { a e ( o b t − T : t ) , u t , p o t } s_{t}=left{mathrm{ae}left(mathrm{ob}_{t-T: t}right), u_{t}, mathrm{po}_{t}right} st={ae(obt−T:t),ut,pot}, z t = a e ( o b t − T : t ) z_{t}=mathrm{ae}left(mathrm{ob}_{t-T: t}right) zt=ae(obt−T:t) 是 LOB 在持续时间 T T T 内的潜在表示。 u t u_t ut 是在相同持续时间 T T T 内发生的交易记录。 p o t po_t pot 是 RL 代理在时间 t t t 的头寸。头寸反映了代理人持有的私人库存,在本文中,它是有界的, ( − p o max , p o max ) left(-mathrm{po}_{max }, mathrm{po}_{max }right) (−pomax,pomax)。
2 Action space ( A ) (A) (A): a t = ± q a_{t}=pm q at=±q,每个动作都是 RL agent 的交易决策。该决策包括交易的价格、数量和方向。在本文中,作者假设交易价格设置在中间价,并且可以直接从 LOB 更新中计算出来。因此,RL agent 的动作包含 q q q 数量的绝对值和 ± 交易方向(卖出/买入)。
3 Reward Function
(
R
)
(R)
(R):本文使用按市值计价的 PnL 来计算代理的奖励。它被定义为:
R
(
t
)
=
Δ
mid
s
t
,
s
t
+
1
×
po
t
mathcal{R}(t)=Delta operatorname{mid}_{s_{t}, s_{t+1}} times operatorname{po}_{t}
R(t)=Δmidst,st+1×pot
其中,
p
o
t
po_t
pot 是 RL agent 在时间
t
t
t 的头寸,
Δ
mid
s
t
,
s
t
+
1
Delta operatorname{mid}_{s_{t}, s_{t+1}}
Δmidst,st+1 是状态
s
t
s_t
st 和
s
t
+
1
s_{t+1}
st+1 之间平均 LOB 中间价的差值。
4 Transition ( T ( s t + 1 ∣ s t , a t ) ) left(mathcal{T}left(s_{t+1} mid s_{t}, a_{t}right)right) (T(st+1∣st,at)):作者使用观察到的状态转换轨迹来训练环境模型。具体来说,作者遍历历史数据中的交易记录,并将每笔交易视为转换中的目标行动。当下一个交易成为目标动作时,相同的动作可能成为下一个转换中状态 u t u_t ut 的一部分。
5 Initial State ( ρ 0 ) left(rho_{0}right) (ρ0):初始状态是从训练数据集中所有天的第一个状态中采样的,遵循均匀分布。
对于长度为 T T T 的每个 LOB 时间序列序列 o b t − T : t ob_{t-T:t} obt−T:t,我们使用特征级别的 min 和 max 来标准化跨时间的数据。对于交易数量标准化,作者首先排除数量少于 100 或超过 1000 的异常交易。然后使用 100 和 1000 作为 min-max 归一化的边界,边界是根据数据分布经验确定的,同时实现了 min-max 归一化,然后对奖励进行 sigmoid 转换。这里值得注意的是,奖励转换仅在探索期间在 world model 内部进行,用于训练目的。
2.3 World ModelWorld Model 具体包含三个部分:潜在表示模型、转化模型和收益模型。
1 Latent Representation Model (Auto-encoder)。LOB 数据包含重要的时间序列市场信息,但由于其高维度,难以学习。自动编码器(AE)的作用是找到 LOB 观测值的抽象和低维表示,以便于学习。AE 的输入和输出都是维度 T × 4 L T × 4L T×4L,其中 L L L 是 LOB 中的级数。作者在实验中使用 3 个级别。AE训练完成后,作者将 1 × m 1×m 1×m 维度的中间层作为高维 LOB 数据的潜在表示。这里我们设置 m = 16 m = 16 m=16。
2 Transition Model (RNN-MDN) 。作者使用 RNN-MDN 模型来学习状态-动作转换
P
(
s
′
∣
s
,
a
)
mathcal{P}left(s^{prime} mid s, aright)
P(s′∣s,a)。该模型还解决了交易对市场的影响。本文使用长序列的状态和动作来训练 RNN 并学习了短期和长期影响。作者进一步将 RNN 与 混合密度网络 (MDN) 相结合。这种方法将 RNN 的输出近似为分布的混合,而不是
s
′
s^{prime}
s′ 的确定性预测。MAD 写成:
p
(
s
′
∣
s
,
a
)
=
∑
n
=
1
N
w
k
(
s
,
a
)
D
(
s
′
∣
μ
n
(
s
,
a
)
,
σ
n
2
(
s
,
a
)
)
pleft(s^{prime} mid s, aright)=sum_{n=1}^{N} w_{k}(s, a) mathcal{D}left(s^{prime} mid mu_{n}(s, a), sigma_{n}^{2}(s, a)right)
p(s′∣s,a)=n=1∑Nwk(s,a)D(s′∣μn(s,a),σn2(s,a))
其中
D
(
⋅
)
mathcal{D}(cdot)
D(⋅) 是一个假定分布,例如高斯、伯努利等。RNN 的输入序列长度为
N
N
N,第
(
N
+
1
)
t
h
(N+1)^{th}
(N+1)th 个状态是基于前
N
N
N 个序列的预测。这种方法过去已广泛应用于序列生成任务。
3 Reward Model。由于 PnL 取决于 RL agent 看不到的下一个状态,因此使用回归模型根据 当前潜在状态 和 预测的下一个潜在状态 预测中间价的变化:
r
t
=
R
(
z
t
,
z
t
+
1
;
β
)
×
p
o
t
r_{t}=mathcal{R}left(z_{t}, z_{t+1} ; betaright) times mathrm{po}_{t}
rt=R(zt,zt+1;β)×pot
其中,
β
beta
β 是奖励模型的参数。在奖励模型中,头寸
p
o
po
po 取决于已执行的操作和人为的限制范围。给定当前位置和动作的下一个头寸计算如下:
po
t
+
1
=
{
min
(
po
t
+
∣
a
t
∣
,
po
max
)
when
a
t
>
0
max
(
po
t
−
∣
a
t
∣
,
−
po
max
)
when
a
t
<
0
operatorname{po}_{t+1}=left{begin{array}{ccc} min left(operatorname{po}_{t}+left|a_{t}right|, operatorname{po}_{max }right) & text { when } & a_{t}>0 \ max left(operatorname{po}_{t}-left|a_{t}right|,-operatorname{po}_{max }right) & text { when } & a_{t}<0 end{array}right.
pot+1={min(pot+∣at∣,pomax)max(pot−∣at∣,−pomax) when when at>0at<0
其中
(
−
p
o
max
,
p
o
max
)
left(-mathrm{po}_{max }, mathrm{po}_{max }right)
(−pomax,pomax) 定义了头寸的范围。
The latent representation, transition model, and reward model together are the world model. 然后,作者在这个环境中的某个时间范围内最大化总回报来训练 RL agent。
2.4 Agent Modelagent 通过在预训练的环境模型中完全探索来学习策略。从随机选择的初始状态开始,RL agent 输出一个动作,然后将状态和动作反馈给环境模型以预测下一个状态,依此类推,直到达到停止标准。在这里,作者固定时间范围并训练 RL 策略以最大化总奖励。策略收敛后,我们会按照类似步骤反复使用历史数据对其进行评估:
- 来自当前状态和潜在 LOB (
z
t
z_t
zt) 和相应的交易记录 (
u
t
u_t
ut);由 RL agent 采取行动;收取奖励;如果未超时,则返回步骤 1。
作者使用动量驱动的交易策略和基于分类器的策略作为实验的基准。前者是一种表现良好的行业策略,后者是最先进的深度学习网络。我们还使用贪心最优策略来衡量 RL 策略与最优策略的接近程度。
1 Momentum-driven Strategy. 动量的计算方法是从收盘中间价减去开盘中间价。例如,如果一个状态有 40 个时间刻度,则收盘中间价是第 40 个时间刻度的中间价,开盘中间价是第 1 个时间刻度的中间价。它粗略地反映了一个状态内的价格变化,并假设这种变化会延续到下一个状态。动作可以分为三类:上升、下降和不变。交易策略是人工定义的,对于动作空间中的每个动作都有一个 固定的数量。如果 agent 总是在每次购买或出售的动作中获取最大数量,则它是“激进的”。激进的 agent 可能有最大的回报,但也有最大的亏损风险。agent 还可以在每个动作中取最小数量。这种代理是“保守的”,风险较小,但可能会错失可观的收益。
2 Classifier-based Strategy. 分类器使用历史 LOB 数据进行训练,并根据当前状态预测下一个状态的中间价格变动。与基于动量的策略相同,使用手工制作的策略。根据分类,它可以介于“进步”和“保守”之间。在本文中,作者用三个 CNN 层和一个具有三个输出状态的 Dense 层(64 个神经元)构建了这个分类器。作者使用分类交叉熵作为损失函数。
3 Greedy Optimal. 该策略假设 agent 知道下一个状态的未来 LOB。对未来知识的需求使得这种策略在现实世界中不切实际。但是,它可以为 RL 提供参考,以衡量 RL 策略与最优策略的接近程度。全局最优策略可以通过广度优先搜索找到,其中动作被离散化为 21 个离散动作。对于交易策略,这种策略在计算上是难以处理的:对于 1000 个时间刻度,复杂度可能高于 2 1 1000 21^{1000} 211000,而对于流动性市场,1000 个时间刻度的长度仅为 3 分钟。为了克服这个障碍,作者使用了一个贪婪的最优策略:只在每个级别(每个时间步)扩展具有最大累积奖励的最佳动作,而不是沿时间向后访问。贪心最优策略并不能保证全局最优,但是,它将计算复杂度从指数降低到多项式。
3.2 模型结构本文使用基于 CNN 的自动编码器来表示具有潜在状态的原始 LOB 数据。每个状态的交易记录 u u u 的长度限制为 10 个,并带有后零填充。在转换模型(RNN-MDN)中,一层 RNN 有 128 个神经元。它的输入和输出序列长度为 10。我们假设状态分布为高斯分布,高斯分布的数量为 5。奖励模型由 128 个 LSTM 单元的一层和 40 个单元的 Dense 层组成。贪婪最优策略和 RL agent 的动作被离散为 21 个类,交易量表示 [ − 1000 , − 900 , ⋅ ⋅ ⋅ , 0 , ⋅ ⋅ ⋅ , 900 , 1000 ] [−1000,−900 ,··· ,0,··· ,900,1000] [−1000,−900,⋅⋅⋅,0,⋅⋅⋅,900,1000]。训练时间范围设置为 500,每个状态包括 40 个时间 ticks,因此每个训练周期覆盖 ∼ 1 小时市场时间。训练范围可以根据不同的需求轻松扩大。
3.3 结果作者在 2018 年 4 月随机选择了 4 天,每天 300×40 时间刻度(∼ 0.56 小时)来展示相应的中间价。我们认为交易费用为每个数量 PnL 的 2% 单元。基于动量和基于分类器策略的阴影代表了渐进策略和保守策略之间所有可能的表现,其上边缘显示了在任何给定时间刻度上的最佳表现,但策略可能并不总是相同的。为了降低风险,增加累积回报,混合策略更为合理。但是,它需要具有基准的更复杂的手工策略。RL 策略是一种直接的混合策略方法,其中在不同状态下采取不同数量的动作。
如图所示,RL agent 的性能通常非常接近贪婪最优解,并且比其他两个基准的平均性能高 10% 到 30%。在某些时间段内,渐进式基于动量的智能体击败了 RL 智能体,这是因为在此期间每个 RL 动作的数量小于基于动量的智能体,以避免瞬态预测的未来风险。基于分类的智能体表现相对较差,作者认为这是由分类偏差引起的。分类器倾向于将动作错误分类为“无变化”,因为这是主导类,因此基于分类器的智能体采取的行动较少。这实际上是金融分类方法的现实瓶颈,因为通常市场在短时间内不会发生大的变化。改进方案之一是延长每个状态的窗口长度,使每个状态扩展更长的时间范围,可能捕获更多的变化。但是,它会降低动作粒度,因为只有一个动作与一个状态相关联。
为了更好地理解和解释性能,作者将动作选择可视化,中间价以蓝色突出显示。为了方便观察,我们只显示了前 100 个时间刻度。三个 agent(RL(PG)、基于动量和基于分类器)具有相似的动作频率。**RL 代理的策略可以概括为总是在当地的高峰附近卖出,在当地的山谷附近买入。**基于动量的策略有较高的动作频率来切换“买入”和“卖出”动作,这可能会导致较低的位置,从而有时会收集到较小的奖励。基于分类器的代理具有相对较低的动作频率,并且 有时会采取非理性的动作,例如在前五个时间滴答中的局部峰值处“购买”。贪心最优的交易频率最高,其主要策略是在一步 PnL 为负时保持高位不采取行动。
作者还比较了不同方法在下降市场、上升市场、振荡市场和整体中的策略表现差异。上升市场意味着主要随时间上升(其他类似)。RL 在下降和上升市场中表现非常好,与最先进的基于分类器的方法相比要好得多。然而,由于训练数据不足(仅占总训练数据的 15.8%),它在震荡市场中表现不佳。我们将在未来的工作中解决这个问题。
作者还展示了 RL 策略从世界模型到真实环境的可转移性。随机选择 5 天,每天在世界模型和真实环境中执行相同的策略,然后我们比较累积奖励。 RL 策略的渐近性能(累积奖励)显示了 RL 策略从环境模型到现实世界的可转移性。



