现货连接器 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_name 的 connector 文件夹。
注意
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_name 的 test 文件夹。
在 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
 
-  
 
- REST
 
用户流数据源¶
- 
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
 
 
-  
 
- WEBSOCKET
 
交易所¶
- 
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_key和connector_name_api_secret添加到conf_global_TEMPLATE.yml
