配置模块¶
Hummingbot 的配置模块有助于引导初次运行交易机器人用户完成设置。它主要用于:- 汇总所有必需的核心配置变量。- 跳过或提供默认值,以避免高级或易使新用户困惑的配置项。- 收集并验证用户的输入作为配置值。- 在运行任何策略之前检查是否所有配置都已填写完整。
架构¶
目前,我们将所有配置变量分为三种不同类型。
| 配置类型 | 内存位置 | 是否保存到本地 yml 文件 | 描述 |
|---|---|---|---|
in_memory |
hummingbot/client/config/in_memory_config_map.py |
否 | 从不保存的配置,每次启动时都会重新提示(目前只有 strategy 和 strategy_config_path 属于此配置映射)。 |
global |
hummingbot/client/config/global_config_map.py |
是 | 与策略无关的配置,例如交易所 API 密钥、钱包选择等。 |
策略 |
hummingbot/strategy/{STRATEGY_NAME}/{STRATEGY_NAME}_strategy_config_map.py |
是 | 特定策略的配置。 |
默认配置流程¶
- 当机器人启动时,会自动从名为
conf_global.yml的文件中读取所有全局配置。如果该文件不存在,则会从hummingbot/templates/conf_global_TEMPLATE.yml复制一个空模板。机器人将此前保存在 yml 文件中的值填充到hummingbot/client/config/global_config_map.py中的global_config_map对象中。 - 当用户输入
config命令时,机器人会提示用户填写in_memory_config_map中的所有项目。 - 一旦用户输入了她想要使用的策略,她可以选择
import(导入)或create(创建)一个配置文件。- 如果选择
import,用户将被提示选择一个策略配置文件。机器人会加载所有变量值并将其保存在内存中。 - 如果选择
create,机器人会从hummingbot/templates/conf_{STRATEGY_NAME}_strategy_{COUNT}.yml复制一个策略配置模板。然后用户需要逐项填写该策略所需的所有配置。
- 如果选择
- 对于每个用户输入,机器人将使用自定义校验器验证输入(更多细节见 ConfigVar 类)。如果输入无效,系统会再次提示相同的问题。
- 在所有策略配置填写完成后,机器人会根据新获取的信息确定哪些变量是全局配置中所需的(例如需要提示哪些交易所的 API 密钥等)。
- 由于更改某些变量可能会触发对其他变量的需求,因此这个提示和配置过程会循环进行,直到所有变量都填写完整为止。
- 当循环结束时,机器人会将内存中保存的所有配置变量写入本地
yml文件,以便在下次会话中重复使用。 - 随后,用户即可使用当前内存中存储的配置集开始运行所选策略。
ConfigVar 类¶
ConfigVar 类位于 hummingbot/client/config/config_var.py,它通过一组属性来标准化每个配置项。
| 属性 | 属性类型 | 用途 |
|---|---|---|
key |
str | 用于标识配置变量的唯一键。 |
prompt |
str 或 callable | 在客户端中显示的问题,当机器人收集此配置项的用户输入时使用。你可以通过传入一个函数而非静态字符串,在运行时动态修改该字符串。 |
is_secure |
布尔值 | 布尔值,表示用户输入是否需要以 "***" 进行掩码隐藏。 |
default |
任意类型 | 当用户未输入时,该变量的默认值。 |
type_str |
str | 取值为 {"str", "list", "dict", "float", "int", "bool"} 中的一个,默认为 "str"。该字段被 parse_cvar_value 用于将用户输入解析为正确的数据类型。 |
required_if |
callable | 一个条件检查函数,用于判断在配置流程中是否需要提示用户输入此项配置。 |
validator |
callable | 一个条件检查函数,用于判断用户输入是否为该配置项的有效值。 |
on_validated |
callable | 一个回调函数钩子,当输入通过验证后触发(例如:当输入了有效的 DEX 名称后,将钱包需求设置为 True)。 |
更多详情请查看 hummingbot/client/config/config_var.py。
配置定义规范¶
- 始终将会影响依赖状态的配置项放在前面。例如:
telegram_token只有在telegram_enabled设置为 True 时才需要。因此telegram_enabled应该排在telegram_token之前。 - 对于特定交易所的配置,请使用
using_exchange("exchange_name")作为required_if的条件。 - 编写提示问题时,务必添加示例以提升用户体验。
- 当提示输入布尔值时,请添加
(是/否)选项,以便用户知道应输入什么内容。 - 当问题的答案为有限选项时(例如
["import", "create", 等]),请确保将所有选项以(选项 1/选项 2/选项 3)的格式列出。此格式可被我们的自动补全系统识别,用户可通过按下Tab键自动填充选项。 - 在提示输入交易所名称时,请确保在提示文本中包含“exchange name”、“name of exchange”或“name of the exchange”(不区分大小写,例如 Exchange Name 是有效的),我们的自动补全系统将列出并自动填充我们系统支持的交易所名称。