sjk000
作者sjk0002017-08-03 14:20
其它, 456

【交易技术前沿】Reinforcement Learning在股指预测中初步探索

字数 7538阅读 1639评论 0赞 0

本文选自《交易技术前沿》第二十六期 (2017年03月)。
楼昊,车延辙,任丽颖,韩兴
上海金融期货信息技术有限公司

摘要:强化学习(Reinforcement Learning)是近年来机器学习和智能控制领域的主要方法之一。强化学习关注的是智能体如何在环境中采取一系列行为,从而获得最大的累积期望回报。相比其他机器学习方法,强化学习更接近生物学习的本质,因此有望获得更高的智能,这一点在棋类游戏中已经得到体现。

本文将对强化学习在股指预测中的应用进行初步探索。通过强化学习算法,使得智能体可以自适应地跟随当前行情环境进行主动学习开平仓等动作,以适应行情的演变和发展。

关键词:强化学习、智能体、股指预测、主动学习

1、基础概述

机器学习算法大致可以分为有监督学习、无监督学习、弱监督学习。强化学习属于弱监督学习范畴。假设我们要构建一个下国际象棋的机器人,这种情况下我们无法使用监督学习。首先,通过遍历所有棋步序列来确定当前棋步对最终胜负产生的影响是不现实的,代价过于昂贵。其次,每个棋步好坏判断不是孤立的,要依赖于对手的选择和局势的变化,一系列棋步组成的序列决定了最后是否能够赢得比赛。即无法把当前棋步直接与最终的胜负标签进行映射。下棋过程唯一的反馈是在最后赢得或是输掉棋局时才产生的。这种情况我们可以采用强化学习算法,通过不断的探索和试错学习,强化学习可以主动学习得到某种下棋的策略,并在每个棋局(状态)下选择采取最有可能获胜的棋步(动作)。目前这种算法已经在棋类游戏中得到了广泛应用,如战胜人类围棋高手的AlphaGo便采用了强化学习算法。

相比其他学习方法,强化学习更接近生物学习的本质,因此有望获得更高的智能。下面这张图简化建模了人与环境的交互过程。在每个时间点t,大脑都会根据当前所处的状态st从可以选择的动作集合A中选择一个动作at执行,而任务的目标就是通过与环境状态的不断交互,自适应选择调整当前状态下的执行动作,以期获取尽可能多的平均累积回报(reward)。每个时间片,大脑根据当前的观察来确定下一步的动作。每次的观察就作为大脑所处的状态state,因此,状态State和动作Action存在映射关系,也就是一个state可以对应一个action,或者对应不同动作的概率。那么state到action的映射就称之为一个策略Policy,一般用π表示。学习训练的过程就是找到最优的策略π*,从而使得累积回报(reward)的期望最大。
QQ截图20170731134917.png

QQ截图20170731134917.png

强化学习关注的是智能体如何在环境状态中采取一系列行为,从而获得最大的累积回报。在人工智能领域,一般用Agent来表示一个具备行为能力的物体,比如机器人,无人车,人等等。那么强化学习考虑的问题就是Agent和环境之间交互的任务。比如一个机械臂要拿起一个手机,那么机械臂周围的物体包括手机甚至机械臂本身就是当前环境,机械臂通过外部的比如摄像头来感知环境,然后机械臂需要输出动作来实现拿起手机这个任务。不管是什么样的任务,都包含了一系列的动作action,观察到的当前状态state还有反馈值reward。

强化学习不像有监督学习的分类或者回归问题,有特定的标记样本。由于没有直接的指导信息,智能体要以不断与环境进行交互,通过试错的方式来获得最佳策略,即try and fail的特性。此外,强化学习的指导信息很少,而且往往是在事后(如上述,下棋需在最后一个状态才能分出胜负)才给出的,即常常有延迟回报的特点。

强化学习为机器学习算法在量化策略中的应用提供了一种不同的思路和范式。不同于常见的有监督学习算法如SVM、神经网络等可以直接给出预测的涨跌值或者涨跌分类,强化学习关心的是在当前市场行情、当前自身持仓等信息状态下应该采取的动作(简单的单品种动作集可以是做多、做空、保持不变,复杂的动作集可以是对某一品种或者某些品种进行开平买卖等),以期最大化预先设定的长期回报(如最大化收益率、最大化夏普比等)。下面将对强化学习进行建模并探讨求解最优策略的常见方法。

2、马尔科夫决策过程MDP

传统的任务在环境模型已知的情况下,常用马尔科夫决策过程来建模描述。马尔科夫决策一个马尔可夫决策过程由一个四元组构成M = <A,S,R,P>,如下图:
QQ截图20170731135106.png

