分类
美股期权交易基础

利用强化学习创建自动交易机器人

首先看一下训练数据的行情,总的来说,前半段是漫长的下跌,后半段是强劲的反弹。

神经网络与数字货币量化交易系列(2)——深度强化学习训练比特币交易策略

上一篇文章介绍了使用LSTM网络预测比特币价格 https://www.fmz.com/digest-topic/4035 ,正如文章提到的,只是一个练手的小项目,用来熟悉RNN以及pytorch。本文将介绍使用强化学习的方法,直接训练交易策略。强化学习的模型为OpenAI开源的PPO,环境则参考了gym的样式。为了方便理解和测试,LSTM的PPO模型和回测的gym环境都直接编写未使用现成的包。
PPO,全称Proximal Policy Optimization,是对Policy Graident,即策略梯度的一种优化改进。gym也是由OpenAI发布,可以与策略网络交互,反馈目前环境的状态和奖励,就像强化学习的练习用使用LSTM的PPO模型直接根据比特币的行情信息做出买入、卖出或不操作的指令,由回测环境给出反馈,通过训练不断优化模型,达到策略盈利的目的。
阅读本文需要一定的Python、pytorch、DRL深度强化学习的基础。但不会关系也不大,结合本文给出的代码,很容易学习入门。本文FMZ发明者数字货币量化交易平台出品(www.fmz.com),欢迎入QQ群:863946592 交流。

2.数据和学习参考资料

比特币价格数据来源自FMZ发明者量化交易平台:https://www.quantinfo.com/Tools/View/4.html
一篇使用DRL+gym来训练交易策略的文章:https://towardsdatascience.com/visualizing-stock-trading-agents-using-matplotlib-and-gym-584c992bc6d4
入门pytorch的一些例子:https://github.com/yunjey/pytorch-tutorial
本文将直接使用这个LSTM-PPO模型的简短实现:https://github.利用强化学习创建自动交易机器人 com/seungeunrho/minimalRL/blob/master/ppo-lstm.py
有关PPO的文章:https://zhuanlan.zhihu.com/p/38185553
有关DRL更多的文章:https://www.zhihu.com/people/flood-sung/posts
关于gym,本文并不需要安装,但是强化学习很常用:https://gym.openai.com/

3.LSTM-PPO

4.比特币回测环境

仿照了gym的格式,有一个reset初始化方法,step输入动作,返回的结果为(下一个状态, 动作收益, 是否结束, 额外的信息),整个回测环境也就60行,可自行修改出更复杂的版本,具体代码:

5.几个值得注意的细节

回测环境计算收益的公式为:当前收益 = 当前账户价值 - 初始账户当前价值。这意味着,如果比特币价格下跌,而策略做出了卖币操作,即使总账户价值减少了,实际上也应该给与策略奖励。如果回测的时间很长,初始账户可能影响不大,但刚开始时还是影响很大的。计算相对收益保证了每次正确的操作都获取了正向的reward。

6.数据的获取和训练

和上一篇文章一样,数据的获取方式和格式如下,Bitfinex交易所BTC_USD交易对 2018/5/7到2019/6/27 的一小时周期K线:

7.训练结果和分析

在这里插入图片描述

经过漫长的等待:

在这里插入图片描述

首先看一下训练数据的行情,总的来说,前半段是漫长的下跌,后半段是强劲的反弹。

在这里插入图片描述

训练前期买入操作很多,基本上没有盈利的回合。到训练中期买入操作逐渐减少,盈利的概率也越来越大,但任然有很大的几率亏损。

在这里插入图片描述

将每回合收益平滑一下,结果如下:

在这里插入图片描述

最终训练结束后,再让模型跑一次全部数据,看看表现如何,期间记录下账户的总市值、持有比特币数量、比特币价值占比、总收益。
首先是总市值,总收益和其类似,就不贴了:

总市值在前期熊市时,缓慢增加,在后期牛市时也跟上了上涨,但还是出现了阶段性的亏损。

在这里插入图片描述

最后看一下持仓占比,图的左轴是持仓占比,右轴是行情,可以初步判断模型出现了过拟合,在前期熊市时持仓频率低,在行情底部时持仓频率很高。还可以看到模型并没有学会长期持仓,总是很快的卖出。

8.测试数据分析

在这里插入图片描述

测试数据取得时2019/6/27至今的比特币一小时行情。图中可以看到价格从开始的13000美元跌倒如今的9000多美元,对模型可以说考验很大。

在这里插入图片描述

首先最终相对收益,表现差强人意,但也没有亏损。

在这里插入图片描述

再看持仓情况,可以猜测模型倾向于急跌后买入等反弹卖出,最近一段时间比特币行情波动很小,模型一直处于空仓状态。

【机器学习系列】强化学习 & 集成学习

