跳至内容

现货连接器 v2.1

前提条件

在开始设置现货连接器之前,请确保您的系统上已安装 Hummingbot 源码版本。请按照 Hummingbot 安装指南 中提供的详细说明进行操作。

API 清单

端点(Endpoint) 必需 类型 描述
获取活跃交易市场 公共 REST 获取活跃交易对列表的端点(有时称为“代币信息”)。 (示例)
获取最新成交价格 公共 REST
获取订单簿快照 公共 REST
[TR] 最小名义金额 条件性 公共 REST 获取交易规则的端点。 (示例)
[TR] 最小订单数量 条件性 公共 REST 获取交易规则的端点。 (示例)
[TR] 最小价格 条件性 公共 REST 获取交易规则的端点。 (示例)
[TR] 订单增量 条件性 公共 REST 获取交易规则的端点。 (示例)
PING 端点 公共 REST 通常,任何返回信息量较少的端点都可以用于此目的,但 ping 或时间端点是最理想的。 (示例)
获取账户余额 私有 REST 获取当前账户余额的端点。 (示例)
通过客户端订单 ID 获取订单状态 条件性 私有 REST
通过 exchange_order_id 获取订单状态 条件性 私有 REST
通过订单 ID 获取交易历史 条件性 私有 REST
按时间戳获取交易历史 条件性 私有 REST
获取未成交订单 私有 REST 获取活跃订单的端点 (示例)
创建订单 私有 REST 创建新订单的端点 (示例)
使用 client_order_id 创建订单 条件性 私有 REST 创建新订单的端点 (示例)
通过 exchange_order_id 取消订单 私有 REST
通过客户端订单 ID 取消订单 条件性 私有 REST
订单簿频道(最小深度 100) 公共 Websocket 公开订单频道 (示例)
订单簿差异频道 条件性 公共 Websocket 公开订单频道 (示例)
用户订单/交易频道 私有 Websocket 私有订单更新频道 (示例)
私有订单更新频道 (示例)]
用户余额频道(总余额和可用余额) False 私有 Websocket 私有余额事件频道(如果不存在,则需要配置连接器以根据其活动估算余额) (示例)
身份验证 其他 提供 Web 助手逻辑的类,以正确配置对交易所(私有端点)的身份验证请求。它应该是 AuthBase 的子类 (示例)
速率限制 其他 每个端点应用的速率限制以及每个 IP/连接的全局限制的文档说明。 (示例)
服务器时间 条件性 公共 REST

目录设置

连接器

在 hummingbot/hummingbot/connector/exchange 目录下创建名为 connector_nameconnector 文件夹。

注意

connector_name = 连接器名称的小写形式,如有需要则用下划线分隔。

  • 无下划线示例:binance

  • 含下划线示例:crypto_com

connector 文件夹 中创建以下文件:

  • init.py
  • connector_name_api_order_book_data_source.py
  • connector_name_api_user_stream_data_source.py
  • connector_name_auth.py
  • connector_name_constants.py
  • connector_name_exchange.py
  • connector_name_order_book.py
  • connector_name_utils.py
  • connector_name_web_utils.py
  • dummy.pxd
  • dummy.pyx

测试

在 hummingbot/test/hummingbot/exchange 目录下创建名为 connector_nametest 文件夹。

test 文件夹 中创建以下文件:

  • init.py
  • test_connector_name_api_order_book_data_source.py
  • test_connector_name_api_user_stream_data_source.py
  • test_connector_name_auth.py
  • test_connector_name_exchange.py
  • test_connector_name_order_book.py
  • test_connector_name_utils.py
  • test_connector_name_web_utils.py

构建流程

常量

向常量文件中添加以下变量

  • 默认域名:检查是否需要添加多个域名,该常量将用于 web_utils 中生成路径 URL。
  • REST_URLS:可以像 ByBit 连接器那样是字典,也可以像 Binance 连接器那样是 f-string,DEFAULT DOMAIN 变量将用于选择正确的 URL。
  • 速率限制
  • SERVER_TIME_PATH_URL:检查交易所是否要求您的 时间戳 与服务器时间同步。

