现货连接器 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_name
的 connector
文件夹。
注意
connector_name
= 连接器名称的小写形式,如适用则用下划线分隔。
-
不带下划线的示例:
binance
-
带下划线的示例:
crypto_com
在 connector folder
内创建以下文件:
- init.py
connector_name
_api_order_book_data_source.pyconnector_name
_api_user_stream_data_source.pyconnector_name
_auth.pyconnector_name
_constants.pyconnector_name
_exchange.pyconnector_name
_order_book.pyconnector_name
_utils.pyconnector_name
_web_utils.py- dummy.pxd
- dummy.pyx
测试¶
在 hummingbot/test/hummingbot/exchange 中创建名为 connector_name
的 test
文件夹 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
-
- REST
用户流数据源¶
-
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
-
-
- WEBSOCKET
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_key
和connector_name_api_secret
添加到conf_global_TEMPLATE.yml