DeepTrader: A Deep Reinforcement Learning Approach for Risk-Return Balanced Portfolio Management with Market Conditions Embedding
DeepTrader的算法一共包括上面的绿色、蓝色、紫色三部分,对应的是股票打分、市场情绪、投资组合生成器。其中绿色和紫色部分是原来AlphaStock有的结构,作者在原来的attention基础上加了创新;蓝色框里的市场情绪打分是本文额外加的,原来AlphaStock中设定的是多仓和空仓头寸是相等的,是zero-investment portfolio,而本文认为市场有时候利空有时候利多,所以用一些宏观市场变量(比如整个股票池中有多少只股票涨)等来计算市场的情绪,据此分配空头仓位。
整个算法流程就是股票打分器(绿色部分)对股票的涨跌潜力打分并给出投资组合占比,而市场打分器(蓝色部分)分配空头资金量,二者结合一下就是最后的投资组合(紫色部分)。
下面我们来看一下三个部分的具体结构:
由三个关键技术组成:时间卷积层(TCN)、空间注意力机制(Spatial Attention)和图卷积层,分别用于提取各股票的时间特征、股票之间的短期空间关系(相关性)和长期空间关系(因果关系、行业结构等)。
(1)Temporal Convolution Layer.
这一步是在AlphaStock的LSTM-HA那里,用TCN来代替LSTM,获取股票的时间特征表示。TCN相比RNN类的方法,好处是可以并行计算(计算快),减轻了梯度爆炸和消失的问题。
对TCN不了解的朋友可以看这篇笔记熟悉一下:
随风:时间序列分析(5) TCN
“实验表明,RNN 在几乎所有的序列问题上都有良好表现,包括语音/文本识别、机器翻译、手写体识别、序列数据分析(预测)等。
在实际应用中,RNN 在内部设计上存在一个严重的问题:由于网络一次只能处理一个时间步长,后一步必须等前一步处理完才能进行运算。这意味着 RNN 不能像 CNN 那样进行大规模并行处理,特别是在 RNN/LSTM 对文本进行双向处理时。这也意味着 RNN 极度地计算密集,因为在整个任务运行完成之前,必须保存所有的中间结果。
CNN 在处理图像时,将图像看作一个二维的“块”(m*n 的矩阵)。迁移到时间序列上,就可以将序列看作一个一维对象(1*n 的向量)。通过多层网络结构,可以获得足够大的感受野。这种做法会让 CNN 非常深,但是得益于大规模并行处理的优势,无论网络多深,都可以进行并行处理,节省大量时间。这就是 TCN 的基本思想。”
我们把第 块(block)的输入记作,其中 是股票数量, 是隐藏层特征维度, 为第 块的时间长度。
沿时间维度进行TCN运算后,TCN的输出为 。
如图1绿框部分所示,用TCN提取的股票时间特征 分别被输入到spatial attention和GCN两个组件中产生股票短期相关性权重 和长期相关性权重 ,两者相乘作为股票的最终空间相关性权重。
(2)Spatial Attention Mechanism.
这一步是为了模拟股票之间的短期空间属性。得到TCN输出的股票时间特征表示 后,输入到空间注意力机制中用来产生一个权重,这个权重代表股票间的相关性关系:
是参数,上标 表示前两个维度的转置, 是bias向量。
接下来再把每个元素用softmax归一化一下,用来代表股票i和j的相关性:
(3)Graph Convolution Layer.
图卷积层用来对股票间的长期空间关系进行建模。
虽然个股的表现具有变化的波动性,但行业(industry)的整体表现通常更能反映未来的经济形势热点。这里用了图卷积网络GCN,通过消息传递来获取图中节点的依赖关系,将边和节点的信息集成到表示中。
这里关于股票的图结构的构建,作者实验了以下几种方式:
仍然是用TCN的输出 作为输入,
(1)对于使用股票行业分类方式构建的图结构:
由于只使用行业分类信息可能会忽略某些依赖关系(比如亚马逊归类是零售贸易,但是它也受益于互联网红利),为了避免这个问题,这里GCN使用复杂一点的结构:使用Graph WaveNet for Deep Spatial-Temporal Graph Modeling. (arXiv:1906.00121)这篇文章里的公式
其中 , 是GCN中可以学习的参数。 用于捕捉相关性, ,这里 是随机初始化的可学习的参数,Q是平衡 和 之间信息量的参数。
(2)对于上面说的用后三种方式(收益相关性、偏相关性和因果关系)构建的图结构来说,我们使用
也就是公式(2)的第二项不需要了,因为依赖关系已经从数据中估计出来了。
这样我们得到了股票长期相关性权重 。
(4)Stock scoring
现在我们有了两个权重矩阵 ,使用残差网络结构,第l个block的输出就可以写为
这里 是残差连接的意思。
对残差网络不熟悉的小伙伴请看这篇介绍:
小小将:你必须要知道CNN模型:ResNet
以上(1-4)步描述的就是图1里面绿框中蓝色矩形block的结构,然后我们把这个block结构堆叠L次获得第L块的输出 ,就是最后的股票的时空特征。
最后,我们将 过一个全连接层,得到的最后股票的涨跌潜力打分:这就是股票打分器的最后输出了。
由于随机赌博和突发事件,金融数据包含大量不可预测的不确定性。根据历史观察来准确判断股票的涨跌是不可行的。在以往基于RL的投资模型中,投资策略仅仅是基于对每只股票的分析,而忽略了市场的变化。
而顺应市场是一个更好的投资策略。当股市下跌时,有经验的投资者倾向于在卖空上花更多的钱。为了平衡收益和风险,本文提出了市场评分单元。以市场情绪指标为输入,动态调整资金配置。
这部分就是市场特征过了一个LSTM加一个时间维度上的attention(和AlphaStock的LSTM-HA是一样的),最终输出正态分布的期望和方差 ,空仓资金的比例就用 来产生:
用LSTM提取市场变量 的表示
用注意力机制加权来捕捉较早的信息关系
最后的LSTM输出为 ,然后输出正态分布的均值和方差
3. Portfolio Generator
和AlphaStock一样,在获得股票打分器给出的分数 后,选出前G只股票做多,后G只股票做空,然后使用v的softmax产生投资组合权重,
与AlphaStock不同的是,多了一个市场打分得到的空仓比例 。 这可以看作是在连续动作空间 中选择一个值,在训练阶段根据正态分布 对 进行采样,在测试阶段 ,然后将这个值固定到[0,1]的范围内。
以上流程完成后,按照交易流程中规定的流程完成交易周期。
以上过程用RL来优化,策略 由选股分配组合权重和空仓比例两部分组成。
(1)第一个是选股分配组合权重:
return rate是
如果初始投资金额是 ,一个轨迹 的累积金额为
股票评分单元的优化目标为迹的对数累积财富最大化:
(2)而市场打分的策略使用高斯策略:
给定reward ,优化目标为
把二者加权求和就是最终的优化目标:
然后用梯度下降更新就可以了。
为了全面评估DeepTrader,作者对三个知名股指的成分股进行了实验,旨在回答以下问题:
Q1: DeepTrader的表现如何,尤其是在一些特殊的金融事件中,比如次贷危机呢?
Q2: DeepTrader的关键创新【attention、GCN】和【市场评分单元】,是否有必要、提高性能?
Q3: 市场评分单元奖励函数的选择,如何影响投资效果?
Q4: GCN的图结构是否影响投资效果?
Baseline
比较的方法是五种相关的方法,即Market、BLSW (1988), Csm (1993), EIIE(Jiang,2017)和AlphaStock (AS) (Wang et al. 2019)。
五种方法中,BLSW,CSM和AS可以进行做空操作。
Ablation
还实现了DeepTrader (DT)的几个变体简化版本,其中“N”意味着没有或从DeepTrader删除一些组件。
还研究了不同的奖励函数和图结构对GCN的影响。默认情况下,我们使用最大回撤MDD作为奖励函数,股票行业分类产生图结构。
评价指标
我们在实验中使用了六个指标,分为三类:
Attention Actor-Critic algorithm for Multi-Agent Constrained Co-operative Reinforcement Learning