网络工具

  • connector_name_web_utils.py 文件
    • 复制 Binance 连接器的 web_utils 文件。
    • 将 Binance 替换为 connector_name,首字母大写。
    • 将 binance 替换为 connector_name
    • 编码函数以创建 rest URL,检查是否需要公共和私有 URL,或仅需其中之一。
    • 如果需要时间同步:
      • 确认你拥有 build_api_factory_without_time_synchronizer_pre_processor 函数。
      • 检查 get_current_server_time 函数是否需要修改(可能需要从响应中提取服务器时间)。
      • 使用时间同步器作为 rest_pre_processor 来编码 build_api_factory 函数。
    • 如果不需要时间同步:
      • 删除与时间同步相关的文件,并在不使用时间同步器的情况下编码 build_api_factory 函数。

工具模块

  • connector_name_utils.py 文件中编码
    • 复制 Binance 连接器的 utils 文件。
    • 将 Binance 替换为 connector_name,首字母大写。
    • 将 binance 替换为 connector_name
    • 使用适当值替换 DEFAULT_FEES
    • 检查是否需要连接其他域名,否则删除相关代码。

订单簿

  • connector_name_order_book.py

    • 复制 Binance 连接器的 order book 文件。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。

    目前我们不会实现任何方法,这一步的唯一目的是因为我们需要在 connector_name_api_order_book_data_source.py 中导入这个类,且不希望出现错误。

订单簿数据源

  • connector_name_api_order_book_data_source.py

    • 复制 Binance 连接器的订单簿数据源文件。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。
    • 使用适当的值替换 HEARTBEAT_TIME_INTERVAL
  • test_connector_name_api_order_book_data_source.py

    • 复制 Binance 订单簿数据源文件的测试文件。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。

    现在我们将开始以测试驱动开发(TDD)的方式实现订单簿数据源的功能。

    • 方法开发

      • REST

        • orderbook
          • test_get_new_order_book_successful
          • _order_book_snapshot
          • _request_order_book_snapshot
          • ExchangeOrderBook.snapshot_message_from_exchange
          • test_get_new_order_book_raises_exception
      • WEBSOCKET

        • listen_for_subscriptions

          • test_listen_for_subscriptions_subscribes_to_trades_and_order_diffs
          • listen_for_subscriptions
          • _subscribe_channels
          • _process_websocket_messages
          • test_listen_for_subscriptions_raises_cancel_exception
          • test_listen_for_subscriptions_logs_exception_details
          • test_subscribe_channels_raises_cancel_exception
          • test_subscribe_channels_raises_exception_and_logs_error
        • 监听交易

          • test_listen_for_trades_successful
          • listen_for_trades
          • _parse_trade_message
          • test_listen_for_trades_cancelled_when_listening
          • test_listen_for_trades_logs_exception
        • 监听订单簿差异

          • test_listen_for_order_book_diffs_successful
          • listen_for_order_book_diffs
          • _parse_order_book_diff_message
          • test_listen_for_order_book_diffs_cancelled
          • test_listen_for_order_book_diffs_logs_exception
        • 监听订单簿快照

          • test_listen_for_order_book_snapshots_cancelled_when_fetching_snapshot
          • listen_for_order_book_snapshots
          • _parse_order_book_snapshot_message
          • test_listen_for_order_book_snapshots_log_exception
          • test_listen_for_order_book_snapshots_successful

认证

  • connector_name_auth.py

    • 复制 Binance 连接器的认证文件。
    • connector_name 中的 Binance 替换为首字母大写的形式。
  • test_connector_name_auth.py

    • 复制 Binance 认证文件的测试文件。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。

    • 方法开发

      • REST
        • rest_authenticate
          • test_rest_authenticate
          • rest_authenticate
          • add_auth_to_params
          • header_for_authentication
          • _generate_signature
      • WEBSOCKET
        • ws_authenticate

用户流数据源

  • connector_name_api_user_stream_data_source.py

    • 复制 Binance 连接器的用户流数据源文件。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。
    • 使用适当的值替换 HEARTBEAT_TIME_INTERVAL
    • 检查是否需要 LISTEN_KEY_KEEP_ALIVE_INTERVAL
  • test_connector_name_api_user_stream_data_source.py

    • 复制 Binance 用户流数据源文件的测试。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。

    现在我们将开始以测试驱动开发(TDD)的方式实现用户流数据源的功能。

    • 方法开发
      • WEBSOCKET
        • 如果需要监听密钥:

          • test_get_listen_key_log_exception
          • _get_listen_key
          • test_get_listen_key_successful
          • test_ping_listen_key_log_exception
          • _ping_listen_key
          • test_ping_listen_key_successful
          • test_manage_listen_key_task_loop_keep_alive_failed
          • _manage_listen_key_task_loop
          • test_manage_listen_key_task_loop_keep_alive_successful
        • listen_for_user_stream

          • test_listen_for_user_stream_get_listen_key_successful_with_user_update_event
          • listen_for_user_stream (位于父类中)
          • _connected_websocket_assistant
          • _subscribe_channels
          • _get_ws_assistant
          • _on_user_stream_interruption
          • test_listen_for_user_stream_does_not_queue_empty_payload
          • test_listen_for_user_stream_connection_failed
          • test_listen_for_user_stream_iter_message_throws_exception

