交易机器人是指一组计算机程序,旨在根据预定义的标准自动执行金融市场中的交易。这些标准可以包括市场状况、技术指标或任何其他数据集。
在本指南中,我们将使用CoinGecko API,旨在利用加密货币的顶级赢家和输家,从而在任何方向上利用加密货币波动。
与往常一样,您可以在本文末尾找到GitHub存储库的链接,让您可以直接进入并尝试使用该工具。让我们继续读下去!
先决条件
在我们开始构建交易机器人之前,我们需要以下工具:
- Python 3.10+
- IDE
- CoinGecko API密钥
- 币安API密钥
步骤1;生成API密钥
CoinGecko API
要获得CoinGecko API密钥,请前往开发人员仪表板然后单击+添加新密钥在右上角。遵循本指南,了解如何生成和设置API密钥.
对于这个机器人,我们将使用CoinGecko的涨幅最高的公司;失败者端点,可在Analyst层及以上级别使用。或者,您可以使用包含市场数据的硬币列表端点,可在演示计划中免费访问。你可能需要自己做一些额外的排序和过滤,但这是一个可行的免费替代方案。
币安 API
Binance有相对大量的可用加密货币和强大的交易API,这使其成为我们的机器人的一个很好的选择。如果您更喜欢使用不同的交易所,欢迎您这样做,但请记住,您需要重写交易所服务,因为本指南使用Binance API包装器。
前往您的帐户,在您的个人资料下找到API管理设置:
根据API管理,点击创建API,选择“系统生成”,然后单击“下一步”。一旦你完成了安全检查,你应该会看到这样的东西:
请继续保存您的API密钥和密钥,因为这是Binance唯一一次显示密钥。如果在保存之前刷新了页面,只需删除此密钥并创建另一个密钥即可。
保存了您的API凭据后,是时候将您的;键入正确的API限制。这告诉你的密钥它能做什么和不能做什么,重要的是只给机器人运行所需的最小权限。
既然我们希望我们的机器人代表我们进行交易,点击编辑限制然后滴答作响启用Spot&;保证金交易。这;是唯一需要的许可启用阅读,因此避免勾选危险的权限,如启用提款。
为了提高安全性,最好将API密钥的范围仅限于您的IP地址。在IP访问限制下,选择仅限制访问受信任的IP,然后粘贴您的IP地址。
步骤2;配置您的环境
让我们继续配置我们的Python应用程序。我们将首先创建一个虚拟环境并安装所有项目依赖项。
安装要求
在空目录中,继续运行以下命令:
激活虚拟环境后,继续安装以下要求。最简单的方法是将下面的文件复制到根目录中的一个名为需求.txt然后跑步pip安装-r要求.txt.
创建;项目结构
继续创建您的目录结构;项目。您的初始设置应该如下:
定义凭据和配置设置
在你空虚的内心.env文件继续并将CoinGecko和Binance API密钥放入以下变量中:
我们稍后将使用这些变量将API凭据安全地导入到我们的应用程序中。现在让我们配置我们的机器人设置。我们的交易机器人将根据我们给出的指令下订单config.json;
以下是我们将定义选项的地方,例如;每笔交易应该花费的金额,以及其他设置。让我们在内部定义以下设置config.json:
关于每个选项的含义,请参阅下面的细分(现在可以跳过前面的部分,在运行机器人之前重新访问本节)。
- 数量:机器人将在每笔交易中花费的金额,以vs_货币指定。例如,如果vs_货币设置为USDT,机器人将为每种资产进行价值20 USDT的交易。
- stop_loss:如果价格下跌以避免进一步损失,机器人将关闭交易的百分比(即:10%的损失为10)。
- take_profit:机器人将关闭交易以锁定收益的百分比。
- bot_frequency_in_seconds机器人多久检查一次新的交易机会,以秒为单位。
- vs_货币:机器人将用于交易的货币。
- 资产数量:机器人将购买的最大顶级资产数量。
- 模式:设置为“收益”以交易收益最高的股票,或设置为“损失”以关注收益最高的投资者。
步骤3。建造能源设施
在这个机器人程序的上下文中,实用程序是一组帮助函数,帮助我们加载API密钥、配置和定义记录器。
里面utils目录,让我们从创建一个空目录开始load_env.py文件。接下来,让我们为我们的凭据定义变量:
我们现在可以简单地将这3个变量导入代码的其他部分,以安全地访问我们的API密钥。
在utils目录中,创建另一个名为的空文件load_configure.py在这个文件中,我们将定义一个名为load_config()返回一个类型为的对象配置.
如果IDE警告Config对象不存在,请不要担心,我们将在配置记录器后的下一步中定义它。
接下来,在同一个utils目录下创建另一个名为logger.py的文件。在这里,我们将按如下方式配置我们的应用程序记录器:
上述配置将把我们的日志保存为以下文件格式:2025-01-30_log.log ;这将每天生成一个新的日志文件。另一个需要记住的设置是;日志级别。要启用较低严重性的日志记录,您可以将其设置为登录中。调试-然而,请记住,这个选项相当嘈杂。
步骤4;定义模型/对象
这就是我们定义将在整个应用程序中使用的对象的形状的地方 ;
配置对象
里面models目录,创建一个名为的新文件config.py在内部,我们定义了一个配置类。
注意@数据类装饰师-;这简化了创建主要用于存储数据的类的过程,并减少了我们必须编写的样板代码量。
我们还使用了一个名为JSONWizard类,这使得序列化和反序列化JSON数据变得容易。它还允许在我们的代码中使用点表示法,并在IDE中使用类型提示。
货币枚举
接下来,让我们创建一个currencies.py文件。当从CoinGecko请求硬币数据时,我们需要指定vs_currency参数,决定返回价格和其他数据的货币。
这对于我们的用例来说已经足够了,因为我们只使用美元,但对于更复杂的需求,您可以调用CoinGecko API的;支持的货币列表endpoint查看支持的货币的完整列表并保存响应。
赢家和输家反对
在同一个models目录中,让我们定义赢家和输家CoinGecko中的对象;API在名为currency_performance.pyCoinGecko的Top Gainers和Losers端点返回一个由两个主要子对象组成的对象:top_gainers以及top_loser;
每个类别都包含一个在给定时间段内价格上涨或下跌最多的加密货币列表。
为了表示这种结构,我们定义了两种类型:
- 货币表现:这代表了每种加密货币的数据。
- 赢家和输家:这是一个容器对象,它包含两个列表——一个是涨幅最大的列表,一个是跌幅最大的列表。每个列表都由CurrencyPerformance对象组成。
请注意,对于这个交易机器人,我们正在处理24小时的价格变化,因此我们已经绘制了房产地图usd_24h_change这是API返回的实际百分比变化百分比。如果您选择使用不同的时间框架,则需要重命名此变量。
如果选择使用自由端点,则需要更改此对象的形状以匹配响应。该对象可能看起来像这样:
订单对象
最后,让我们在一个名为的新文件中定义交易所订单响应的形状order.py执行成功订单后,Binance API将返回以下形状的响应:
请注意,每个订单都有一个名为填充物类型列表[填写]这是因为订单可能需要多次填充才能完成,具体取决于订单的大小和可用的订单;订单簿中的流动性。
步骤5。构建服务
服务是我们代码中负责获取数据、执行和保存交易的部分。对于这个机器人,我们的服务由3个部分组成:;
- CoinGecko服务:;负责找出赢家和输家。
- Exchange服务:;负责下订单。
- 储蓄服务:;负责将我们的交易保存在.json文件中,并在本地管理我们的投资组合。
CoinGecko服务
下面services目录,创建一个名为的新文件coingecko_service.pyCoinGecko服务需要做两件事:获取我们的最大赢家和输家,并返回可用vs_currencies的列表。
Exchange服务
继续创建一个exchange服务.py服务下的文件。我们的交易所服务应该能够:代表我们下买卖订单,并获取交易所上任何加密货币的当前价格,所以让我们继续构建它:
有一件事需要注意;是;我们正在使用python-finance库与binance API进行交互。这使我们不必编写自己的包装器 ;
另一件要记住的事情是vs_currency买入和卖出方法的参数。为了保持一致性,我们将其命名为与CoinGecko自己的参数相同,但这是指交易所本身支持的基础资产,而不是CoinGecko。例如,Binance的大多数对都是美元兑,但这不是CoinGecko的API返回的值。
最后,拥有一种获取硬币当前价格的方法背后的原因是帮助我们管理退出策略。我们将使用它来计算机器人持有的资产的当前止损和止盈。
节约服务
该服务应该能够写入和读取本地JSON文件,以帮助我们保存和管理我们的机器人投资组合和交易历史。创建一个名为的新文件save_service.py,让我们定义一个储蓄服务类及其方法:
随着最终服务的完成,是时候在我们的主可执行文件中构建我们的核心机器人逻辑了 ;
步骤6。创建主可执行文件和机器人逻辑
里面main.py,让我们首先导入所有必要的要求并初始化我们的服务:
我们还添加了实时交易功能;控制台上会弹出警告,给我们10秒钟的时间改变主意。
现在让我们定义我们的主要功能,这是我们机器人的核心逻辑所在。
机器人首先检查配置的模式(“增益”或“丢失”)。根据此设置,它将交易收益最高或亏损最高的资产。
接下来,机器人根据配置中指定的数量(config.number_of_assets)选择顶部资产。例如,如果这个数字设置为5,机器人将只交易返回的前5个资产。
然后,机器人会尝试使用配置的金额和货币购买每个选定的资产。如果购买成功,订单将同时记录在两个系统中;portfolio.json ;以及trades.json以供将来参考。将购买保存在两个单独的文件中的原因是,交易代表了所有订单的历史视图,而投资组合只包含机器人持有的资产 ;这些文件位于资产目录下;是自动创建的。
接下来,机器人监控投资组合中资产的表现。它将当前价格与原始购买价格进行核对,并计算损益百分比。如果价格变化超过配置的止盈或止损阈值,机器人将触发卖出订单。
卖出逻辑还考虑了交易费用,在执行交易之前从销售金额中扣除这些费用。一旦卖出完成,订单将从投资组合中删除,并保存在交易中以进行历史跟踪。
要在循环中运行此逻辑,我们只需要调用main()在循环中执行函数,并从机器人的配置中添加我们的睡眠定时器。
剩下要做的就是;运行机器人并监控日志!一个健康的日志应该是这样的:
如果您遇到以下错误:
此请求的时间戳比服务器时间早1000ms ;
只需在时间和日期设置下同步设备的时间。
注意事项和;结论
目前,止盈和止损逻辑与买入逻辑在同一线程中执行。这种设置意味着每个机器人周期只进行一次止损和止盈检查,而不是持续监控。例如,如果机器人被配置为每天交易一次收益最高的硬币,它每天只会评估一次止盈和止损条件。这种延迟可能会导致在动荡的市场中错失机会。
为了解决这一限制,机器人的止盈、止损和卖出逻辑可以被合并到一个单独的线程中。这将使其与购买逻辑脱钩,使它们能够独立运行,更快地应对市场变化。
此外,值得注意的是,该机器人目前缺乏测试模式,这意味着它只能在实时交易中运行。
最后,始终确保您的config.json根据您的目标和风险承受能力量身定制的交易策略。与任何交易工具一样,谨慎行事,负责任地交易。
No comments yet