使用 Python 怎么实现自动交易加密货币

发布时间:2021-06-12 16:48:06 作者:Leah
来源:亿速云 阅读:539

使用 Python 怎么实现自动交易加密货币,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。


工具链

将在本教程使用如下工具:

数据挖掘

为了使加密货币交易机器人尽可能做出正确的决定,以可靠的方式获取资产的美国线open-high-low-close chart(OHLC)数据是至关重要。你可以使用 Pythonic 的内置元素,还可以根据自己逻辑来对其进行扩展。

一般的工作流程:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 与币安时间同步

  3. 下载 OHLC 数据

  4. 从文件中把 OHLC 数据加载到内存

  5. 比较数据集并扩展更新数据集

这个工作流程可能有点夸张,但是它能使得程序更加健壮,甚至在停机和断开连接时,也能平稳运行。

一开始,你需要 币安 OHLC 查询Binance OHLC Query 元素和一个 基础操作Basic Operation 元素来执行你的代码。

使用 Python 怎么实现自动交易加密货币

数据挖掘工作流程

OHLC 查询设置为每隔一小时查询一次 TRXBTC 资产对(波场/比特币)。

使用 Python 怎么实现自动交易加密货币

配置 OHLC 查询元素

其中输出的元素是 Pandas DataFrame。你可以在 基础操作 元素中使用 输入input 变量来访问 DataFrame。其中,将 Vim 设置为 基础操作 元素的默认代码编辑器。

使用 Python 怎么实现自动交易加密货币

使用 Vim 编辑基础操作元素

具体代码如下:

import pickle, pathlib, osimport pandas as pd outout = None if isinstance(input, pd.DataFrame):    file_name = 'TRXBTC_1h.bin'    home_path = str(pathlib.Path.home())    data_path = os.path.join(home_path, file_name)     try:        df = pickle.load(open(data_path, 'rb'))        n_row_cnt = df.shape[0]        df = pd.concat([df,input], ignore_index=True).drop_duplicates(['close_time'])        df.reset_index(drop=True, inplace=True)        n_new_rows = df.shape[0] - n_row_cnt        log_txt = '{}: {} new rows written'.format(file_name, n_new_rows)    except:        log_txt = 'File error - writing new one: {}'.format(e)        df = input     pickle.dump(df, open(data_path, "wb" ))    output = df

首先,检查输入是否为 DataFrame 元素。然后在用户的家目录(~/)中查找名为 TRXBTC_1h.bin 的文件。如果存在,则将其打开,执行新代码段(try 部分中的代码),并删除重复项。如果文件不存在,则触发异常并执行 except 部分中的代码,创建一个新文件。

只要启用了复选框 日志输出log output,你就可以使用命令行工具 tail 查看日志记录:

$ tail -f ~/Pythonic_2020/Feb/log_2020_02_19.txt

出于开发目的,现在跳过与币安时间的同步和计划执行,这将在下面实现。

准备数据

下一步是在单独的 网格Grid 中处理评估逻辑。因此,你必须借助返回元素Return element 将 DataFrame 从网格 1 传递到网格 2 的第一个元素。

在网格 2 中,通过使 DataFrame 通过 基础技术分析Basic Technical Analysis 元素,将 DataFrame 扩展包含 EMA 值的一列。

使用 Python 怎么实现自动交易加密货币

在网格 2 中技术分析工作流程

配置技术分析元素以计算 25 个值的 EMA。

使用 Python 怎么实现自动交易加密货币

配置技术分析元素

当你运行整个程序并开启 技术分析Technical Analysis 元素的调试输出时,你将发现 EMA-25 列的值似乎都相同。

使用 Python 怎么实现自动交易加密货币

输出中精度不够

这是因为调试输出中的 EMA-25 值仅包含六位小数,即使输出保留了 8 个字节完整精度的浮点值。

为了能进行进一步处理,请添加 基础操作 元素:

