主页 > imtoken苹果钱包 > 比特币K线自动分析软件(比特币K线自动分析软件哪个好)

比特币K线自动分析软件(比特币K线自动分析软件哪个好)

imtoken苹果钱包 2023-01-17 08:50:53

出品 | 区块链训练营(blockchain_camp)

炒股的都知道,天天盯着大盘做决定,不仅累,还会让人秃头。 于是一帮顶尖的数学家开始用数学的手段来预测股市。

加密货币市场也是如此,加密货币市场的波动更加频繁,更加剧烈。 针对这个问题,国外加密货币开发者Adam King提出了一种新的解决方案。

结合人工智能在预测方面的独特优势,Adam 提出利用深度强化学习构建自动加密货币交易程序。 同时,这位小哥还做了一个可以实际交易比特币的展示模型。 他是怎么做到的呢? ? 这个自动交易程序能达到什么样的效果? 让我们在文中一探究竟。

在本文中,我们将使用深度强化学习来构建一个加密货币自动交易代理(agent),并训练它进行比特币交易以盈利。

为了避免重新发明轮子,在本教程中我们将使用由人工智能研究机构 OpenAI 开发的包。

目前,人工智能已经在很多领域超越了人类,从最初由谷歌DeepMind团队开发的AlphaGo击败围棋世界冠军李世石,到后来的同校AlphaStar在星际争霸中击败了两名职业棋手10:1的比分。 近日,OpenAI战队的OpenAI Five在Dota2的比赛中以2:0的比分战胜了世界冠军OG。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

谷歌DeepMind团队星际争霸人工智能产品AlphaStar的训练过程

人工智能给我们带来了很多激动人心的成果,虽然我们不会打造出像 AlphaGo 这样令人印象深刻的东西,但要在日常的比特币交易中获利并不容易。

那么,与其冒着脱发的风险苦苦理解比特币的价格规律,何不让人工智能来一展身手呢?

在本文中,我们将用人工智能技术完成三项尝试: 为我们的智能体创建一个健身房环境来测试强化学习; 以简单优雅的方式可视化我们的测试环境; 训练我们的智能代理,让它学习可以受益的比特币交易策略。

这里有些操作可能比较麻烦,比如从头开始搭建gym测试环境,可视化测试环境,不过不用担心,我会仔细介绍这些细节,跟上我的节奏就好。

库安装

在本教程中,我们将使用 Zielak 提供的 Kaggle 数据集。 如果需要数据,可以在我的 Github 存储库中下载 .csv 数据文件。

首先,让我们导入所有必要的 Python 库。 如果您的计算机上没有安装这些库,您可以使用 pip install 命令安装它们。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

接下来,我们为比特币交易环境创建一个类。 我们需要传入一个pandas数据框比特币一分二八精准预测,一个回溯窗口大小( lookback_window_size )表示agent需要在每个时间步( time step )分析前几个时间步的数据,以及可选的agent账户初始余额(初始余额)。

在代码中,我们将佣金(commission)设置为每笔交易的0.075%,这是加密货币期货交易所Bitmex当前的汇率。 同时,我们默认将串行操作(serial)参数设置为false,这意味着默认情况下我们的dataframe将以随机方式遍历段。

此外,我们还对数据框调用dropna函数删除非数(NaN,Not A Number)所在行,删除数据后调用reset_index函数重置数据框索引。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

代码中action_space(操作空间)的第一个数字表示3个可选选项,即买入、卖出或持有,第二个数字表示操作的比例,最小单位为10%,也就是说,数字中的1、2、3分别代表10%、20%、30%。 选择买入操作时,具体买入的比特币数量将是第二个数字(amount)乘以当前账户的比特币余额(self.balance)。 对于sell操作,具体卖出的比特币数量也是第二个数字(amount)乘以当前账户的比特币余额(self.balance)。

当然,如果你选择持有操作,那么你就不会买卖账户中的比特币,所以第二个数字是没有意义的。

我们的observation_space(观察空间)被定义为一组介于0和1之间的连续浮点数,其大小为(10,回溯窗口大小(lookback_window_size)+1)。 这里的+1操作是考虑到当前时间步的操作。 对于窗口中的每一步,我们将查看其收盘头寸价值 (OHCLV)、当时我们资产的总价值、我们买入或卖出的比特币数量,以及我们买入或卖出这些比特币的时间。 在币时花费的美元数。

接下来,我们需要编写重置函数来初始化比特币交易环境。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

在代码中,我们使用了重置会话控制(self._reset_session)函数和下一次数据观察(self._next_observation)函数,但是这些函数还没有定义,接下来我们来定义它们。

事务会话控制

交易会话控制(session)是比特币交易环境的重要组成部分。 如果我们在外部部署这个代理,我们可能永远不会让它一次运行几个月。 出于这个原因,我们将在数据帧参数 ( self.df ) 中限制代理可以连续看到的数据帧的数量。

