核心概念
策略文件夹¶
每个策略都包含在独立的文件夹中,文件夹名称即为策略名称:
- __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 类型,开发者可在其中指定参数名称、提供给用户的问题提示,以及用于检查输入值的验证器。