首页 / 51CTO / 正文

用Python开发数字货币交易机器人(附源码)

51CTO 2020-05-30 08:01:09

 用Python开发数字货币交易机器人(附源码)

众所周知,币圈一天,人间一年。我们进行数字货币交易时,在交易所 APP 或者网站 盯盘并手动下单非常耗时,当币价波动非常大的时候往往会错失良机。这时我们可以创建一个简单的 telegram 交易机器人,来帮助我们进行做空和做多交易。

用Python开发数字货币交易机器人(附源码)

该机器人可以实现以下功能:

  •  做空交易 - 以指定的价格卖出持有货币并在价格下跌时回购
  •  做多交易 - 指定的价格购买货币并在价格上涨时卖出
  •  列出交易订单
  •  显示可用余额

设置 Telegram 机器人

首先需要一个 Telegram 账号,如果没有的话请自己注册一个。然后与BotFather进行对话,通过输入/newbot来新建一个telegram机器人,根据指示一步步创建并记住你的token。

用Python开发数字货币交易机器人(附源码)

获取交易所的 API keys

查找你的交易所API文档,看看如何获取对订单和账户余额的访问权限和步骤,记住你的密码和API keys。本例中我们以bitfinex为例,Bitmex交易所是目前市面上交易量最大的比特币期货交易所,交易量和交易深度非常大。

用Python开发数字货币交易机器人(附源码)

安装依赖包

我们这边用的是Python 3.6版本,同时我们还需要利用CCXT框架获取Bitmex交易所数据,CCXT是一个JavaScript / Python / PHP 开发库,用于数字货币的交易,支持众多的比特币/以太币/山寨币交易市场和交易所API。

CCXT库用于连接数字货币交易所并在世界范围内进行交易和支付处理。使用 ccxt可以快速访问数字货币市场数据,可以用于存储、分析、可视化、指标开发、 量化交易、策略回溯测试、交易机器人程序以及相关的软件工程。

然后我们将使用python-telegram-bot与Telegram进行通讯,对聊天消息做出反应并进行交易。

只需要用下面方法安装以上两个依赖包:

 

我们需要交易机器人实现的基本类功能:

1、获取交易所概况,允许创建订单,列出订单详情并获取余额。这将是以 ccxt 实现的装饰器。

2、交易执行者,因为我们希望自动执行做空和做多交易。

3、即时响应的telegram 机器人。

编写机器人

项目结构如下:

 

我们将从一个简单的模型开始。因为多空交易两者有很多共同点,可以在/ model中创建一个基类TradeDetails:

 

具体的为:

  •  LongTrade 
 
  •  ShortTrade 
 

接下来是获取交易所数据:

 

然后,我们将执行交易程序。程序将接受交易所数据和超时情况以检查订单是否完成。当做空时,我们以设定的价格卖出,当价格下降到一定水平时回购。我们使用asyncio协程进行编码,以使等待不会阻塞:

 

ccxt使用REST API进行数据传输。它不如某些交易所支持的WebSockets快,但是对于这个简单的机器人来说,速度或许差别。

 

接下来将创建Telegram机器人,这是最有难度的部分,我们将使其拥有以下指令:

1、列出/取消有效订单

2、显示可用余额

3、建立做多或做空交易

我们还需要对机器人做一些安全限制,使其仅对你的消息做出响应,而其他人则无法使用你的帐户进行交易。

主要是进行做多和做空交易的部分:

1、选择做空或者做多

2、输入数字货币品种

3、输入交易数量

4、所占百分比

5、每个价格

6、显示确认信息

7、显示最终交易信息

我们来创建telegrambot.py并添加以下常量:

 

我们可以通过扩展BaseFilter来实现对user_id的限制。这样机器人必须接受被允许用户的token、id才能执行操作。

 

在_prepare()函数中,我们将创建所有处理函数并将其附加到调度程序。我们开始与机器人聊天时希望显示的基本选项:

 

InlineKeyboardButton允许我们将文本选项显示为键盘。这比键入所有命令更为直观。callback_data允许在按下按钮时传递其他数据。show_options返回下一个继续进行对话的处理函数的名称。其他处理函数将使用类似的方法。然后我们执行用户选择的处理程序。在这里,我们主要从一个问题转到另一个问题:   

 

最后,我们构建会话处理程序,设置错误处理程序,并将所有处理程序添加到调度程序中。     

 

传递用户数据时允许我们向处理程序提供其他user_data参数。这样可以确保机器人从一个处理程序传递到另一个处理程序时,保持所有答复的对话状态。我们需要run_async装饰器在后台执行交易,而又不会阻止机器人对新消息进行响应:

 

这是用于订单和余额显示的格式化程序:

 

最后,我们创建main.py并将所有内容归结在一起:

 

我们从secrets.txt文件中获取交易所密钥,telegram的token和用户ID,构造核心类并启动机器人。使用以下内容在config文件夹中创建secrets.txt:

 

用Python开发数字货币交易机器人(附源码)

用Python开发数字货币交易机器人(附源码)

总结

对于想要简化交易并拥有更好使用体验的人来说,该机器人更像是一个辅助工具。它不是最先进的算法交易机器人。后面可以进行以下改进:

  •  当进行做空交易时获取可用余额并显示用户可以根据余额做空的最大值
  •  要求在交易所执行之前验证创建的订单
  •  添加TA指标、信号以通知最佳交易时间
  •  止盈/止损操作和其他统计数据
  •  有策略地根据超时等原因取消订单 
【责任编辑:庞桂玉 TEL:(010)68476606】

时讯快报

5.5亿用户的选择

立即打开