跳转至内容

现货连接器 v2.1

先决条件

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

API 检查清单

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

目录设置

连接器

在 hummingbot/hummingbot/connector/exchange 中创建名为 connector_nameconnector 文件夹。

注意

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

  • 不带下划线的示例:binance

  • 带下划线的示例:crypto_com

connector folder 内创建以下文件:

  • 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 文件夹 dwad。

test folder 内创建以下文件:

  • 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

构建流程

常量

向常量文件添加以下变量

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

Web 工具

  • connector_name_web_utils.py 文件
    • 复制 Binance 连接器的 web_utils 文件。
    • 将 Binance 替换为 connector_name,首字母大写。
    • 将 binance 替换为 connector_name
    • 编写创建 REST URL 的函数,检查是否需要公共 URL 和私有 URL,或者只需其中一个。
    • 如果需要时间同步:
      • 确认你有 build_api_factory_without_time_synchronizer_pre_processor 函数。
      • 检查函数 get_current_server_time 是否需要修改(可能需要在响应中找到服务器时间)。
      • 编写带有时间同步器的 build_api_factory 函数,将时间同步器作为 rest_pre_processor
    • 如果不需要时间同步:
      • 删除与时间同步相关的文件,并编写不带时间同步的 build_api_factory 函数。

工具

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

订单簿

  • connector_name_order_book.py

    • 复制 Binance 连接器的订单簿文件。
    • 将 Binance 替换为connector_name,首字母大写。
    • 将 binance 替换为connector_name

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

订单簿数据源

  • connector_name_api_order_book_data_source.py

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

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

    现在我们将以 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
        • listen_for_trades

          • test_listen_for_trades_successful
          • listen_for_trades
          • _parse_trade_message
          • test_listen_for_trades_cancelled_when_listening
          • 测试监听交易时记录异常
        • listen_for_order_book_diffs

          • 测试监听订单簿差异成功
          • 监听订单簿差异
          • _parse_order_book_diff_message
          • 测试监听订单簿差异时被取消
          • 测试监听订单簿差异时记录异常
        • listen_for_order_book_snapshots

          • 测试获取快照时监听订单簿快照被取消
          • 监听订单簿快照
          • _parse_order_book_snapshot_message
          • 测试监听订单簿快照时记录异常
          • 测试监听订单簿快照成功

认证

  • connector_name_auth.py

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

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

    • 方法开发

      • 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 连接器的用户流数据源文件。
    • 将 Binance 替换为connector_name,首字母大写。
    • 将 binance 替换为connector_name
    • HEARTBEAT_TIME_INTERVAL 替换为适当的值。
    • 检查是否需要LISTEN_KEY_KEEP_ALIVE_INTERVAL
  • test_connector_name_api_user_stream_data_source.py

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

    现在我们将以 TDD 的方式开始实现用户流数据源的功能。

    • 方法开发
      • WEBSOCKET
        • 如果你需要 Listen Key:

          • get_listen_key

            • 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

Exchange

  • connector_name_exchange.py

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

    • 复制 Binance 交易所文件的测试。
    • 将 Binance 替换为connector_name,首字母大写。
    • 将 binance 替换为connector_name

    • 方法开发

      • 许多测试已经在通用测试类中!但你需要实现一些方法使其工作。

        • 通用测试类的方法
        • 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
        • expected_logged_error_for_erroneous_trading_rule
        • expected_exchange_order_id
        • is_cancel_request_executed_synchronously_by_server
        • is_order_fill_http_update_included_in_status_update
        • is_order_fill_http_update_executed_during_websocket_order_event_processing
        • expected_partial_fill_price
        • expected_partial_fill_amount
        • expected_fill_fee
        • expected_fill_trade_id
        • exchange_symbol_for_tokens
        • create_exchange_instance
        • validate_auth_credentials_present
        • validate_order_creation_request
        • validate_order_cancelation_request
        • validate_order_status_request
        • 验证交易请求
        • 配置成功的取消响应
        • 配置错误的取消响应
        • 配置一个成功一个错误的全部取消响应
        • 配置完全成交的订单状态响应
        • 配置已取消的订单状态响应
        • 配置错误的 HTTP 成交交易响应
        • 配置开放订单状态响应
        • 配置 HTTP 错误订单状态响应
        • 配置部分成交的订单状态响应
        • 配置部分成交交易响应
        • 配置完全成交交易响应
        • 新订单 WebSocket 更新的订单事件
        • 已取消订单 WebSocket 更新的订单事件
        • 完全成交 WebSocket 更新的订单事件
        • 完全成交 WebSocket 更新的交易事件

        • ExchangePyBase 需实现的方法

          • 认证器
          • 名称
          • 速率限制规则
          • 域名
          • 客户端订单 ID 最大长度
          • 客户端订单 ID 前缀
          • 交易规则请求路径
          • 交易对请求路径
          • 检查网络请求路径
          • 交易对
          • 撤单请求是否在交易所同步
          • 是否需要交易
          • 支持的订单类型
          • _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
        • 更新时间同步器

          • 测试时间同步器成功更新
          • _更新时间同步器
          • ... [附加方法]
          • 测试时间同步器相关请求错误检测
        • 更新订单成交

          • 测试从交易更新订单成交触发成交事件
          • _从交易更新订单成交
          • ... [附加方法]
          • 测试从交易更新订单成交时重复成交只触发一次事件
        • 更新订单状态

          • 测试失败时更新订单状态
          • _更新订单状态
        • 用户流事件监听器

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