QQ截图20170731135106.png

S:表示状态集(states),有st∈S,st表示第t步所处的状态。

   A:表示动作集(actions),有at∈A,at表示第t步执行的的动作。
   P:表示状态转移概率。Psa表示的是在当前状态s∈S下,经过a∈A作用后,转移到其他状态的概率分布。在状态s下执行动作a,转移到s'的概率可以表示为p(s'|s,a)。
   R:表示回报函数(reward function)。在状态s下执行动作a转移到了下个状态s',获得的立即回报可记为r(s, a, s')。如果对应的下个状态s'是唯一的,那么回报也可以记为r(s,a)。

一个典型的MDP 动态过程如下:某个智能体(agent)的初始状态为s0,然后从 A 中挑选一个动作a0执行,执行后,agent 按ps0a0概率随机转移到了下一个s1状态。然后再执行下一个动作a1,转移到了s2,接下来再执行a2…,我们可以用下面的序列表示该过程。
微信图片_20170731135213.jpg

微信图片_20170731135213.jpg

对于每步执行,都会获得一个立即回报r(s,a,s')(如果是延迟回报,则过程中的立即回报r(s,a,s')=0)。定义在当前状态st下后续执行动作序列获得的长期累积回报R(st)如下,
微信图片_20170731135313.jpg
微信图片_20170731135313.jpg

其中γ∈[0,1]称为折合因子,它把后续反馈回报折合到了当前状态,表明未来的回报相对于当前回报的重要程度。特别的,γ=0时,相当于只考虑立即回报而不考虑后续的回报,γ=1时,将后续长期回报和立即回报看得同等重要。

假设上述过程中agent是依据策略π来决定在当前状态s下应该执行的动作a,即π(s)= a,我们得到如下状态值函数V(state value function)来表示agent在当前状态s下未来依循策略π执行后续动作的长期平均影响。
微信图片_20170731135826.jpg

微信图片_20170731135826.jpg

易推得如下式子:
QQ截图20170731144112.png
QQ截图20170731144112.png