在我们的重置会话控制 (_reset_session) 函数中,我们首先将当前时间步长 (current_step) 重置为 0。接下来,我们将剩余时间步长 (steps_left) 设置为介于 1 和最大交易会话控制数 (MAX_TRADING_SESSION) 之间的随机数), 这当然需要在文件的顶部定义。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

接下来,如果需要连续遍历数据框,则设置为遍历所有数据框,否则我们需要在数据框参数(self.df)中设置一个随机的数据框起始位置(frame_start),并创建一个name 活动数据帧 (active_df) 的新数据帧,它是数据帧 (self.df) 从起始位置 (frame_start) 到起始位置 + 剩余时间步长 (frame_start + steps_left) 的连续帧的切片.

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

使用数据帧切片的一个重要效果是代理将拥有更多独特的数据用于长期训练。 例如,如果我们只是按顺序遍历数据帧(即从数据帧 0 到最后一帧 (len(df))),那么我们只有与数据帧数量一样多的唯一数据点。 我们的观察空间在每个时间步只能观察到几个状态。

然而,通过随机遍历数据帧的切片,我们有效地结合了原始数据集上每个时间点的账户余额、交易数据和当前比特币价格,从而创建了更多独特的数据点。 下面,我们用一个例子来说明。

我们的智能体在每个时间步都有三个选项:买入、卖出或持有。 对于这三个选项,你还需要指定操作比特币的数量,比如操作当前比特币余额的 10%、20% 或 100%。 这意味着我们的代理在每个时间步有 30 个不同的选择(当然,对于 holding 操作,这 10 个选择的效果是一样的),它选择了最好的一个。

回到我们随机切片后的比特币交易环境。 在第 10 个时间步,我们的代理可以在数据帧内的任何数据帧长度 (len(df)) 时间步。 考虑到智能体每个时间步可以做出 30 次选择,这意味着在任何 10 个时间步的间隔中,智能体可以体验数据帧长度 (len(df)) 唯一状态的 30 种可能选择。

虽然这样的操作可能会给大型数据集带来相当大的噪音,但我相信这是一把双刃剑,我们的智能体也可以从有限的数据中学到更多。 但是对于测试数据集,我们还是会依次遍历,更接近于“实时”的交易数据,这样才能更好更准确的检测我们的agent。

比特币交易代理人学到了什么

为了更好地理解代理看到和学习​​到的特征,我们需要可视化比特币交易环境的观察空间。 例如,下面是使用 OpenCV 可视化渲染的视图空间。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

OpenCV 可视化渲染的视图空间

图像中的每一行代表我们观察空间 (observation_space) 中的一行。 前4条类似频率的红线代表OHCL数据,下方橙色和黄色圆点代表数量,下方起伏的蓝色条为代理人拥有的资产总值,下方颜色较浅的点代表代理人交易。

如果你眯着眼睛看这张图,你会看到一个烛台,它下面有成交量条,还有一个类似莫尔斯电码的界面,显示交易历史。 看起来我们的代理应该能够从观察空间 (observation_space) 中的数据中学到一些东西。 在这里,我们将定义下一个观察 (_next_observation) 函数,在这个函数中我们希望在 0 和 1 之间缩放观察到的数据。

重要的一点是只对agent到目前为止观察到的数据进行缩放,以避免前瞻性偏差(Look-ahead bias,前瞻性偏差是指在制定策略时,采取了未来的一些信息,而这些信息在真实交易中基本不可能获得)。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

写作步骤

现在我们已经设置了观察空间,是时候编写指导代理行为的步进函数了。

每当当前交易时段的剩余操作步数(self.steps_left)等于0时,我们将卖出所有持有的比特币,并调用重置会话控制(_reset_session)函数。

否则,我们将代理人的奖励(reward)设置为当前持有资产的总价值,只有在代理人的资金用完时才将完成(done)设置为True。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

其实行动的过程很简单,只有三步:

第一步是获取当前比特币价格(current_price);

第二步,确定买入、卖出或持有,以及操作的股份;

第三步是实际买卖这些比特币。 现在让我们编写执行操作 (_take_action) 函数来测试我们的比特币交易代理。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

最后,在此函数中,我们将交易添加到交易参数 (self.trades) 并更新我们的总资产价值和账户交易历史。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

此时比特币一分二八精准预测,我们的agent可以启动一个新的环境,学习新环境下比特币交易的特点,采取行动获取收益。 是时候让比特币交易代理发挥作用了。

查看比特币交易代理的交易记录

如上所述,我们需要可视化代理的学习和决策过程。 当然,仅仅用最简单的方法,在agent的每一次决策后输出agent持有的资产总值(print(self.net_worth))也不是不可以,但这样做的乐趣就少多了。 因此,我们决定创建一个简单的比特币价格数据烛台图,其中包含一个交易量列和一个单独的资产总值图表。

