跳至内容

配置模块

Hummingbot 的配置模块有助于引导初次运行交易机器人用户完成设置。它主要用于:- 汇总所有必需的核心配置变量。- 跳过或提供默认值,以避免高级或易使新用户困惑的配置项。- 收集并验证用户的输入作为配置值。- 在运行任何策略之前检查是否所有配置都已填写完整。

架构

目前,我们将所有配置变量分为三种不同类型。

配置类型 内存位置 是否保存到本地 yml 文件 描述
in_memory hummingbot/client/config/in_memory_config_map.py 从不保存的配置,每次启动时都会重新提示(目前只有 strategystrategy_config_path 属于此配置映射)。
global hummingbot/client/config/global_config_map.py 与策略无关的配置,例如交易所 API 密钥、钱包选择等。
策略 hummingbot/strategy/{STRATEGY_NAME}/{STRATEGY_NAME}_strategy_config_map.py 特定策略的配置。

默认配置流程

  1. 当机器人启动时,会自动从名为 conf_global.yml 的文件中读取所有全局配置。如果该文件不存在,则会从 hummingbot/templates/conf_global_TEMPLATE.yml 复制一个空模板。机器人将此前保存在 yml 文件中的值填充到 hummingbot/client/config/global_config_map.py 中的 global_config_map 对象中。
  2. 当用户输入 config 命令时,机器人会提示用户填写 in_memory_config_map 中的所有项目。
  3. 一旦用户输入了她想要使用的策略,她可以选择 import(导入)或 create(创建)一个配置文件。
    • 如果选择 import,用户将被提示选择一个策略配置文件。机器人会加载所有变量值并将其保存在内存中。
    • 如果选择 create,机器人会从 hummingbot/templates/conf_{STRATEGY_NAME}_strategy_{COUNT}.yml 复制一个策略配置模板。然后用户需要逐项填写该策略所需的所有配置。
  4. 对于每个用户输入,机器人将使用自定义校验器验证输入(更多细节见 ConfigVar 类)。如果输入无效,系统会再次提示相同的问题。
  5. 在所有策略配置填写完成后,机器人会根据新获取的信息确定哪些变量是全局配置中所需的(例如需要提示哪些交易所的 API 密钥等)。
  6. 由于更改某些变量可能会触发对其他变量的需求,因此这个提示和配置过程会循环进行,直到所有变量都填写完整为止。
  7. 当循环结束时,机器人会将内存中保存的所有配置变量写入本地 yml 文件,以便在下次会话中重复使用。
  8. 随后,用户即可使用当前内存中存储的配置集开始运行所选策略。

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

配置定义规范

  1. 始终将会影响依赖状态的配置项放在前面。例如:telegram_token 只有在 telegram_enabled 设置为 True 时才需要。因此 telegram_enabled 应该排在 telegram_token 之前。
  2. 对于特定交易所的配置,请使用 using_exchange("exchange_name") 作为 required_if 的条件。
  3. 编写提示问题时,务必添加示例以提升用户体验。
  4. 当提示输入布尔值时,请添加 (是/否) 选项,以便用户知道应输入什么内容。
  5. 当问题的答案为有限选项时(例如 ["import", "create", 等]),请确保将所有选项以 (选项 1/选项 2/选项 3) 的格式列出。此格式可被我们的自动补全系统识别,用户可通过按下 Tab 键自动填充选项。
  6. 在提示输入交易所名称时,请确保在提示文本中包含“exchange name”、“name of exchange”或“name of the exchange”(不区分大小写,例如 Exchange Name 是有效的),我们的自动补全系统将列出并自动填充我们系统支持的交易所名称。