60倍报答! AI工程师用OpenAI建立了一个比特币主动

TIME:2019-06-19 07:47 浏览次数:

  炒股的人都晓得,天天盯着大盘做决策不只让人费神,还让人秃顶。所以一堆顶级的数学家起头用数学的手段进行股市预测。

  加密货泉市场也一样,并且加密货泉市场颠簸愈加屡次,愈加猛烈。对付这个问题,外洋加密货泉开辟者 Adam King 提出了一种新的处理思绪。

  连系人工智能在预测方面得天独厚的劣势, Adam 提出了利用深度强化进营建立加密货泉主动买卖法式,同时,这位小哥还做出了一个可以大概真正买卖比特币的展现模子,他是怎样做到的?这个主动买卖法式又能到达如何的结果呢?让咱们在文中一探事实。

  在本文中,咱们将利用深度强化进建筑立一个加密货泉主动买卖智能体(agent),并锻炼它通过买卖比特币红利。

  为了避免反复造轮子,在本篇教程中咱们将利用人工智能钻研机构 OpenAI 开辟的法式包。

  目古人工智能在良多范畴都曾经跨越了人类,从最后谷歌 DeepMind 团队开辟的 AlphaGo 打败围棋世界冠军李世石,到厥后师出同门的 AlphaStar 在星际争霸中以 10:1 的大比分打败两位职业玩家。近日,OpenAI 团队的 OpenAI Five 在 Dota2 游戏中以 2:0 的比分将世界冠军 OG 斩于马下。

  人工智能给咱们带来了良多冲动听心的成果,尽管咱们不会建立像 AlphaGo 如许令人印象深刻的产物,但在一样平常的比特币买卖中实现红利也非易事。

  因而,与其冒着脱发的危害苦苦摸索比特币币价的纪律,何不让人工智能来一展技艺?

  这里有些操作可能会比力贫苦,就好比说重新起头建立gym 测试情况并将测试情况可视化,不外不要担忧,我会细心引见这些细节,跟上我的节拍就好。

  在本教程中,咱们将利用 Zielak 供给的 Kaggle 数据集。若是你想要这些数据,你能够在我的 Github 堆栈中下载 .csv 数据文件。

  起首,咱们来导入所有需要的 Python 法式库。若是你的电脑上还没有装置这些法式库,你能够利用 pip install 号令进行装置。

  接下来,咱们建立一个比特币买卖情况的类。咱们必要向此中传入一个 pandas 数据帧,一个用于指示智能体在每一个时间步长( time step )必要阐发前几个时间步长数据的回首窗口巨细( lookback_window_size ),以及可选的智能体账户初始余额( initial_balance )。

  代码中咱们将手续费( commission )设置为每笔买卖的 0.075% ,也就是加密货泉期货买卖所 Bitmex 以后的费率,同时,咱们将序列运转( serial )参数默以为否( false ),这象征着在默认环境下咱们的数据帧将以随机的情势遍历各个片断。

  除此之外,咱们还在数据帧上别离挪用了删除非数字(NaN,Not A Number)所外行的 dropna 函数以及在删除了数据之后从头设置数据帧索引的 reset_index 函数。

  代码中 action_space (操作空间)的第一个数字暗示可选的 3 个选项,即买入,卖出或持有,第二个数字暗示所操作的比例,最小单元是 10% ,也就是说这个数字中的 1,2,3 别离代表 10%,20%,30% 。被取舍买入操作时,具体买入的比特币数量将是第二个数字( amount )乘以以后账户的比特币余额( self.balance )。对付卖出操作,具体卖出的比特币数量也是第二个数字( amount )乘以以后账户的比特币余额( self.balance )。

  当然了,若是取舍持有操作,那么就不会交易账户中的比特币,因此第二个数字就没有了意思。

  咱们的 observation_space(察看空间)被界说为 0 到 1 之间的持续浮点数集,它的巨细为( 10,回首窗口巨细( lookback_window_size ) + 1)。这里的 + 1 操作是思量到了以后这一时间步长的操作。对付窗口中的每一步,咱们都将察看它的收盘价位置价值( OHCLV ),咱们在那时的资产总价值、买入或卖出的比特币数量、以及咱们在买入或卖出这些比特币时破费的美元数。

  接下来,咱们必要编写从头设置( reset )函数来初始化比特币买卖情况。

  代码中咱们利用了从头设置会话节制( self._reset_session )函数和下一次数据察看( self._next_observation )函数,不外这些函数都还没有被界说,接下来咱们来界说它们。

  买卖会话节制( session )是比特币买卖情况中的一个主要构成部门。若是咱们将这个智能体摆设到外部,咱们可能永久都不会一次让它运转几个月的时间。出于这个缘由,咱们将在数据帧参数( self.df )中制约智能体可以大概持续看到的数据帧数量。

  在咱们的从头设置会话节制( _reset_session )函数中,咱们起首将以后的时间步长( current_step )从头设置为 0 。接下来,咱们将残剩时间步长( steps_left )设置为 1 到最大买卖会话节制数( MAX_TRADING_SESSION )之间的随机数,当然了,最大买卖会话节制数必要在文件的顶部界说。

  接下来,若是必要持续遍历数据帧,那就该当设置遍历所有的数据帧,不然咱们必要在数据帧参数( self.df )中设置一个随机的数据帧肇始位置( frame_start ),并建立一个名为激活数据帧( active_df )的新数据帧,它是数据帧( self.df )从肇始位置( frame_start )到肇始位置 + 残剩时间步长( frame_start + steps_left )这些持续帧构成的切片。

  利用数据帧切片带来的一个主要影响就是,智能体将得到更多并世无双的数据,以便进行永劫间的锻炼。举个例子,若是咱们只是按挨次来遍历数据帧(即按数据帧 0 到最月朔帧(len(df))的挨次),60倍报答! AI工程师用OpenAI建立了一个比特币主动买卖东西! 这里是细致做法 手艺头条那么咱们就只要数据帧个数这么多的独一数据点。咱们的察看空间在每一个时间步长只能察看戋戋几个形态。

  可是,通过随机遍历数据帧的切片,咱们无效地连系了原始数据集上每一个时间点的账户余额,买卖数据以及以后比特币价钱,从而缔造出了更多并世无双的数据点。接下来咱们通过一个例子来申明一下。

  咱们的智能体在每个时间步长中都有三种取舍:买入,卖出或持有。对付这三种取舍中的每一种,都还需指定操作比特币的数量,如操作以后比特币余额的 10%,20%,或是 100% 。这象征着咱们的智能体在每个时间步长中都有 30 种分歧的取舍(当然了,对付持有操作,这 10 种取舍的结果是一样的),而它从当选出最好的一个。

  回到咱们随机切片后的比特币买卖情况。在第 10 个时间步长中,咱们的智能体能够处于数据帧内的任何数据帧长度(len(df))时间步长。思量到每个时间步长智能体能够做 30 种取舍,这象征着在肆意 10 个时间步长的间隔时间中,该智能体能够履历数据帧长度(len(df))的 30 次方种可能的独一形态。

  尽管如许的操作可能会给大型数据集带来相当大的噪声,但我置信这是一把双刃剑,如许咱们的智能体也会从无限的数据量中学到更多。不外,对付测试数据集,咱们仍将按挨次来遍历,如许做更切近于“及时”的买卖数据,因此能够更好更切确地检测咱们的智能体。

  为了更好地领会智能体所看到并进修到的特性,咱们必要将比特币买卖情况的察看空间可视化。就好比说,下面是利用 OpenCV 可视化衬着后的察看空间。

  图像中的每一行都代表咱们察看空间( observation_space )中的一行。前4行雷同于频次的红线代表了 OHCL 数据,万博app下方的橙色和黄色的点代表着数量,再下方这个崎岖不定的蓝色长条是智能体所具有资产的总价值,而下方颜色较浅的点代则表智能体的买卖。

  若是你眯着眼睛看这张图,你就能够看到一个 K 线图,下面有着代表数量的指示条以及一个显示买卖汗青的雷同于莫尔斯电码的界面。看起来咱们的智能体该当可以大概在察看空间( observation_space )的数据中学到一些工具。在这里,咱们将界说下一次察看( _next_observation )函数,在这个函数中咱们要将察看到的数据缩放到 0 到 1 之间。

  主要的一点是,仅仅缩放智能体到目前为止所察看到的数据,以避免呈现前视误差( Look-ahead bias,前视误差是指在计谋的开辟中,采纳了将来的一些消息,而这些消息在实盘操作中是根基上不成能获得的)。

  此刻咱们曾经设置好了察看空间,是时候编写咱们的操作步调( step )函数了,这个函数能够指点智能体的举动。

  每当以后买卖时段的残剩操作步调( self.steps_left )等于 0 时,咱们将卖出所持有的所有比特币并挪用从头设置会话节制( _reset_session )函数。

  不然,咱们将智能体的嘉奖( reward )设置为以后所持有资产的总价值,若是智能体的资金用完了,则只会将完成( done )设置为真( True )。

  第三步,就是实在买入或卖出这些比特币。此刻咱们来编写采纳步履( _take_action )函数,以便于测试咱们的比特币买卖智能体。

  最初,在这个函数中,咱们将买卖增添到买卖记实参数( self.trades )中,并更新咱们的资产总价值和账户买卖汗青。

  到这里,咱们的智能体就能够启动新情况,在新情况中进修比特币买卖的特性,并采纳步履以得到收益。是时候让比特币买卖智能体一展技艺了。

  上文中说到了,咱们必要将智能体的进修和决策历程可视化。当然了,仅仅利用最简略的方式,在智能体每次决策后输出智能体所持有资产的总价值(print(self.net_worth))也不是不克不迭够,不外如许做就少了良多的兴趣。因而,咱们决定绘制一个简略的比特币价钱数据 K 线图,此中蕴含数量栏和咱们资产总价值的零丁图表。

  在代码中,咱们必要界说一个用来可视化的资产买卖图( StockTradingGraph )函数,在函数的初始化历程中,咱们必要挪用 python 可视化法式库 matplotlib.pyplot ,并指出每一个必要可视化的数据。

  为了更好地展示数据,在可视化方式中咱们必要导入 Python 时间日期( datetime )处置模块,在数据上标注出人类可读的日期和时间。

  在导入完成后,咱们必要利用将时间戳转换为世界同一时间 UTC 的 utcfromtimestamp 函数,将每个时间戳转化为 UTC 时间,然后用计较机时间函数( strftime )将这个 UTC 时间依照“ 年 - 月 - 日 小时:分钟 ”的格局展示出来。

  到这里,可视化函数的各个部门都已编写完成,回到比特币买卖情况,咱们此刻能够汇总出一个可视化( render )函数来显示图形。

  图中绿色的竖线代表智能体在买入比特币,赤色的竖线代表智能体在卖出比特币。右上角的白色方框是智能体所持有资产的总价值,在其下方的白色方框是以后比特币的价钱。

  这里容我自恋一下,我以为这个可视化的结果简略而又不失文雅。此刻,是时候锻炼咱们的比特币买卖智能体了,看看它能帮咱们赚到几多钱!

  因为咱们锻炼智能体时利用的是时间序列数据,因而在交叉验证方面咱们并没有太多的取舍。

  就拿一种常见的交叉验证情势: k-fold(k组)交叉验证来举例,在 k-fold 交叉验证中,你必要将数据拆分成 k 个相称的分组,将每一个分组别离做一次测试组,其余的 k-1 组数据用作锻炼组。

  然而,时间序列数据与时间有着高度的依赖性,这象征着后面呈现的数据高度依赖于先前呈现的数据。所以在这种环境下 k-fold 将不起感化,由于如许会让咱们的智能体提前晓得将来的数据,即便红利了咱们也不晓得是得益于智能体精准的预测仍是由于智能体作弊了。

  当使用于时间序列数据时,大大都其他的交叉验证计谋也都具有着同样的缺陷。因而,咱们只要在完备数据帧中给定一个分界点,前一部门的数据用作锻炼集,其余的数据用作测试集。

  接下来,因为咱们的比特币买卖情况被设置为仅处置单个数据帧,因而咱们必要建立两个比特币买卖情况,一个用于锻炼数据,一个用于测试数据。

  到这里,咱们就能够锻炼模子了。如下面的代码所示,咱们只要要在比特币买卖情况中建立智能体,然后挪用 model.learn 号令起头锻炼。

  在这里,咱们会利用机械进修框架 tensorflow 的可视化东西 tensorboard ,从而咱们能够轻松地可视化 tensorflow 的数据流图并查看相关咱们智能体的一些量化目标。

  看起来咱们的智能体都得到了良多的收益!最好的一个智能体在 200,000 个时间步长后资产总价值提拔了 1000 倍,而其余的智能体资产总价值均匀提拔了 30 倍以上!

  不外,就在这时,我认识到比特币买卖情况中具有一个错误......在修复了该错误之后,这是新的收益图:

  正如你所看到的,咱们的一些智能体做得很好,而有一些则表示很差。总的来说,表示优良的智能体最多可以大概实现资产总价值提拔 10 倍以至 60 倍。

  我必需认可,所有这些智能体都是在虚拟的比特币买卖情况中锻炼和测试的,所以将这个比特币买卖智能体间接使用于比特币区块链上还为时髦早。可是至多这个成果告诉咱们,利用人工智能来进行加密货泉买卖决策这条路是行得通的。

  接下来,让咱们在比特币买卖测试情况中测试智能体,在测试情况中咱们将利用智能体以前从未见过的全新数据,看看这些智能体能否学到了比特币的买卖计谋。

  同时,咱们也能够更新嘉奖函数,鼓励那些资产总价值不竭添加的操作,预防有些比特币买卖智能体在资产总价值到达高位时就消沉怠工。

  仅仅做出这两个改动就能够大幅度提高比特币买卖智能体在以后数据集上的机能,正如下图所示,最终咱们在数据全新的测试情况上顺利实现了红利。

  除此之外,咱们还能够做得更好。为了提拔这些比特币买卖智能体的精确度,咱们能够优化超参数并锻炼智能体更长的时间。是时候给你的显卡(深度进修代码运转在显卡之上)一点压力了!

  若是你想继续优化,这里能够给你供给些思绪,你能够利用贝叶斯优化来在问题空间上寻找最佳的超参数,并利用显卡的 CUDA 运算平台优化锻炼情况和测试情况。

  在本教程中,咱们利用深度强化进修从零起头建立了一个可以大概得到收益的比特币买卖智能体。

  利用 OpenAI 团队开辟的用于测试强化进修算法的东西包 gym 从零起头建立了一个比特币买卖情况;

  尽管最初咱们的比特币买卖智能体在数据全新的测试情况中还不克不迭包管老是红利,但咱们曾经离顺利不远了。

  增加88%! 2019福布斯环球区块链50强榜单, 你未必看懂这3个细节opera浏览器