基于深度强化学习的算法交易策略
市场参与者对算法交易有着普遍需求。本文从深度强化学习(Deep Reinforcement Learning, DRL)视角分析了算法交易的实现,包括策略输入输出、激励函数与神经网络结构。相比传统方法,DRL在多订单最优执行上有显著优势,也无需对时变的市场微观结构做精确数学建模,策略是以全局最优为目标优化的。最后本文还思考如何将日内交易策略与alpha策略有机结合。
算法交易
投资者的主观交易决策,抑或是量化系统给出的交易指令,都需要具体的执行过程才能落实为目标持仓。由算法交易策略进行下单,优化交易成本对最终投资绩效是大有裨益的,也是市场中的通行做法。例如股票多因子策略中,往往假设能够以下一交易日的加权成交均价(vwap)加上交易成本(如2‰)进行交易,作为收益率模型的预测目标。在不同的实际交易成本下,alpha策略表现是云泥之别,尤其是对相对高换手的日频策略而言。
初代算法交易策略是近乎被动的,如时间加权平均价格算法TWAP(Time Weighted Average Price)是最为简单的一种传统算法交易策略,适用于流动性较好的市场和订单规模较小的交易。该模型将交易时间进行均匀分割,并在每个分割节点上将均匀拆分的订单进行提交。
$$ \text{TWAP}=\frac{\sum_{t=1}^N{p_t}}{N} $$
VWAP算法引入了成交分布的预测,其实现方式是将交易日平均分成若干个时间段,然后利用历史数据拟合出交易量在各个时间段的分布,执行时按照每个时段交易量所占比例分别执行,确保实际执行成本接近vwap。
$$ \text{VWAP}=\frac{\sum_{t=1}^N{amount_t}}{\sum_{t=1}^N{volume_t}} $$
第二代交易算法将机会成本和成交风险纳入到分析框架中,关注冲击成本以及用各种更精细的模型来刻画股票价格的随机运动方式,追求比twap、vwap更好的执行价格。代表性的算法有包括执行差额(IS)策略、到达价格(AP-Arrival Price)策略等。
但这类基于对市场微观环境建模的交易算法天然是次优的。首先,以股票多因子策略为例,由于对下单时间不做要求,整个交易日都是可行时间。理论上需要对股票全天价格、成交量分布建模,才能得出超越当日vwap的最优下单指令,但对日内行情的显式建模显然是超出人类分析能力的,遑论还要考虑多订单最优执行问题了。其次,使用数据驱动方法,完全可以绕过对市场的建模,输入行情信息,直接由模型给出交易决策,较为庞大的日内高频量价数据为这种端到端方法提供了基础。
类比围棋AI,早期的围棋软件常常依赖于专家制定的启发式规则来决定策略,例如保护角部、建立眼位等,这些规则源于人类经验和围棋理论,棋力堪堪达到职业门槛。AlphaGO则是以深度强化学习(DRL)为核心,完全的端到端方法,神经网络只负责计算不同选点的胜率,在自我对弈中迭代策略。虽然AI选点的背后棋理变得不得而知,但棋风天马行空,处处先机,轻松碾压了所有人类顶尖高手。本文讨论的正是以DRL为核心的算法交易策略,这也是目前学界最新的研究方向。
强化学习视角
马尔可夫决策过程(Markov Decision Process, MDP)是强化学习中的基本框架,用于描述序贯决策问题。MDP主要由以下四个元素组成:状态(S)、动作(A)、状态转移概率(P)和奖励(R)。为了进行长期决策,还常常引入折扣率(γ),从而形成一个五元组(S, A, P, R, γ),用于描述整个系统的动态演化和决策过程。在强化学习中,代理通过不断与环境交互,学习从某个状态采取某个动作后可能的状态转移,以及由此获得的奖励。这种基于状态、动作和奖励的学习方式,使得MDP成为强化学习的核心理论工具。
日内交易策略正是一个不断处理最新行情信息的序贯决策问题。 这种策略需要根据市场的实时信息做出买卖决策,从而获得最优的交易结果。这个过程与MDP的基本假设完美契合,因为在日内交易中,交易者(代理)需要在每个时间点根据当前市场状态和账户状态(S),选择最优的交易动作(A),并根据市场反应(P)评估结果,获取相应的收益(R)。这种应用不仅能够处理复杂的市场动态,还能够不断迭代交易策略,适应变化的市场环境。
状态空间
不同于一般强化学习任务中智能体动作直接影响自身状态,在资金量较小的交易策略中,观测状态天然地分为不受下单影响的公共信息(市场行情走势)和直接变化的私有信息(账户余额、持仓等)。针对这一点,就可以在训练和部署阶段将行情编码模块独立,单独训练和推理。下面讨论状态空间的具体结构。
基础量价信息 开盘价、最高价、最低价、最新价等基础价格信息,成交额、成交量等交易量信息,衍生特征有收益率、区间成交量等。
限价订单簿 市场微观结构是相对高频的日内交易算法的重要组成部分。限价订单簿(Limit Order Book,简称LOB)是记录市场参与者以特定价格买卖证券订单的实时记录。展示每个价格水平上的买卖意图和数量,从而反映出市场的供需状况。限价订单簿提供了市场需求和供应的实时快照,有助于投资者了解市场动态。要在订单簿上直接提取特征,可以计算价差(ask-bid spread)、中间价(micro-price)等指标。把订单簿转换成non-stationary的订单流也是通行的预处理方法之一。
日频特征 除了日内行情、微观结构之外,通过添加Alpha因子库,可以将日度、周度的长周期增量信息引入日内交易策略。这些信息对模型认知股票特性,预测收益分布实测是有效的。
私有信息 交易算法必然服务于某个账户,输入账户当前持仓、可用现金余额、剩余交易任务也是必要的。
动作空间
在现实中,下单的自由度是相当高的,而DRL中的动作空间则需要仔细斟酌。交易员可以选择市价单/限价单/最优5档等下单方式,方向和数量也可以完全自定义。如果允许程序双边自由下单,不限数量,程序理论上可以学习出高频做市策略。但过高的自由度也会导致模型难以训练,缺乏泛化性能,仿真环境也难以精细化地模拟真实市场。此外,监管对单日内的反向交易也有限制。因此我认为在动作空间中减少自由度,固定交易方向/交易价格/数量是很有必要的。如
KDD2023中微软的论文对于给定交易任务,每次按市价执行其中一个部分, \(a_t^i \in \left{ 0,0.25,0.5,0.75,1 \right}\) ,且不允许反向交易。这样的设定对于服务于投资组合调整的交易算法是合理的,如果目标改为Alpha策略叠加日内T0策略增厚收益,则可以放开交易方向限制,利用底仓做日内交易。这一日内策略的额外好处是,保持收盘仓位符合预期,做业绩归因十分方便。
激励函数与模拟环境
对于一个交易算法而言,短期收益率并不紧要,更需要“大局观”。激励函数设计上,首先要体现算法择时对于交易成本的优化程度,
$$ R_e(s_t,a_t^i;i) = d_i a_t^i (\frac{p_t^i}{\tilde{p^i}}-1) $$
其次考虑下单产生的冲击成本,如使用二次函数
$$ R^-(s_t,a_t^i;i) = -\alpha (a_t^i)^2 $$
最后要对现金不足做出惩罚,因为缺少现金会产生买入订单无法执行的机会成本,模型应该学会提前换取现金,而非等待最佳卖出价格。
$$ R_c(s_t,a_t^i;i) = -\beta \mathbb{I}(c_t=0|c_{t-1}>0) $$
训练时反馈由离线仿真环境给出(在线训练的成本是不可接受的),对环境性能有较高的要求,因此计划用Cython编写环境。此外,环境还要考虑对下单成功率、成交比例的模拟。
深度策略网络
DRL中的行动策略是一个典型的神经网络 \(\pi(a_t^i|s_t)\)
行情编码与辅助任务
前文已经提出,状态中的公共信息与智能体行动无关,因此可以使用独立编码器对行情进行特征提取,预存embedding进行RL模型训练。二阶段训练的好处是,提高训练效率的同时,避免端到端训练导致的策略不稳定。在预训练标签要如何构造呢?最简单的想法是用Autoencoder保留所有原始信息,而如果未来收益率、成交量分布已知,策略就可以做出全局最优决策,因此未来分布信息也可作为标签。计划使用两者相结合的方法。后者类似于在端到端训练任务中引入风险/收益率感知的辅助任务。
网络结构的选择上,由于特征工程方面工作较为简单(考虑部署性能),因此编码器需要使用可以聚合时序信息的LSTM/GRU。
下图展示了两种可行的模型整体结构。
多订单执行问题
如何显式考虑多订单执行问题,避免流动性不足呢?
一方面,训练时以多订单任务为模拟的最小单位,在每次模拟中追求全局最优解。另一方面,在网络结构设计上,可以引入attention机制,把全局信息引入对单一股票的操作。
延拓
从广度而言,基于DRL的交易算法可以在股票、期货、虚拟币等市场得到广泛应用。从深度而言,本文介绍的方法可以只是单纯执行调仓任务,抑或是作为叠加在底仓上的t0策略,甚至独立作为高频套利策略使用。
值得一提的是,作为日内策略与原有alpha策略叠加时,需要考虑交易不同股票产生的利润(成本),组合优化目标可以改为
$$ \max_w \quad w^T (\mu+\kappa) - \gamma w^T \tilde{\Sigma} w - c |w - w_0| $$
其中 \(\mu\) 为收益率预估值, \(\tilde{\Sigma}\) 为协方差预估矩阵, \(c\) 为常数,表示移仓成本。\(\kappa \in \mathbb{R}_+^ {N}\) 是不同股票作为底仓所能产生的利润:每一期都有两个方向上各一次的交易机会,与vwap的差异就是所能产生的利润,而由于第三项已惩罚换仓成本,所以 \(\kappa\) 恒为正。对 \(\kappa\) 的预估可以人工建立简单模型来完成,由于真实的成本数据需要真金白银的交易才能获取,所以要尽量减少模型复杂度,而模型的参数也会成为策略开发者的重要资产。
基于深度强化学习的算法交易策略