在代码中,我们需要定义一个股票交易图(StockTradingGraph)函数来进行可视化。 在函数的初始化过程中,我们需要调用python可视化库matplotlib.pyplot,指出每一个需要可视化的数据。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

为了更好的展示数据,我们需要在可视化方法中导入Python时间日期(datetime)处理模块,在数据上标注人类可读的日期时间。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

导入完成后,我们需要使用将时间戳转换为世界通用时间UTC的utcfromtimestamp函数,将每个时间戳转换为UTC时间,然后使用计算机时间函数(strftime)将这个UTC时间按照“年-月日小时:分钟”格式显示。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

至此,可视化函数的各个部分都写完了。 回到比特币交易环境,我们现在可以总结出一个可视化(render)函数来展示图形。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

行! 我们现在可以看到代理交易比特币。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

使用 Matplotlab 库可视化代理交易比特币数据

图中绿色竖线表示代理人正在买入比特币,红色竖线表示代理人正在卖出比特币。 右上角的白框是代理人持有的资产总值,下方的白框是比特币的当前价格。

允许我在这里自恋,我认为这种可视化的效果是简单而优雅的。 现在,是时候训练我们的比特币交易代理,看看它能为我们赚多少钱了!

培训比特币交易代理

由于我们在时间序列数据上训练我们的代理,因此在交叉验证方面我们没有太多选择。

以一种常见的交叉验证形式:k-fold(k组)交叉验证为例。 在k折交叉验证中,需要将数据分成k个相等的组,每组做一次测试集,剩下的k-1组数据作为训练集。

然而,时间序列数据高度依赖于时间,这意味着后来发生的数据高度依赖于较早发生的数据。 所以在这种情况下k-fold是行不通的,因为它会让我们的agent提前知道未来的数据,即使我们盈利了也不知道是agent预测准确还是因为经纪人被骗了。

大多数其他交叉验证策略在应用于时间序列数据时都存在相同的缺陷。 因此,我们只需要在全数据框中给出一个分界点,将前面部分的数据作为训练集,剩下的数据作为测试集。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

接下来,由于我们的比特币交易环境设置为仅处理单个数据帧,因此我们需要创建两个比特币交易环境,一个用于训练数据,一个用于测试数据。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

至此,我们就可以训练模型了。 如下代码所示,我们只需要在比特币交易环境中创建一个agent,然后调用model.learn命令开始训练即可。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

这里,我们将使用机器学习框架tensorflow的可视化工具tensorboard,方便我们将tensorflow的数据流图可视化,查看我们agent的一些量化指标。

例如,下图显示了代理人在 200,000 个时间步后的利润:

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

看来我们的代理赚大了! 最好的智能体在 200,000 个时间步后将总资产价值增加了​​ 1000 倍,而其余智能体平均将总资产价值增加了​​ 30 倍以上!

然而,就在那时我意识到比特币交易环境中存在一个错误......修复错误后,这是新的收益图:

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

正如您所看到的,我们的一些代理商做得很好,而有些则做得很差。 一般情况下,表现良好的代理人可以使资产总价值增加10倍甚至60倍。

我必须承认所有这些代理都是在虚拟的比特币交易环境中训练和测试的,所以现在将这个比特币交易代理直接应用于比特币区块链还为时过早。 但至少这个结果告诉我们,利用人工智能做出加密货币交易决策的路径是可行的。

接下来,让我们在比特币交易测试环境中测试我们的智能体,我们将使用我们的智能体以前从未见过的全新数据,看看智能体是否学习了比特币交易策略。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

结果表明,我们训练有素的比特币交易代理在新的测试环境中竞相破产

这并不奇怪,因为我们还有很多工作要做。 只需将模型从当前的近端策略优化 (PPO2) 代理切换到稳定基线库中的 A2C(Advantage Actor-Critic)即可大大提高我们在此数据集上的性能。

同时,我们也可以通过更新奖励函数来激励那些资产总值持续增长的操作,防止一些比特币交易主体在资产总值达到高位时被动减速。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

仅仅做这两个改变就可以大大提高比特币交易代理在当前数据集上的性能,如下图所示,最终我们在新的数据测试环境上成功实现了盈利。

60倍回报! AI工程师用OpenAI创建了一个比特币自动交易工具!

除此之外,我们可以做得更好。 为了提高这些比特币交易代理的准确性,我们可以优化超参数并对代理进行更长时间的训练。 是时候给你的显卡(你的深度学习代码在上面运行)施加压力了!

如果您想继续优化,这里有一些想法供您参考。 可以使用贝叶斯优化在问题空间中找到最好的超参数,使用显卡的CUDA计算平台优化训练环境和测试环境。

综上所述

在本教程中,我们使用深度强化学习从头开始创建了一个有利可图的比特币交易代理。

具体来说,我们完成了以下任务:

虽然最后我们的比特币交易代理不能保证在有数据的新测试环境下永远盈利,但我们离成功不远了。