强化学习 百度百科中的解释为“描述和解决智能体(Agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题”,其本质是为了实现自动决策。 强化学习4大要素:Agent、Environment、Action、Reward

主要应用于: – 自动驾驶汽车
– 扫地机器人 – 游戏 – 自动交易 – 企业资源管理

为方便大家理解4要素的概念,我们来举个马里奥的例子。 利用强化学习创建自动交易机器人 首先马里奥不是由我们操控,而是通过强化学习的模型自动进行游戏。
这里马里奥就是Agent,游戏中的各种障碍物、下水道、怪物就是马里奥所处的环境(Environment),而马里奥需要通过跳跃不断躲避障碍并到达终点,所以这里的跳跃就是行动(Action)。那么这里Reward是什么呢?当马里奥成功躲避障碍时给他加1分,躲避障碍物失败而触碰到怪物时给他减1分,以此类推当他操作得当时加分,操作不当时减分。最终的目标是通过最大得分完成游戏,即获得最大回报(Reward)。

其实强化学习所解决的问题与数据无关,为什么这么说呢? 以自动驾驶为例,即使我们了解世界上所有的道路规则,也没有办法教会汽车自动驾驶。无论我们收集了多少数据,我们仍然无法预见所有可能的情况。这就是为什么强化学习的目标是最小化错误,而不是预测所有的移动。
在环境中生存是强化学习的核心理念。就好比在教育小孩子一样,当他做对了就给他奖励,当他做错了就给他惩罚。

这里又分为两种不同的训练方法,一种是基于模型的训练,另一种是无模型训练。 1. 基于模型意味着汽车需要记住地图。这是一个非常过时的方法,因为这辆自动驾驶汽车不可能记住整个星球。 2. 在无模型学习中,汽车不会记住每一个动作,而是试图评估环境并合理地做出行动,同时获得最大的奖励。

大家可能还记得 AlphaGo 成功击败世界顶级象棋选手李世石的新闻。下象棋有太多太多组合的下法,而机器也无法记住所有的组合。在每个回合中,它只是为每种情况选择了最佳动作。 这种方法就是Q-learning,以及其衍生算法SARSA和DQN背后的核心概念。这里的“Q”代表的是质量,因为机器需要学会在每种情况下执行最“定性”的操作,并且所有情况都会被记忆(马尔可夫过程)。

就像这样,机器可以在虚拟环境中测试数十亿个情况,记住哪些解决方案带来了更大的回报。但是,它如何区分以前看到的情况和全新的情况呢?如果一辆自动驾驶汽车在过马路时信号灯变绿了,那么,这是否就意味着现在可以行驶?如果有救护车冲过附近的街道怎么办? 对普通人来说,强化学习看起来像是真正的人工智能。因为它让你觉得,这是机器在现实生活中自己做出了决定!而不是人为的干预。 近几年强化学习被大肆宣传,并且它以非常惊人的速度在发展,并与神经网络不断交叉结合使用.

集成学习 百度百科中的解释为,集成学习(ensemble learning)是通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)。

主要应用于: – 适用于所有传统机器学习方法(效果更佳)
– 搜索系统 – 计算机视觉 – 物体检测

常见算法:随机森林,梯度提升等
现如今集成学习和神经网络作为机器学习领域提升模型准确度的非常有效的方法,广泛用于生产。 相比神经网络的概念铺天盖地,集成学习中的Bagging、Boosting、Stacking等概念却很少被人提及。集成学习背后的想法其实很简单,就是利用一些相对效率比较低下的算法,使他们相互纠正彼此的错误,就好比“少数服从多数”,使得系统整体的模型质量高于任何单个算法的结果。

3种集成学习方法
1. Stacking
Stacking是通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。 简单来讲就是 几个并行模型的输出作为输入传递给最后一个,做出最终决定。就好比你在约一个女孩子吃饭,那个女孩子不知道自己该不该出来和你吃饭,于是她就找好几个闺蜜询问是否应该与你见面,以便自己做出最终决定。 这里强调“不同”这个词。在相同的数据上并行相同的算法是没有意义的。 而具体选择何种算法,完全取决于个人。 但是,对于最终决策模型,回归通常是一个不错的选择。 通常情况下Stacking在实践中不太受欢迎,因为另外两种方法提供了更好的准确性。

2. Bagging Bagging是在原始数据的不同数据子集上,使用相同的算法进行训练。最后寻求平均值。 当然随机子集中的数据可能会有重复。例如,从“1-2-3”这样的集合中我们可以得到像“2-2-3”,“1-2-2”,“3-1-2”等子集。我们在这种新数据集中,运用相同的算法,然后通过简单的投票方式预测最终答案。


3. Boosting Boosting指的是通过算法集合将弱学习器转换为强学习器。boosting的主要原则是训练一系列的弱学习器,所谓弱学习器是指仅比随机猜测好一点点的模型,例如较小的决策树,训练的方式是利用加权的数据。 简单来讲,Boosting算法按顺序逐个训练。随后的每一个学习器都将其大部分注意力集中在前一个错误预测的数据点上。 一直重复,直到符合你的要求。 与Bagging相同,Boosting也会使用数据集合的子集,但这次它们不是随机生成的。 然后在每个子集中,我们采用先前算法未能处理的部分数据。因此,新的算法会修复上一个算法的错误。

用世界模型训练机器狗:1小时学会走路、翻身和通过障碍物

