跳至内容

核心概念

策略文件夹

每个策略都包含在独立的文件夹中,文件夹名称即为策略名称:

  • __init__.py
    该文件通过将策略对象放入 __all__ 字段中,允许将某些变量暴露给包内的所有模块。
  • {strategy name}.pxd
    该文件包含在 {strategy name}.pyx 文件中指定的一些变量的类型声明。
  • {strategy name}.pyx
    该文件包含定义策略行为的主要函数。__init__ 函数用于定义在 {strategy name}.pxd 文件中声明的变量,并初始化从 StrategyBase 类继承的字段。其他所有函数都可以根据开发者希望实现的行为进行自定义。其中特别重要的一个函数是 format_status(),因为该函数决定了在客户端调用 status 时渲染哪些数据。
  • {strategy name}_config_map.py
    该文件负责在调用策略时向用户提示配置值。config_map 的每个键值都分配了一个 ConfigVar,开发者可以在其中指定提示语并添加验证器以检查可接受的值。
  • start.py
    当用户在客户端调用策略时,会执行 start() 函数。该函数应处理通过调用 config_map 来初始化配置、设置市场名称和钱包,并最终执行策略。

StrategyBase 类

所有策略都继承自 StrategyBase 类。该类提取了原本会在所有策略中重复编写的逻辑。

  • 事件监听器:客户端的提示最终通过事件监听器帮助在服务器上产生变化。根据客户端采取的操作,相应的事件监听器会被调用来执行适当的任务。
  • 数据帧:基类负责创建市场状态的数据帧 market_status_data_frame() 和钱包余额的数据帧 wallet_balance_data_frame(),使开发者能够轻松地创建和访问特定市场的信息。

基类还包含一些方法,这些方法在创建新策略时需要重新实现。

  • logger():为策略会话设置日志记录器
  • format_status():定义将在 Hummingbot 客户端渲染的状态格式

为了协助开发自定义策略,提供了许多可重写的函数,用于响应 EventListeners 检测到的各种事件。

  • c_did_create_buy_order():响应 order_created_event 调用
  • c_did_create_sell_order():响应 order_created_event 调用
  • c_did_fill_order():响应 order_filled_event 调用
  • c_did_fail_order():响应 order_failed_event 调用
  • c_did_cancel_order():在收到 cancelled_event 时被调用
  • c_did_expire_order():在收到 expired_event 时被调用
  • c_did_complete_buy_order():在收到 order_completed_event 时被调用
  • c_did_complete_sell_order():在收到 order_completed_event 时被调用
  • c_did_fail_order_tracker():在收到 order_failed_event 时被调用
  • c_did_cancel_order_tracker():在收到 order_cancelled_event 时被调用
  • c_did_expire_order_tracker():在收到 order_expired_event 时被调用
  • c_did_complete_buy_order_tracker():在收到 order_completed_event 时被调用
  • c_did_complete_sell_order_tracker():在收到 order_completed_event 时被调用

市场类

ExchangeBase 包含可重写的函数,可用于获取策略所运行交易所的基本信息,包括交易对的余额、价格和订单簿等。

  • c_buy():当用户想要下单买入时被调用
  • c_sell():当用户想要下单卖出时被调用
  • c_cancel():当用户想要取消订单时被调用
  • c_get_balance():用于获取用户的资产余额
  • c_get_available_balance():用于获取用户的可用资产余额
  • c_withdraw():当用户想要提现资产时被调用
  • c_get_order_book():用于获取特定资产的订单簿
  • c_get_price():用于获取特定资产的价格
  • c_get_order_price_quantum():用于获取订单价格的最小单位
  • c_get_order_size_quantum():用于获取订单数量的最小单位
  • c_quantize_order_price():用于将订单价格按最小单位进行量化
  • c_quantize_order_amount():用于将订单数量按最小单位进行量化
  • c_get_fee():用于获取交易所收取的手续费

此外,该策略利用了 OrderTracker 监听器对象,以检查买卖订单是否已成交或完成、用户是否有足够的余额下单,以及是否存在订单取消情况。同时使用 HummingbotLogger 对象在特定事件发生时记录日志。

配置

重要命令

Hummingbot 客户端中的重要命令:

  • status :显示当前策略和市场的相关信息。可通过 {strategy name}.pyx 文件中的 format_status() 函数自定义显示内容
  • config :提示用户输入策略配置的详细信息(例如代币、市场名称等)。可在 {strategy name}_config_map.py 文件中修改提示内容

向 Hummingbot 客户端暴露新策略

策略名称会在 hummingbot/client/settings.py 文件中的 STRATEGIES 变量下自动对客户端公开。在 hummingbot/templates 目录中还应存在一个包含配置变量及其说明的模板文件。该 yml 文件的命名规范为 conf_{strategy name}_TEMPLATE

设置策略参数的问题提示

可以在 config_map 文件中设置策略参数。每个参数(以字典键表示)都映射到一个 ConfigVar 类型,开发者可在其中指定参数名称、提供给用户的问题提示,以及用于检查输入值的验证器。