在加密货币场外交易中,两个交易所之间的价格差异通常在几百毫秒到几秒之间。您的策略可以巧妙,您的资金可以随时准备就绪,且费用可以协商降至最低。如果您的连接速度慢、同步不佳或持续受到速率限制,那么您的订单就可能在下单前就已经成交了。对于跨交易所的机器人,, API 连接就是策略. 其他的一切都放在上面。.
本指南涵盖了大多数套利教程所忽略的管道知识:如何正确连接加密货币交易所的API;这意味着要根据具体情况选择哪种接口;如何保持与交易所同步的本地订单簿;如何保持在速率限制内的操作;如何锁定 API 密钥;以及如何保持 24/7 的连接。本指南是针对那些在多个交易所运行或计划运行套利机器人交易的交易员而编写的。如果您仍在选择策略,请从我们的指南开始。 跨交易所加密货币套利机器人指南 等到时候再过来把一切连接起来。.
差价合约 API 连接的解剖结构
一个有效的跨交易所设置并不只有一个连接,而是多个连接,每个连接都有自己的工作。对于您交易的每个交易所,您通常会保留以下信息:
- 公共市场数据流 (WebSocket)能够实时推送订单信息更新,并在交易发生时进行交易。.
- 订单输入渠道 (REST 或 WebSocket/FIX 订单 API,交易所提供这种服务)用于下单和取消订单。.
- 私人用户数据流 (WebSocket)可以告知您填充情况、订单状态变化以及余额更新信息,而无需您主动询问。.
- 偶尔的 REST 调用 对于不需要快速处理的事务:订单记录快照、交易信息(点数大小、手数步)、费用等级和调节余额。.
初学者往往会在这里犯两个错误。第一个错误是,在订阅流媒体时,不使用 REST 来计算价格;第二个错误是,在监听私有流媒体时,不使用 polling 来计算订单状态;这两者都浪费了你的速率限制预算,并增加了数百毫秒的延迟,而你再也无法收回这些延迟了。.
REST vs WebSocket vs FIX:哪种接口适合哪种工作?
大多数大型交易所都提供 REST API 和 WebSocket 流。少数大型交易所还提供 FIX 或专用的低延迟订单输入 API,通常针对更高的收费等级或机构账户。每个平台都有各自的优势:
| 界面 | 最佳 | 弱点 | 用于套利交易 |
|---|---|---|---|
| REST | 请求/响应任务、快照、账户数据 | 每次请求最多可进行一次往返通话;每次通话的费用均为限额标准费率。 | 实时查看订单记录、交换信息、余额以及订单入库情况——目前还没有更快的方法。 |
| 公开WebSocket | 无投票权的流媒体价格 | 您必须自己管理序列号、重新连接和重新同步。 | 实时订单簿和交易:成为每个信号的基础 |
| 私人 WebSocket | 推送您自己的订单和余额的更新 | 需要输入密码或登录凭证,且一旦关闭登录,就会失效。 | 订单状态和订单状态;第二阶段套期保值的触发点 |
| WebSocket 顺序 API | 在开放连接下下单 | 并非在所有交易所都能实现;仍受利率限制。 | 低延迟订单提交:每单订单无需新建 HTTPS 请求 |
| 修复 | 机构订单输入和取消 | 供应有限、入职流程复杂、最低级别设置有限 | 支持它的场所数量众多 |
一条简单的规则: 数据通过流传输,决策则在本地做出,订单则通过交易所提供的最快的渠道发出。. REST 适用于设置和调节,而非用于热路径上的任何操作。如果您来自外汇市场,那么其中的取舍与后者非常相似。 FIX API 与 MT4 桥接器协议规定了延迟的最低限度。.
保持一份实际准确的本地订单记录
这就是大多数自制机器人在默默失败的地方。交易所不会在每次更新时向你发送完整的订单记录。它只会发送 变化“问价价位64,210.5,现在是0.82 BTC。”您自己保管完整的书本。如果您错过任何一个变化,您的书就会偏离现实。您的机器人就会“看到”一个不存在的价差,并根据从未存在的价格发出订单。.
大多数大型交易所以不同形式记录的标准模式如下:
- 先订阅差异分发流 并缓冲传入的邮件。.
- 获取 REST 静态对象 该信息包含在订单簿中。它包含一个序列号或更新 ID。.
- 将较旧的缓存更新丢弃,这些更新比快照更旧。, 然后按顺序应用其余的。.
- 检查每个消息的连续性。. 每个更新的第一序列号必须与您上次应用的序列号相对应。.
- 在出现任何问题时,丢掉这本书并重新同步 从第一步开始。切勿在已知存在缺点的书籍上进行补丁修复。.
另外两个检查值得补充。首先, 恒定时间计时器如果一个流形已经存在了两秒钟,那么就把它当作不可靠的实体处理;因为流形在没有关闭的情况下可能已经处于半死状态了。第二, 交叉图书检查在一个交易平台上,最高出价几乎总是高于最高出价,这意味着你的交易系统出了问题,而不是你获得了免费资金。有些交易所还会公布最高出价的校验值。如果你的系统也有这个功能,请将其与该校验值进行比较。.
速率限制:每个订单背后的预算
每个交换平台都会限制你对其 API 的调用次数。具体方式各不相同,但大多数平台会结合多个层:
- 每分钟要求重量, 通常按 IP 计算。重型端点(例如深度订单簿快照)的权重会比轻型端点更大。.
- 订单数量限制 每秒和每天,通常以账户而不是 IP 的方式计算。.
- WebSocket 局限每秒可以发送的消息数量、每个 IP 的连接数量以及每个连接的流数。.
超过限额不仅会显示错误信息。多次违反会导致临时 IP 封禁,对于屡犯者则通常会持续几分钟甚至更长时间。这可能会导致您的机器人处于关闭状态,而此时您正在进行开放交易。因此,请将限额视为一项重要事项。 预算 你要计划,而不是靠撞击而发现的墙壁。.
让您保持预算控制的实用规则:
- 阅读限制头信息。. 许多交易所会在每个响应头中返回您所使用的权重。跟踪它,并在达到上限之前减速,而不是在达到上限之后。.
- 为取消情况准备一份备用名单。. 限制利率的最佳时机是在需要取消过期的订单或对已完成的订单进行对冲时。在这种情况下,至少保留 20-30% 的预算用于支付这笔费用。.
- 使用私密流来显示状态信息。. 不要一直循环播放“我的订单是否已完成?”的提示音。.
- 不要滥用 IP 轮换或多开多个账号的行为。. 这通常会违反交易所的使用条款,并可能导致所有账户被封禁。向交易所申请更高的限额或更好的级别是合法的途径。.
身份验证、时钟同步和 API 密钥安全
私有端点通常使用 HMAC 加密(部分交易所也支持 Ed25519 或 RSA 密钥)。该签名包含时间戳,而交易所会拒绝那些时间戳位于短时间内(通常为几秒钟)的请求。这使得 时钟同步 这是您的交易基础设施的一部分:在服务器上运行 NTP 或 chrony,并观察偏移量。时钟的漂移会导致大量“timestamp outside recvWindow”的拒绝请求,这些请求恰好发生在市场繁忙且您的服务器处于负荷状态的时候。.
API密钥是你资金的钥匙,所以要妥善保管它们:
- 仅限交易,提款除外。. 差价合约机器人无需在交易密钥上申请提款权限。手动在多个交易所之间转移资金,也可以使用单独且严格控制的流程。.
- IP 允许列表。. 将每个密钥绑定到服务器的静态 IP 上。只有来自您的 VPS 的密钥才能正常工作,这样风险就更小了。.
- 每个机器人最多可以持有一个密钥,每个交易所最多可以持有一个密钥,最好是每个子账户最多持有一个密钥。. 如果出了问题,你可以撤销一个密钥,而不会停止整个操作。.
- 代码和日志中的秘密. 使用环境变量或秘密管理器,并确保您的错误日志永远不会打印完整密钥或签名。.
- 按时旋转 以及任何员工变动或涉嫌泄密事件发生后的第一时间。.
延迟:毫秒实际上是如何流逝的
对于两个交易所来说,总反应时间大致如下:从交易所 A 发送市场数据 + 处理订单 + 到交易所 B 的订单传输 + 匹配操作。在家庭互联网连接的情况下,跨洲的往返传输时间可能只需 150-250 毫秒。而在与交易所匹配引擎位于同一云区域的 VPS 上,网络部分则可能降至几毫秒。.
这就是为什么服务器位置的重要性远超过代码技巧。许多大型加密货币交易所都将匹配引擎部署在主要的云区域(东京是其中一个),有些还会公开其托管区域信息。另外一些信息可以通过对候选数据中心的ping测试获得。选择一个靠近的位置是关键。 两者 您的主要对的场地。如果它们位于不同的洲,您无论如何都要支付差价,而您的策略应该能够应对这种情况。 低延迟虚拟专用服务器设置指南 详细介绍了测量延迟和选择数据中心的过程。同样的方法也适用于加密货币交易场所。.
在你自己的过程中,主要的收益来自于在不进行大量分配的情况下解析消息,只更新那些实际发生变化的价位,并保持订单签名键和连接的保持状态。像 TCP_NODELAY 这样的技巧是值得拥有的。正确的书籍和简短的网络路径远比这些更重要。.
24/7保持联系
加密货币永远不会关闭,但连接却会。要为这些正常情况做好准备,而不是把它们当作罕见的例外:
- 计划中的断开连接。. 一些交易所会在固定期限(通常是24小时)后关闭所有 WebSocket 连接。在旧连接到期之前打开一个新的连接,并顺利切换。.
- 心跳声。. 在交换环节中,应答ping帧并发送自己的ping,即便是交换环节预期也会这样做。私人流监听密钥通常需要每隔一段时间进行一次keep-alive呼叫。.
- 维护窗口和 API 升级。. 订阅每个交易所的 API 公告。端点将被弃用,权重也会发生变化,新的版本会取代旧版本。.
- 部分停电。. 如果订单提交失败,交易所仍可以继续实时更新价格。如果订单超时,请不要认为它已被拒绝。在重新尝试之前,请先查看私密流或状态查询,以免出现双头仓。.
最安全的设计是 kill-switch状态机. 任何丢失的流数据、陈旧的图书或不同步的时钟都会导致机器人进入“无新位置”状态。它会平滑或分割任何已打开的数据,然后进行干净的重建。.
将多个交易所整合到一个视图中
每个交易所都以不同的方式描述同一个市场。一种是 BTCUSDT,另一种是 BTC-USDT,第三种是 XBT/USDT。点差大小、最小手数、手数单位以及费用表也各不相同。为了让您的机器人能够比较不同交易所的价格,它需要一个标准化层:
- 将每个交易所的符号与一个内部工具 ID 一起映射;;
- 将价格按每个场地的点数规模和手数按手数级调整,以保持您保持保守的策略;;
- 检查最小订单数量,这样一来,第二笔套利交易就不会因为数量过小而被拒绝;;
- 适用 你的 每场赛事实际的买入/卖出费用。重要的差价是费用后的差价,正如我们在详细分析中解释的那样。 加密货币套利的主要类型.
在启动时从每个交易所的信息端点加载这些参考数据,并在每隔几个小时刷新一次。交易所的上市信息、点位大小和限额的变化频率远高于您所想象的。.
一步一步来:将新交易所连接到您的套利策略
- 创建专用子账户和 API 密钥 只有拥有交易权限时才能提款,且您的服务器 IP 地址已被允许列出。.
- 测量延迟 从您的候选 VPS 到交易所的 REST 和 WebSocket 端点,并将服务器靠近匹配引擎的位置。.
- 同步时钟 (NTP/chrony)并确认偏移值保持在交易所签名的范围内。.
- 加载交换信息:符号、勾号大小、手数单位、最小基准金额以及您的费用等级。将它们输入到您的标准化层中。.
- 建立本地订单库 采用快照 + 差异分析方法,具备缺口检测、恒定时间计时器和交叉图书检查功能。.
- 连接私有用户数据流 用于填充和余额,具备保持连接和自动重新连接功能。.
- 设置您的限额预算, 具有针对取消订单和套期保值订单的保留份额,并跟踪头条权重。.
- 最小尺寸的测试, 首先,对比本地交易平台上的界面,然后根据实际情况调整手数大小。.
如果您不想自己构建和维护所有这些功能,那么一个现成的平台可以自动处理交易环节、订单管理和订单路由等操作。 添加加密货币交易所环节的指南 展示了 HFT 差价合约平台下的操作方式,在这里您只需输入 API 密钥,平台即可完成其余的操作。.
常见问题解答
我是否需要 WebSockets 进行加密货币交易,还是只需使用 REST 即可?
对于任何依赖速度的套利操作,你需要 WebSockets 来获取市场数据。通过 REST 方式进行点播价格查询的速度较慢,会消耗掉你的速率限制预算,而且无法及时捕捉到市场变化。REST 方式仍然适用于快照数据、账户数据以及部分交易所的订单入场操作。.
一个套息机器人应该具备哪些 API 权限?
只读、只交易。在机器人使用的每个关键点上关闭提取功能,将关键绑定到服务器的 IP 地址,并在每个机器人和交易所使用单独的密钥,最好是单独的子账户。.
为什么我的机器人会看到一些并非真实的套利机会?
通常是因为本地订单簿不同步:某个更新被遗漏了,某个流被关闭了,或者某个快照被应用顺序错误。添加序列间隙检测、滞留计时器和交叉订单检查,并在其中任何一项发生故障时重新同步。此外,在实际费用出现变化后,也要确认订单簿的完整性。.
如果我的交易所的 API 速率上限被突破了,会发生什么情况?
首先,您会收到拒绝请求,通常会收到 HTTP 429 或类似错误代码。如果您继续超过限额,许多交易所会采取临时 IP 禁令措施。对于有未清余额的交易来说,这非常危险,所以请为取消和套期保值准备充足的预算。.
加密货币交易套利时,我的服务器应该放在哪里?
尽可能将连接交易所的引擎与交易所匹配,通常是将使用同一云区域。不要凭猜测来衡量ping时间。如果两个地点相距很远,则应将服务器放在速度对您的策略至关重要的地点附近。.
是否可以使用多个 API 密钥或 IP 获取更多请求?
交易所是有意设置速率限制的,而使用额外的 IP 或账号来规避这些限制通常会违反其使用条款,并可能导致账号被封禁。如果您需要更高的吞吐量,请向交易所咨询更高的速率、VIP 等级或机构级 API 的相关信息。.