跳转至内容

永续合约连接器 v2.1

先决条件

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

API 检查清单

名称 必需 类型 注释 路径 URL
获取活跃市场 True 公共 REST 获取活跃交易对列表的端点。示例 GET /markets
获取最后成交价 False 公共 REST GET /markets
获取订单簿快照 False 公共 REST GET /markets/{market_name}/orderbook?depth={depth}
[TR] 最小名义金额 条件性 公共 REST 获取交易规则的端点。示例 GET /markets
[TR] 最小订单金额 条件性 公共 REST 获取交易规则的端点。示例 GET /markets
[TR] 最小价格 条件性 公共 REST 获取交易规则的端点。示例 GET /markets
[TR] 订单增量 条件性 公共 REST 获取交易规则的端点。示例 GET /markets
PING 端点 True 公共 REST 用于低信息量端点,如 ping。示例 GET /
获取账户余额 True 私有 REST 获取当前账户余额。示例 GET /wallet/balances
根据客户端订单 ID 获取订单状态 条件性 私有 REST GET /orders/by_client_id/{client_order_id}
根据交易所订单 ID 获取订单状态 条件性 私有 REST GET /orders/{order_id}
根据订单 ID 获取交易历史 条件性 私有 REST GET /fills
根据时间戳获取交易历史 条件性 私有 REST GET /fills
获取未平仓订单 True 私有 REST 获取活跃订单。示例 GET /orders
创建订单 True 私有 REST 创建新订单。示例 POST /orders
使用客户端订单 ID 创建订单 条件性 私有 REST 创建新订单。示例 POST /orders
按交易所订单 ID 取消订单 True 私有 REST DELETE /orders
按客户端订单 ID 取消订单 条件性 私有 REST DELETE /orders
订单簿频道(最小深度 100) True 公共 WebSocket 公共订单频道。示例 orderbook
订单簿差异频道 条件性 公共 WebSocket 公共订单频道。示例 orderbook
用户交易频道(订单状态、成交、费用) True 私有 WebSocket 私有订单更新。示例 fills
用户订单频道(订单状态、成交、费用) 私有 WebSocket orders
用户余额频道(总额和可用额) False 私有 WebSocket 私有余额事件。示例
认证 True 其他 Web 助手的认证逻辑。示例
速率限制 True 其他 速率限制文档。示例
服务器时间 条件性 公共 REST
资金支付 True 公共 REST 资金支付信息 GET /funding_payments
获取持仓 True 私有 REST 获取当前持仓 GET /positions

构建流程

常量

向常量文件添加以下变量

  • 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 文件
    • 复制 Bybit Perpetual 连接器的 web_utils 文件。
    • 将 Bybit Perpetual 替换为 connector_name,首字母大写。
    • 将 Bybit Perpetual 替换为 connector_name
    • 检查是否需要线性永续合约或删除该逻辑
    • 如果找到模式,您可以编写函数从 rest 响应中获取结果或成功状态
    • 您也可以这样做以从 websocket 频道中提取主题和负载
    • 编写创建 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 文件中的代码
    • 复制 Bybit Perpetual 连接器的 utils 文件。
    • 将 Bybit 替换为 connector_name,首字母大写。
    • 将 bybit_perpetual 替换为 connector_name
    • 用适当的值替换 DEFAULT_FEES
    • 检查是否需要连接到其他域或删除它。
    • 检查是否需要线性交易或删除

订单簿数据源

  • connector_name_api_order_book_data_source.py

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

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

    现在我们将以 TDD 的方式开始实现订单簿数据源的功能。

  • 方法开发

    • REST

      • orderbook

        • test_get_new_order_book_successful
        • _order_book_snapshot
        • _request_order_book_snapshot
        • test_get_new_order_book_raises_exception
      • funding_info

        • test_get_funding_info
        • get_funding_info
    • WEBSOCKET

      • listen_for_subscriptions

        • test_listen_for_subscriptions_subscribes_to_trades_and_order_diffs_and_funding_info
        • listen_for_subscriptions (在父类中)
        • _connected_websocket_assistant
        • _subscribe_channels
        • _process_websocket_messages
        • _channel_originating_message
        • 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
        • _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
        • 测试监听订单簿快照时记录异常
        • 测试监听订单簿快照成功
      • listen_for_funding_info

        • 测试监听资金信息时被取消
        • _parse_funding_info_message
        • 测试监听资金信息时记录异常
        • 测试监听资金信息成功

认证

  • connector_name_auth.py
    • 复制 Bybit 永续合约连接器认证文件。
    • 将 Bybit 替换为 connector_name 并将首字母大写。
  • test_connector_name_auth.py

    • 复制 Bybit 永续合约认证文件的测试。
    • 将 Bybit 永续合约替换为 connector_name 并将首字母大写。
    • 将 Bybit 永续合约替换为 connector_name
  • 方法开发

    • REST

      • rest_authenticate
        • 测试 REST 认证
        • rest_authenticate
        • add_auth_to_params
        • header_for_authentication
        • _generate_signature
    • WEBSOCKET

      • ws_authenticate

用户流数据源

  • connector_name_api_user_stream_data_source.py

    • 复制 Bybit 永续合约连接器的用户流数据源文件。
    • 将 Bybit 替换为首字母大写的 connector_name
    • 将 bybit 替换为 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

    • 复制 Bybit 永续合约连接器的衍生品文件。
    • 将 Bybit 替换为首字母大写的 connector_name
    • 将 bybit 替换为 connector_name
  • test_connector_name_exchange.py

    • 复制 Bybit 衍生品文件的测试。
    • 将 Bybit 替换为首字母大写的 connector_name
    • 将 bybit 替换为 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 更新的交易事件
      • 空资金支付模拟响应
      • 预期支持的持仓模式
      • 资金信息模拟响应
      • 资金信息 URL
      • 资金支付 URL
      • 资金支付模拟响应
      • 配置失败的杠杆设置
      • 配置成功的杠杆设置
      • 完全成交 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
      • _initialize_trading_pair_symbols_from_exchange_info
      • _get_last_traded_price
    • 需要实现的 PerpetualDerivativePyBase 方法

      • 资金费率轮询间隔
      • 支持的持仓模式
      • 获取买入抵押品代币
      • 获取卖出抵押品代币
      • _create_order_book_data_source
      • _更新持仓
      • _设置交易对杠杆
      • _获取上次费用支付
    • 更新时间同步器

      • 测试时间同步器成功更新
      • _更新时间同步器
      • 测试时间同步器失败时被记录
      • 测试时间同步器引发取消错误
      • 测试时间同步器相关请求错误检测
    • 更新订单成交

      • 测试从交易更新订单成交触发成交事件
      • _从交易更新订单成交
      • 测试更新订单成交请求参数
      • 测试从交易更新订单成交时重复成交只触发一次事件
    • 更新订单状态

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

      • 测试订单失败时的用户流更新
      • _user_stream_event_listener
    • position_mode

      • 测试设置持仓模式失败
      • 测试设置持仓模式成功
    • funding_info

      • 测试监听资金费率信息更新初始化资金费率信息
      • 测试监听资金费率信息更新更新资金费率信息
      • 测试初始化资金费率信息
      • 测试资金费率信息轮询循环成功
      • 测试资金费率信息轮询循环引发异常
  • connector_name_api_keyconnector_name_api_secret 添加到 conf_global_TEMPLATE.yml