cross_exchange_market_making
¶
📁 策略信息¶
- 文件夹: /hummingbot/strategy/cross_exchange_market_making
- 配置: cross_exchange_market_making_config_map_pydantic.py
- 维护者: Hummingbot Foundation
📝 摘要¶
该策略也被称为流动性镜像或交易所再营销,它允许您在maker
交易所进行做市(创建买卖订单),同时在第二个taker
交易所对任何成交的交易进行对冲。该策略尝试以比 taker 订单宽min_profitability
的价差来放置 maker 订单。
🏦 支持的交易所类型¶
- SPOT CLOB CEX
- SPOT AMM DEX
🛠️ 策略配置¶
参数 | 类型 | 默认 | 提示 |
---|---|---|---|
maker_market |
string | 输入您的做市商现货连接器(交易所) | |
taker_market |
string | 输入您的吃单连接器(交易所/AMM) | |
maker_market_trading_pair |
string | 输入您希望在[maker_market] 上交易的代币交易对 |
|
taker_market_trading_pair |
string | 输入您希望在[taker_market] 上交易的代币交易对 |
|
min_profitability |
decimal | 您进行交易的最低盈利百分比是多少?(输入 1 表示 1%) | |
order_amount |
decimal | 每个订单的 base_asset 数量是多少? |
|
adjust_order_enabled |
bool | True | 您要启用调整订单吗?(是/否) |
order_refresh_mode |
string | active_order_refresh |
选择订单刷新模式 (passive_order_refresh / active_order_refresh )? |
passive_order_refresh: | |||
cancel_order_threshold |
decimal | 5 | 您要启用活跃订单取消吗? |
limit_order_min_expiration |
decimal | 130 | 您希望限价订单多久过期一次(以秒为单位)? |
top_depth_tolerance |
decimal | 0 | 您的顶部深度容差是多少?(以base_asset 为单位) |
anti_hysteresis_duration |
decimal | 60 | 您希望限价订单调整的最小时间间隔是多少?(以秒为单位) |
order_size_taker_volume_factor |
decimal | 25 | 您希望在 taker 市场上交易的可对冲交易量的百分比是多少?(输入 1 表示 1%) |
order_size_taker_balance_factor |
decimal | 99.5 | 您希望在 taker 市场上用于对冲交易的资产余额百分比是多少?(输入 1 表示 1%) |
order_size_portfolio_ratio_limit |
decimal | 16.67 | 您希望在 maker 和 taker 市场交易的总组合价值比率是多少?输入 50 表示 50% |
conversion_rate_mode |
string | rate_oracle_conversion_rate |
True |
fixed_conversion_rate: | |||
taker_to_maker_base_conversion_rate |
decimal | 1 | 您希望在 taker 市场上用于对冲交易的资产余额百分比是多少? |
taker_to_maker_quote_conversion_rate |
decimal | 1 | 您希望在 maker 市场上用于对冲交易的资产余额百分比是多少? |
slippage_buffer |
decimal | 5 | 您想在价格上增加多少缓冲来应对吃单订单的滑点? |
debug_price_shim |
bool | False | 您要为集成测试启用调试价格垫片吗?如果您不知道这是做什么的,应该保持禁用。 |
gateway_transaction_cancel_interval |
decimal | 600 | 如果区块链交易未包含在区块中,应在多长时间后取消?(这仅影响去中心化交易所)(以秒为单位输入时间) |
📓 描述¶
仅近似
以下是对该策略的总体近似描述。请检查上面的交易逻辑中的策略代码以确切了解其工作原理。
架构¶
跨交易所做市策略在两个市场之间执行做市交易:它向流动性较低、价差较大的市场发出限价订单;每当限价订单被击中时,它在流动性较高、价差较小的市场发出市价订单。这实际上是从流动性较高的市场向流动性较低的市场发送流动性。
在 Hummingbot 代码和文档中,我们通常将流动性较低的市场称为"maker 端"——因为跨交易所做市策略在此提供流动性。然后我们将流动性较高的市场称为"taker 端"——因为策略在此处获取流动性。
该策略目前支持 maker 端的中心化交易所和 taker 端的中心化和去中心化交易所。去中心化交易所通过 hummingbot 网关访问。
跨交易所做市策略的代码分为两个主要部分:
-
订单创建和调整
定期在 maker 端创建和调整限价订单。
-
对冲订单成交
每当挂单方订单成交时,在吃单方执行相反的对冲交易。
实时配置¶
该策略现在支持实时配置。这意味着用户的任何配置更改都会被策略立即采纳,无需重新启动。
订单创建和调整¶
这是订单创建和调整部分逻辑流程的高级视图。订单创建和调整的整体逻辑相当复杂,但大致可以分为取消订单流程和创建订单流程。
跨交易所做市策略通过定期取消旧订单(或等待现有订单过期)并创建新限价订单,定期刷新其在挂单方市场的限价订单。此过程确保其在挂单方的限价订单始终是正确且有利可图的价格。
此逻辑流程的入口点是 cross_exchange_market_making.pyx
中的 c_process_market_pair()
函数。
取消订单流程¶
取消订单流程定期监控挂单方的所有活动限价订单,以确保它们始终有效且有利可图。如果任何活动限价订单变得无效(例如由于资产余额发生变化)或变得无利可图(由于市场价格变化),则应该取消此类订单。
主动订单取消设置¶
active_order_canceling
设置会改变取消订单流程的运行方式。active_order_canceling
应在挂单方为集中式交易所(如 Binance、Coinbase Pro)时启用,而在挂单方为去中心化交易所时应禁用。
当启用 active_order_canceling
时,跨交易所做市策略会通过定期主动取消订单来刷新订单。这对于集中式交易所是最优的,因为它允许策略在市场价格发生重大变化时快速响应。不应为取消订单收取燃气费的去中心化交易所(如 Radar Relay)选择此选项。
当禁用 active_order_canceling
时,跨交易所做市策略会发出在预定义时间后自动过期的限价订单。这意味着策略只需等待它们过期以刷新挂单方订单,而无需主动取消它们。这对于去中心化交易所很有用,因为它避免了可能非常长的取消延迟,并且等待订单过期也不需要任何燃气费。
即使禁用 active_order_canceling
,策略仍可通过 cancel_order_threshold
设置主动取消订单。例如,您可以将其设置为 -0.05,这样当 DEX 上的限价订单盈利能力降至 -5% 以下时,策略仍会取消该限价订单。这可以作为安全开关,以防范去中心化交易所上突然且大幅的价格变化。
对冲是否盈利?¶
假设启用主动订单取消,策略对每个活动挂单方订单进行的第一次检查是它是否仍然盈利。订单当前盈利能力的计算假设订单立即在吃单方市场成交并进行对冲。
如果为挂单方订单计算的利润率小于 min_profitability
设置,则订单将被取消。
此检查的逻辑可在 cross_exchange_market_making.pyx
文件中的函数 c_check_if_still_profitable()
中找到。
否则,策略将进入下一个检查。
账户余额是否充足?¶
之后的下一个检查会验证是否有足够的资产余额来满足做市订单。如果交易所上没有足够的余额,订单将被取消。
此检查的逻辑可在 cross_exchange_market_making.pyx
文件中的函数 c_check_if_sufficient_balance()
中找到。
否则,策略将进入下一个检查。
价格是否正确?¶
做市方和吃单方的资产价格一直在变化,因此做市方限价订单的最优价格也会随时间变化。
跨交易所做市策略根据以下因素计算最优定价:
- 吃单方当前的市价订单价格。
- 做市方当前的订单簿深度。
- 应用于做市方订单簿深度的
top_depth_tolerance
设置。 - 应用于吃单方市价订单价格的
min_profitability
设置。
如果活动订单的价格与计算出的最优价格不同,则该订单将被取消。否则,策略将允许订单保留。
此检查的逻辑可在 cross_exchange_market_making.pyx
文件中的函数 c_check_if_price_correct()
中找到。
在对做市方所有活动订单进行检查后,策略将继续执行创建订单流程。
创建订单流程¶
在完成取消订单流程后,跨交易所做市策略将检查并重新创建做市方任何缺失的限价订单。
创建订单流程中的逻辑相对简单。它会检查做市方是否存在现有的买价和卖价订单。如果任何订单缺失,它将检查当前创建订单是否盈利。如果创建缺失订单有利可图,它将计算最优的定价和数量并创建这些订单。
创建订单流程的逻辑可在 cross_exchange_market_making.pyx
文件中的函数 c_check_and_create_new_orders()
中找到。
对冲订单成交¶
跨交易所做市策略将始终立即对冲做市方的任何订单成交,而不管此时对冲的盈利性如何。其理由是,对于用户而言,减少不必要的市场风险暴露比投机性地等待有利可图的对冲时机(可能永远不会到来)更有用。
对冲订单成交流程的逻辑可在 cross_exchange_market_making.py
文件中的函数 c_did_fill_order()
和 c_check_and_hedge_orders()
中找到。
去中心化交易所(网关)¶
与中心化交易所相比,去中心化交易所有几个特殊性,如果在吃单方选择了去中心化交易所,则必须考虑这些因素。首先,通常与去中心化交易所的交互不太可靠。与中心化交易所不同,例如从 DEX 获取资产价格可能会偶尔失败。因此,DEX 上的许多操作可能需要重复执行,直到成功为止。
另一个不同之处在于交易费用取决于当前的 gas 费用。因此,taker 交易费用可能会变化,因此对于相同的 maker 仓位,check_if_still_profitable()
方法执行的仓位盈利能力检查在不同时刻也可能返回不同的结果。
ℹ️ 更多资源¶
使用跨交易所做市 (XEMM) 策略降低风险:XMM 策略能有效降低库存风险。本文讨论了如何实施 XEMM。
跨交易所做市策略 | Hummingbot 直播:在这个视频中,Paulo 展示了如何使用 Hummingbot 应用优化跨交易所做市策略。
查看Hummingbot 学院以获取与此策略及其他策略相关的更多资源!