使用 Python 怎么实现自动交易加密货币

网格 2 中的工作流程

使用 基础操作 元素,将 DataFrame 与添加的 EMA-25 列一起转储,以便可以将其加载到 Jupyter 笔记本中;

使用 Python 怎么实现自动交易加密货币

将扩展后的 DataFrame 存储到文件中

评估策略

在 Juypter 笔记本中开发评估策略,让你可以更直接地访问代码。要加载 DataFrame,你需要使用如下代码:

使用 Python 怎么实现自动交易加密货币

用全部小数位表示

你可以使用 iloc 和列名来访问最新的 EMA-25 值,并且会保留所有小数位。

你已经知道如何来获得最新的数据。上面示例的最后一行仅显示该值。为了能将该值拷贝到不同的变量中,你必须使用如下图所示的 .at 方法方能成功。

你也可以直接计算出你下一步所需的交易参数。

使用 Python 怎么实现自动交易加密货币

买卖决策

确定交易参数

如上面代码所示,我选择 0.009 作为交易参数。但是我怎么知道 0.009 是决定交易的一个好参数呢? 实际上,这个参数确实很糟糕,因此,你可以直接计算出表现最佳的交易参数。

假设你将根据收盘价进行买卖。

使用 Python 怎么实现自动交易加密货币

回测功能

在此示例中,buy_factor 和 sell_factor 是预先定义好的。因此,发散思维用直接计算出表现最佳的参数。

使用 Python 怎么实现自动交易加密货币

嵌套的 for 循环,用于确定购买和出售的参数

这要跑 81 个循环(9x9),在我的机器(Core i7 267QM)上花费了几分钟。

5Af65b11f637ce55589036c357df10.png" target="_blank"><img src="https://s5.51cto.com/oss/202103/29/895Af65b11f637ce55589036c357df10.png" width="auto" border="0" height="auto" alt="" title="">

将利润与相关的交易参数按降序排序

当你打印出列表时,你会看到 0.002 是最好的参数。

使用 Python 怎么实现自动交易加密货币

交易要素和收益的有序列表

当我在 2020 年 3 月写下这篇文章时,价格的波动还不足以呈现出更理想的结果。我在 2 月份得到了更好的结果,但即使在那个时候,表现最好的交易参数也在 0.002 左右。

分割执行路径

现在开始新建一个网格以保持逻辑清晰。使用 返回 元素将带有 EMA-25 列的 DataFrame 从网格 2 传递到网格 3 的 0A 元素。

在网格 3 中,添加 基础操作 元素以执行评估逻辑。这是该元素中的代码:

使用 Python 怎么实现自动交易加密货币

实现评估策略

如果输出 1 表示你应该购买,如果输出 2 则表示你应该卖出。 输出 0 表示现在无需操作。使用 分支Branch 元素来控制执行路径。

5A397c4d0c592d6c5e8d54b81c.png" target="_blank">

使用 Python 怎么实现自动交易加密货币

分支元素:网格 3,2A 位置

因为 0 和 -1 的处理流程一样,所以你需要在最右边添加一个分支元素来判断你是否应该卖出。

使用 Python 怎么实现自动交易加密货币

分支元素:网格 3,3B 位置

网格 3 应该现在如下图所示:

使用 Python 怎么实现自动交易加密货币

网格 3 的工作流程

下单

由于无需在一个周期中购买两次,因此必须在周期之间保留一个持久变量,以指示你是否已经购买。

你可以利用 Stack 元素来实现。顾名思义,栈元素表示可以用任何 Python 数据类型来放入的基于文件的栈。

你需要定义栈仅包含一个布尔类型,该布尔类型决定是否购买了(True)或(False)。因此,你必须使用 False 来初始化栈。例如,你可以在网格 4 中简单地通过将 False 传递给栈来进行设置。

使用 Python 怎么实现自动交易加密货币

将 False 变量传输到后续的栈元素中