美国加州大学伯克利分校的研究人员近日公布了一款机器狗,可以在一小时内学会走路和翻身,甚至能通过特定的障碍物。

美国加州大学伯克利分校的研究人员近日公布了一款机器狗,可以在一小时内学会走路和翻身,甚至能通过特定的障碍物。

研究人员使用了一种名为“Dreamer”的算法,利用过去的经验建立了一个真实世界的模型,供机器人学习。上图是机器人在30分钟的样子。

研究人员使用了一种名为“Dreamer”的算法,利用过去的经验建立了一个真实世界的模型,供机器人学习。上图是机器人在30分钟的样子。

一位与该研究无关的科学家表示,强化学习将成为未来机器人操控的基础工具。上图是40分钟的机器人。

一位与该研究无关的科学家表示,强化学习将成为未来机器人操控的基础工具。上图是40分钟的机器人。

在这项研究中所用的机器学习类型,其实是通过奖励机器在环境中采取某些行动的方式,对其算法进行训练。哈夫纳和他的合作者——菲利普·吴(Philipp Wu)和亚历杭德罗·埃斯康特雷拉(Alejandro Escontrela)——使用了一种名为“Dreamer”的算法,可以根据过去的经验来构建一个真实世界的模型,并允许机器人进行试错运算。

1个小时后,图中的这款机器狗已经能很好地导航、行走,还能自己翻身。

1个小时后,图中的这款机器狗已经能很好地导航、行走,还能自己翻身。

研究团队在论文中列举了这类技术所面临的其他障碍,表示尽管Dreamer算法展示了很有前景的结果,但在硬件上进行长时间的学习会给机器人造成磨损,可能需要人类的干预或修复。上图中,机器狗正在通过障碍物

研究团队在论文中列举了这类技术所面临的其他障碍,表示尽管Dreamer算法展示了很有前景的结果,但在硬件上进行长时间的学习会给机器人造成磨损,可能需要人类的干预或修复。上图中,机器狗正在通过障碍物

德国马克斯·普朗克智能系统研究所的科学家们利用算法训练了一款名为Morti的机器狗,使其学会走路

德国马克斯·普朗克智能系统研究所的科学家们利用算法训练了一款名为Morti的机器狗,使其学会走路

“作为工程师和机器人学家,我们希望制造一个具有动物一样的反射能力,并能从错误中学习的机器人,从中寻找答案。” MPI-IS动态运动研究小组的前博士生菲利克斯·鲁珀特(Felix Ruppert)在一份声明中说,“对一只动物而言,跌倒了能算是一个错误吗?如果只发生一次的话就不算;但如果它经常跌倒,那就是错误了。这就让我们能以某种方法来了解机器人行走的情况。”

波士顿动力公司的迷你机器狗SpotMini

美国波士顿动力公司的机器狗SpotMini在草坪上“撒欢”小跑

美国波士顿动力公司的机器狗SpotMini在草坪上“撒欢”小跑

波士顿动力公司的机器狗Spot利用可弯曲伸长的脖子将杯子放入洗碗机

波士顿动力公司的机器狗Spot利用可弯曲伸长的脖子将杯子放入洗碗机

利用Keras设计深度强化学习交易算法

Google的DeepMind在2013年和2015年发表了著名的论文“Play Atari with Deep Reinforcement Learning”和“Human-level control through deep reinforcement learning”,一个结合深度学习(DL)技术和强化学习(RL)思想的模型Deep Q-Network(DQN),在Atari游戏平台上展示出超越人类水平的表现。自此以后,结合DL与RL的深度强化学习(Deep Reinforcement Learning, DRL)迅速成为人工智能界的焦点。开启了深度学习和强化学习相结合的“深度强化学习”的时代。

Bridgewater的创始人Ray 利用强化学习创建自动交易机器人 Dalio在《原则》一书说过,投资是一个反复的过程。你下赌注,失败了,学到新东西,然后再试一次。 在这个艰难的过程中,我们可以通过不断的反复试验来改进自己的决策。 利用强化学习创建自动交易机器人 投资问题正是一个序列决策问题,可以利用深度强化学习来解决。在投资交易中,金融environment的定量描述的规模可能很大甚至是连续的,action可能产生长期作用,不能被其他监督学习方法直接衡量,交易action可能影响当前的市场状况。这些特点决定了我们可以采用深度强化学习来进行投资决策。

我们可以使用Keras来实现简单神经网络,其结构如上图所示。我们可以将神经网络视为一种近似将输入映射到输出的黑盒子算法。 下面的代码创建了一个空的神经网络模型。 我们在输出层中设置有3个节点,来代表不交易,买入(包含long)和卖出(包含short)三种action。

我们利用常用的Deep 利用强化学习创建自动交易机器人 Q Network (DQN) 算法来进行策略优化,在Keras中,我们将目标函数定义如下

agent将首先按一定比例随机选择其行动action,称为“探索率”或“epsilon”。 利用强化学习创建自动交易机器人 当agent没有随机决定action时,agent将根据当前状态预测reward选择reward最高的action。 np.argmax()是在act_values [0]中选择三个元素之间的最高值的函数。