交易所

  • connector_name_exchange.py

    • 复制 Binance 连接器的交易所文件。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。
  • test_connector_name_exchange.py

    • 复制 Binance 交易所文件的测试代码。
    • connector_name 中的 Binance 替换为首字母大写的形式。
    • connector_name 替换为 binance。

    • 方法开发

      • 许多测试已经存在于通用测试类中!但你需要实现一些方法才能使其正常运行。

        • 通用测试类所需的方法
        • all_symbols_request_mock_response
        • latest_prices_request_mock_response
        • all_symbols_including_invalid_pair_mock_response
        • network_status_request_successful_mock_response
        • trading_rules_request_mock_response
        • trading_rules_request_erroneous_mock_response
        • order_creation_request_successful_mock_response
        • balance_request_mock_response_for_base_and_quote
        • balance_request_mock_response_only_base
        • balance_event_websocket_update
        • expected_latest_price
        • expected_supported_order_types
        • expected_trading_rule
        • 预期的错误交易规则日志错误
        • 预期的交易所订单 ID
        • 服务器是否同步执行取消请求
        • 状态更新中是否包含订单成交的 HTTP 更新
        • 是否在 WebSocket 订单事件处理期间执行订单成交的 HTTP 更新
        • 预期的部分成交价格
        • 预期的部分成交数量
        • 预期的成交手续费
        • 预期的成交交易 ID
        • 代币的交易所符号
        • 创建交易所实例
        • 验证认证凭据是否存在
        • 验证订单创建请求
        • 验证订单取消请求
        • 验证订单状态请求
        • 验证交易记录请求
        • 配置成功的取消响应
        • 配置错误的取消响应
        • 配置一个成功一个失败的全部取消响应
        • 配置完全成交订单的状态响应
        • 配置已取消订单的状态响应
        • 配置错误的 HTTP 成交交易响应
        • 配置未完成订单的状态响应
        • 配置 HTTP 错误订单状态响应
        • 配置部分成交订单的状态响应
        • 配置部分成交交易响应
        • 配置完全成交交易响应
        • 新订单的订单事件 WebSocket 更新
        • 已取消订单的订单事件 WebSocket 更新
        • 完全成交订单事件的 WebSocket 更新
        • 完全成交交易事件的 WebSocket 更新

        • 需实现的 ExchangePyBase 方法

          • 认证器
          • 名称
          • 限速规则
          • 域名
          • 客户端订单 ID 最大长度
          • 客户端订单 ID 前缀
          • 交易规则请求路径
          • 交易对请求路径
          • check_network_request_path
          • 交易对
          • 是否取消请求在交易所同步
          • 是否需要交易
          • 支持的订单类型
          • _is_request_exception_related_to_time_synchronizer
          • _create_web_assistants_factory
          • _create_order_book_data_source
          • _create_user_stream_data_source
          • _get_fee
          • _place_order
          • _place_cancel
          • _format_trading_rules
          • _status_polling_loop_fetch_updates
          • _update_trading_fees
          • _user_stream_event_listener
          • _all_trade_updates_for_order
          • _request_order_status
          • _update_balances
          • _get_last_traded_price
          • _initialize_trading_pair_symbols_from_exchange_info
        • 更新时间同步器

          • 测试更新时间同步器成功
          • _update_time_synchronizer
          • ... [其他方法]
          • 测试时间同步器相关请求错误检测
        • 更新订单成交记录

          • 测试从交易中更新订单成交记录会触发已成交事件
          • _update_order_fills_from_trades
          • ... [其他方法]
          • 测试从交易中更新订单成交记录时,重复的成交仅触发一次事件
        • 更新订单状态

          • 测试更新订单状态失败时的情况
          • _update_order_status
        • _user_stream_event_listener

          • 测试用户流更新订单失败事件
          • _user_stream_event_listener
  • connector_name_api_keyconnector_name_api_secret 添加到 conf_global_TEMPLATE.yml