永续合约连接器 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_key
和connector_name_api_secret
添加到conf_global_TEMPLATE.yml