式中简记r(st,at,st+1)为rt。如果给定策略π和初始状态s,执行动作a=π(s),并且下个时刻以概率p(s'|s,a)转向下个状态s',那么上式可以写为:
微信图片_20170731144144.jpg
微信图片_20170731144144.jpg

类似地,我们可以定义状态动作值函数Q(state-action value function)如下:
微信图片_20170731144203.jpg
微信图片_20170731144203.jpg

如果给定当前状态s和当前动作a(该动作无需受限于策略π),而未来执行的动作遵循策略π,并且系统以概率p(s'|s,a)转向下个状态s',上式可以写为:
QQ截图20170731144251.png
QQ截图20170731144251.png

定义了状态值函数V之后,强化学习的最终目标(找到最优的策略π,使得长期期望回报最大)可以写为如下,
QQ截图20170731144320.png
QQ截图20170731144320.png

寻找在任意初始状态s下,能够最大化状态值函数的策略π*。

3、贝尔曼方程(Bellman Equation)

如前述,状态值函数与状态动作值函数有如下等式,
QQ截图20170731144418.png

QQ截图20170731144418.png

上面两个式子称为贝尔曼方程,它表明了当前状态的值函数与下个状态的值函数的关系。
最优策略π*为:
QQ截图20170731144447.png
QQ截图20170731144447.png

分别记最优策略π对应的状态值函数和状态动作值函数为V(s)和Q*(s, a),
QQ截图20170731144543.png
QQ截图20170731144543.png

由它们的定义容易知道,V(s)和Q(s, a)存在如下关系:
QQ截图20170731144615.png
QQ截图20170731144615.png

结合Q、V的定义,有如下关系:
QQ截图20170731152426.png
QQ截图20170731152426.png

于是,状态值函数和状态动作值函数分别满足如下贝尔曼最优性方程:
微信图片_20170731152445.jpg
微信图片_20170731152445.jpg

有了贝尔曼方程和贝尔曼最优性方程后,我们就可以用动态规划来求解MDP了。

4、动态规划法求解

动态规划法求解最优策略,可分为策略估计(policy evaluation)和策略改进(policy improvement)两步

策略估计

在某策略π下,如果π(s)对应的动作a有多种可能,每种可能的概率记为π(a|s),则状态值函数表示如下:
QQ截图20170731152542.png

QQ截图20170731152542.png

采用迭代的方法更新状态值函数,首先将所有Vπ(s)的初值赋为0,然后采用如下式子更新所有状态s的值函数(其中k表示第k次迭代):
QQ截图20170731152609.png
QQ截图20170731152609.png

整个策略估计算法如下图所示:
微信图片_20170731152637.jpg
微信图片_20170731152637.jpg

策略改进

对当前策略π进行策略估计之后,为了寻找更好的策略,需要进行策略改进。根据贝尔曼最优性方程,可以得到策略改进定理(policy improvement theorem): 和 是两个确定的策略,如果对所有状态s∈S有Qπ(s, (s))≥Vπ(s),那么策略 必然比策略 更好,或者至少一样好。其中的不等式亦等价于Vπ'(s)≥Vπ(s)。
通过策略改进定理,可以遍历所有状态和所有可能的动作a,并采用贪心算法来获得新策略 。即对所有的s∈S, 采用下式更新策略:
QQ截图20170731152718.png

QQ截图20170731152718.png

这种贪心算法获得新策略,改进旧策略的过程,称为策略改进(Policy Improvement)。通过不断的策略改进,策略收敛到最优策略π*。

策略迭代

通过不断迭代策略评估、策略改进过程,可以得到最优策略π*,整个算法如下:
微信图片_20170731152749.jpg

微信图片_20170731152749.jpg

值迭代

上述策略迭代算法包含了多个策略估计的过程,而策略估计则需要遍历描所有的状态若干次,计算效率比较低。值迭代算法可以在保证算法收敛的情况下,减少计算量。它每次迭代只扫描每个状态一次,对所有的s∈S按照下列公式更新:
QQ截图20170731152822.png

QQ截图20170731152822.png

即在值迭代的第k+1次迭代时,直接将能获得的最大的Vπ(s)值赋给Vk+1。值迭代算法直接用可能转到的下一步s'的V(s')来更新当前的V(s),直到算法收敛后,再通过V值来重新获得最优的π*。算法如下:
微信图片_20170731152841.jpg
微信图片_20170731152841.jpg

5、Temporal Difference methods和Q-learning

Temporal Difference methods

许多环境模型已知(状态转移概率等参数已知)的强化学习模型用上述动态规划的技巧来求解。动态规划的优点在于它有很好的数学上的解释,但是动态规划要求一个完全已知的环境模型,这在现实中是很难做到的。另外,当状态数量较大的时候,动态规划法的效率也将是一个问题(如在围棋中状态集大小是非常巨大的,遍历所有可能的状态不太现实)。
由于大部分任务下环境模型是未知的,很难获得状态转移矩阵等参数,即上述算法中p(s'|s,a)等参数难以确定,特别对于金融时序分析,本身带有非稳态特性,使得策略评估(状态值函数V、状态动作值函数Q)无法直接计算。为了评估某策略π下某状态s的值函数V(s),可以通过蒙托卡罗模拟进行。估计Vπ(s)的一个明显方法是对于所有到达过该状态的回报取平均值,如下图方式:
微信图片_20170731152924.jpg

微信图片_20170731152924.jpg

进行了六次模拟,对出现过状态s的模拟累积回报取均值,有Vπ(s) ≈ (2 + 1 – 5 + 4)/4 = 0.5。当经过无穷多次的模拟,Vπ(s)的估计值将收敛于其真实值。
然而上述方式有一个潜在的前提条件,即每次模拟都有一个终止状态,然后才能进行统计。但是很多任务是没有终止态的,无法进行有效的蒙特卡洛模拟。而Temporal Difference methods利用每一步状态动作对的反馈,逐步更新评估值函数V(s)。
记上述每次蒙特卡洛模拟在经过当前状态st后获得的最终总体回报为R(st),
微信图片_20170731152948.jpg
微信图片_20170731152948.jpg

值评估可以用多次模拟的累积回报取平均获得,
QQ截图20170731153015.png
QQ截图20170731153015.png

其中 ,下标k为模拟次数。通过上式可以发现,只要以下dk可用,
微信图片_20170731153034.jpg
微信图片_20170731153034.jpg

即可对状态值Vk+1(st)进行差分更新,更新方式如下:
微信图片_20170731153052.jpg
微信图片_20170731153052.jpg

类似地,有状态动作值函数Qk+1(st,at) 更新公式如下:
微信图片_20170731153108.jpg
微信图片_20170731153108.jpg

此即为Temporal Difference methods中的SARSA算法。算法如下,
微信图片_20170731153125.jpg
微信图片_20170731153125.jpg

Q-learning

SARSA算法在更新动作值函数时遵循的策略和选择执行的动作时遵循的策略是相同的,我们称为On-Policy。而Q-learning是另一个较常用的强化学习求解最优策略的算法,其使用如下公式更新状态动作值函数:
Q-learning算法最大的不同在于更新Q值的时候,直接使用了最大的Q(st+1,a)值,与当前执行的策略,即选取的当前动作at时采用的策略无关,我们称为Off-Policy。算法流程如下:
微信图片_20170731153149.jpg

微信图片_20170731153149.jpg

连续状态

至此,我们可以在离散状态空间中使用强化学习算法在线规划求解最优的策略,然而现实中很多系统的状态是用连续变量刻画的,即状态是连续的,状态数是无穷的。我们使用连续函数V(s;k)来拟合(approximate)真实的状态值函数,其中k是函数参数,函数可以是简单的线性模型,也可以是复杂的神经网络。那么评估值函数就变成寻找最优的参数k,使得拟合的连续函数V(s;k)最接近未知的值函数V(s),即
我们实验中采用线性函数来拟合,如下
其中n是状态向量维度,i(•)是原始观测数据的变换函数。如此,Q-learning中连续状态的值函数更新方式(找到最优的参数k)变为:
其中a为学习率。

6、基于强化学习的股指预测系统

通过上述基础知识的介绍,可以知道一个强化学习模型,需要明确状态描述、动作集合、回报函数等基础元素。下面结合股指行情,设计一个可行的基于强化学习的股指“预测”系统。

状态

使用过去5个交易日的收益率组成状态向量:
QQ截图20170731153330.png

QQ截图20170731153330.png

其中
微信图片_20170731153357.jpg
微信图片_20170731153357.jpg

动作

QQ截图20170731153551.png

QQ截图20170731153551.png

at为1,代表做多1手,-1代表做空1手,0代表没有持仓。

回报

使用过去L(实验中取L=5)个交易日的sharpe ratio作为当前立即回报,即
微信图片_20170731153627.jpg

微信图片_20170731153627.jpg

其中EL(•)和VarL(•)为L日均值和方差,gt = at−1et表示在t-1时刻采取动作at−1情况下在t时刻该动作获得的收益率

连续函数

如前所述,对于连续状态,我们需要一个连续函数来近似拟合值函数,本实验采用如下状态动作值函数来拟合真实的值函数:
QQ截图20170731153708.png

QQ截图20170731153708.png

其中arctan(•)为原始观测数据的变换函数。

ε-greedy

Q-learning算法有一个exploration的过程,以找到更好的最优解。此处采用ε-greedy策略进行exploration的过程。
微信图片_20170731153736.jpg

微信图片_20170731153736.jpg

其中u ∼U(−1,1)均匀分布。实验中取ε=0.025。

策略回测

我们使用2010/11/01~2016/11/01的HS300股指日数据进行回测,考虑手续费,未考虑滑点。测试结果如下图所示。红色的线是策略收益(点数),蓝色的线是大盘走势。初始时候,由于有个参数学习的过程,表现一般,到后来可以快速对行情作出反应,适应行情演变,一定程度上表现了强化学习的潜力。
微信图片_20170731153801.jpg

微信图片_20170731153801.jpg

7、总结

本文主要对强化学习进行介绍,并通过简单的回测、分析,对其在行情预测方面进行初步探索,以确定该算法是否适用于金融行情分析。通过实验可以发现,在一定程度上强化学习通过不断实时自适应学习,可以较好地对行情作出反应,表现出较有前景的潜力。未来,我们将对强化学习进行进一步的研究,深入了解其内涵与本质,改进其存在的问题,结合金融业务,重新设计状态表示、连续函数模型等,以期取得更好的结果。此外,强化学习与深度学习结合而成的深度强化学习,已在围棋等领域表现出了强大的能力,亦将作为我们未来探索的方向。

参考文献

[1]Barto A.G., Sutton R.S. (1998), Reinforcement Learning: An Introduction. Adaptive Computation and Machine Learning. The MIT Press
[2]F Bertoluzzo, M Corazza. (2012), Reinforcement Learning for automatic financial trading: Introduction and some applications. Ssrn Electronic Journal
[3]James Cumming, Dr. Dalal Alrajeh (2015), An Investigation into the Use of Reinforcement Learning Techniques within the Algorithmic Trading Domain.
[4]Gold C. (2003), FX trading via recurrent Reinforcement Learning, Proceedings of the IEEE International Conference on Computational Intelligence in Financial Engineering.
[5]D Silver, A Huang, CJ Maddison etc. (2016), Mastering the game of Go with deep neural networks and tree search, Nature.

文章转自微信公众号:上交所技术服务

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广