分享

定制股票交易OpenAI Gym强化学习环境

 taotao_2016 2019-04-12

▎作者:Adam King

编译:公众号翻译部


前言


OpenAI 的 gym 是一个很棒的软件包,允许你创建自定义强化学习agents。它提供了相当多的预构建环境,如CartPole、MountainCar,以及大量免费的Atari游戏供用户体验。

这些环境非常适合学习,但最终你将需要设置一个agent来解决自定义问题。为此,你需要创建一个关于你特定问题域的自定义环境。之后,我们将创建一个自定义股票市场环境来模拟股票交易。


代码在文末获取

首先,让我们了解一下环境到底是什么。环境包含运行agent并允许其学习的所有必要功能。每个环境必须实现下gym界面:

在构造函数中,我们首先定义 action_space 的类型和大小,它将包含agent在环境中可能采取的所有操作。类似地,我们将定义 observation_space,它包含agent要观察的所有环境数据。

我们的重置方法将被调用,以周期性地将环境重置为初始状态。在此之后,将在环境中执行许多步骤,其中模型将提供一个操作,并且必须执行该操作,然后返回下一个观察结果。这也是计算奖励的地方,稍后会详细介绍。

最后,可以定期调用render方法来打印再现的环境。这可以像打印语句一样简单,也可以像使用openGL渲染3D环境一样复杂。对于本例,我们将坚持使用print语句。

股票交易环境


我们将创建一个股票交易环境。然后,我们将训练agent成为一个有利可图的贸易环境。

我们需要考虑的第一件事是人工交易者如何感知他们所处的环境。在决定交易之前,他们会观察到什么?

交易员很可能会看一些股票价格走势的图表,或许还会加上一些技术指标。在此基础上,他们将把这些视觉信息与他们之前对类似价格走势的了解相结合,从而对股票可能的走势做出明智的决定。

所以让我们把这转换成我们的agent应该如何感知它的环境。

observation_space包含我们希望agent在进行交易之前或不进行交易之前考虑的所有输入变量。在本例中,我们希望agent查看过去五天股票的数据(开、高、低、收和日成交量),以及其他一些数据,如帐户余额、当前股票头寸和当前利润。

这里的直觉是,对于每个时间步骤,我们希望我们的agent考虑导致当前价格价格变动的行为,以及它们自己的投资组合的状态,以便为下一步行动做出明智的决策。

一旦交易者感知到了他们所处的环境,他们就需要采取行动。在我们的agent例子中,它的action_space将包含三种可能性:买进股票、卖出股票或什么都不做

但这还不,我们需要知道每次买入或卖出的股票数量。使用gym的Box space,我们可以创建一个动作空间,其中包含离散数量的动作类型(买进、卖出和持有),以及连续的买进/卖出金额(分别为:账户余额/头寸大小的0-100%)。

你将注意到这个金额对于hold操作是不必要的,但是无论如何都会提供。我们的agent最初并不知道这一点,但随着时间的推移,应该会知道这个金额与此操作无关。

在实现我们的环境之前,最后要考虑的是激励。我们想激励长期持续的利润。在每个步骤,我们将把激励设置为账户余额乘以到目前为止的时间步数的一部分。

这样做的目的是在早期阶段推迟对agent的过快奖励,并允许它在过于深入地优化单个策略之前进行充分的探索。它还将奖励那些长期维持较高平衡的agent,而不是那些使用不可持续策略快速赚钱的agent。

实现


现在我们已经定义了我们的观察空间、行动空间和激励,是时候实现我们的环境了。首先,我们需要在环境的构造函数中定义action_space和observation_space。环境期望传入一个pandas的dataframe,其中包含要学习的股票数据。类似这样的数据格式:

接下来,我们将编写reset方法,在创建新环境或重置现有环境的状态时调用该方法。在这里,我们将设置每个agent的初始余额,并将其打开位置初始化为空列表。

我们将当前步骤设置为dataframe中的一个随机点,因为我们的许多agent经常在训练中重置环境。nextObservation方法编译最后五个时间步骤的股票数据,附加agent的帐户信息,并将所有值缩放到0到1之间。

接下来,我们的环境需要能够迈出一步。在每一步,我们将采取指定的行动(由我们的模型选择),计算激励,并返回下一个观察结果。

现在,我们的_takeAction方法需要执行模型提供的操作,并购买、出售或持有股票。

现在唯一要做的就是将环境呈现到屏幕上。为了简单起见,我们将呈现到目前为止的利润和一些其他有趣的指标。

我们的环境是完整的。现在,我们可以使用dataframe实例化StockTradingEnv环境,并使用来自stable-baselines的模型对其进行测试。

https://github.com/hill-a/stable-baselines

当然,我们先做了个简单的测试,如果真的想通过使用深度学习对股市进行应用,那将需要更多的时间和精力。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多