在分支树后的栈实例可以进行如下配置:

使用 Python 怎么实现自动交易加密货币

设置栈元素

在栈元素设置中,将 对输入的操作Do this with input 设置成 Nothing。否则,布尔值将被 1 或 0 覆盖。

该设置确保仅将一个值保存于栈中(True 或 False),并且只能读取一个值(为了清楚起见)。

在栈元素之后,你需要另外一个 分支 元素来判断栈的值,然后再放置 币安订单Binance Order 元素。

使用 Python 怎么实现自动交易加密货币

判断栈中的变量

将币安订单元素添加到分支元素的 True 路径。网格 3 上的工作流现在应如下所示:

使用 Python 怎么实现自动交易加密货币

网格 3 的工作流程

币安订单元素应如下配置:

使用 Python 怎么实现自动交易加密货币

编辑币安订单元素

你可以在币安网站上的帐户设置中生成 API 和密钥。

使用 Python 怎么实现自动交易加密货币

在币安账户设置中创建一个 API 密钥

在本文中,每笔交易都是作为市价交易执行的,交易量为 10,000 TRX(2020 年 3 月约为 150 美元)(出于教学的目的,我通过使用市价下单来演示整个过程。因此,我建议至少使用限价下单。)

如果未正确执行下单(例如,网络问题、资金不足或货币对不正确),则不会触发后续元素。因此,你可以假定如果触发了后续元素,则表示该订单已下达。

这是一个成功的 XMRBTC 卖单的输出示例:

使用 Python 怎么实现自动交易加密货币

成功卖单的输出

该行为使后续步骤更加简单:你可以始终假设只要成功输出,就表示订单成功。因此,你可以添加一个 基础操作 元素,该元素将简单地输出 True 并将此值放入栈中以表示是否下单。

如果出现错误的话,你可以在日志信息中查看具体细节(如果启用日志功能)。

5A5046bc2.png" target="_blank"><img src="https://s6.51cto.com/oss/202103/29/adafdf0329f7dd08340b4c15A5046bc2.png" width="600" border="0" height="auto" alt="" title="">

在网格 1,1A 位置的币安调度器

由于币安调度器元素只执行一次,因此请在网格 1 的末尾拆分执行路径,并通过将输出传递回币安调度器来强制让其重新同步。

使用 Python 怎么实现自动交易加密货币

网格 1:拆分执行路径

5A 元素指向 网格 2 的 1A 元素,并且 5B 元素指向网格 1 的 1A 元素(币安调度器)。

部署

你可以在本地计算机上全天候 7&times;24 小时运行整个程序,也可以将其完全托管在廉价的云系统上。例如,你可以使用 Linux/FreeBSD  云系统,每月约 5 美元,但通常不提供图形化界面。如果你想利用这些低成本的云,可以使用 PythonicDaemon,它能在终端中完全运行。

使用 Python 怎么实现自动交易加密货币

PythonicDaemon 控制台

PythonicDaemon 是基础程序的一部分。要使用它,请保存完整的工作流程,将其传输到远程运行的系统中(例如,通过安全拷贝协议Secure Copy SCP),然后把工作流程文件作为参数来启动 PythonicDaemon:

$ PythonicDaemon trading_bot_one

为了能在系统启动时自启 PythonicDaemon,可以将一个条目添加到 crontab 中:

# crontab -e

5Affe9f04ec1f392dab2124b8.png" target="_blank"><img src="https://s6.51cto.com/oss/202103/29/a0b9ace5Affe9f04ec1f392dab2124b8.png" width="auto" border="0" height="auto" alt="" title="">

在 Ubuntu 服务器上的 Crontab

看完上述内容,你们掌握使用 Python 怎么实现自动交易加密货币的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. Python写爬虫都会使用什么库
  2. errorbar()函数如何在python中使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:python代码怎么用类编写剪刀石头布

下一篇:Python中怎么实现文本数据预处理

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》