cross_exchange_market_making¶
📁 策略信息¶
- 文件夹: /hummingbot/strategy/cross_exchange_market_making
- 配置文件: cross_exchange_market_making_config_map_pydantic.py
- 维护者: Hummingbot 基金会
📝 概述¶
该策略也被称为流动性镜像或交易所再营销,允许你在maker交易所挂出买卖订单进行做市,同时在第二个taker交易所对已成交的交易进行对冲。该策略尝试在 maker 交易所设置的价差比 taker 交易所宽出至少min_profitability的幅度。
🏦 支持的交易所类型¶
- SPOT CLOB CEX
- 现货 AMM DEX
🛠️ 策略配置¶
| 参数 | 类型 | 默认值 | 提示 | 
|---|---|---|---|
| maker_market | 字符串 | 请输入你的 maker 现货连接器(交易所) | |
| taker_market | 字符串 | 请输入你的 taker 连接器(交易所/AMM) | |
| maker_market_trading_pair | 字符串 | 请输入你希望在 [maker_market]上交易的代币交易对 | |
| taker_market_trading_pair | 字符串 | 请输入你希望在 [taker_market]上交易的代币交易对 | |
| min_profitability | 小数 | 你进行交易的最低盈利阈值是多少?(输入 1 表示 1%) | |
| order_amount | 小数 | 每笔订单的 base_asset数量是多少? | |
| adjust_order_enabled | 布尔值 | 是 | 是否启用订单调整功能?(是/否) | 
| order_refresh_mode | 字符串 | active_order_refresh | 请选择订单刷新模式( passive_order_refresh/active_order_refresh)? | 
| passive_order_refresh: | |||
| cancel_order_threshold | 小数 | 5 | 是否启用主动订单取消功能? | 
| limit_order_min_expiration | 小数 | 130 | 你希望限价单的过期时间间隔是多少秒? | 
| top_depth_tolerance | 小数 | 0 | 你的最高深度容差是多少?(以 base_asset为单位) | 
| anti_hysteresis_duration | 小数 | 60 | 你希望限价单调整的最短时间间隔是多少秒? | 
| order_size_taker_volume_factor | 小数 | 25 | 你希望在 taker 交易所交易的可对冲成交量占比是多少?(输入 1 表示 1%) | 
| order_size_taker_balance_factor | 小数 | 99.5 | 你希望在 taker 交易所用于对冲交易的资产余额占比是多少?(输入 1 表示 1%) | 
| order_size_portfolio_ratio_limit | 小数 | 16.67 | 你希望在 maker 和 taker 交易所合计交易的资产占总投资组合价值的比例是多少?输入 50 表示 50% | 
| conversion_rate_mode | 字符串 | rate_oracle_conversion_rate | 是 | 
| fixed_conversion_rate: | |||
| taker_to_maker_base_conversion_rate | 小数 | 1 | 你希望在 taker 交易所用于对冲交易的资产余额占比是多少? | 
| taker_to_maker_quote_conversion_rate | 小数 | 1 | 你希望在 maker 交易所用于对冲交易的资产余额占比是多少? | 
| slippage_buffer | 小数 | 5 | 为 taker 订单的价格增加多少缓冲以应对滑点? | 
| debug_price_shim | 布尔值 | False | 是否启用调试价格修正功能用于集成测试?如果你不了解其作用,建议保持禁用。 | 
| gateway_transaction_cancel_interval | 小数 | 600 | 区块链交易在未被打包进区块后,多久应被取消?(仅影响去中心化交易所)(以秒为单位输入) | 
📓 描述¶
仅为近似值
以下描述是对该策略的一般性近似说明。请查阅上方交易逻辑中的策略代码,以准确理解其工作原理。
架构¶
跨交易所做市策略在两个市场之间执行做市交易:它在流动性较低、价差较大的市场挂出限价单,并在限价单被成交时,在流动性更高、价差更小的市场发出市价单。这实际上将流动性从更流动的市场转移到了流动性较低的市场。
在 Hummingbot 的代码和文档中,我们通常将流动性较低的市场称为“做市端”——因为跨交易所做市策略在此处提供流动性;而将流动性较高的市场称为“吃单端”——因为策略在此处消耗流动性。
当前策略支持在做市端使用中心化交易所,在吃单端同时支持中心化和去中心化交易所。去中心化交易所通过 Hummingbot 网关进行访问。
跨交易所做市策略的代码分为两个主要部分:
- 
订单创建与调整 定期在做市端创建和调整限价订单。 
- 
对冲订单成交 每当做市端订单成交时,策略会在吃单端执行相反的对冲交易。 
实时配置¶
该策略现已支持实时配置。这意味着用户对配置所做的任何更改都会被策略立即采纳,无需重启策略。
订单创建与调整¶
以下是订单创建与调整部分的逻辑流程概览。整体订单创建与调整逻辑较为复杂,但可大致分为取消订单流程和创建订单流程。
跨交易所做市策略会定期通过取消旧订单(或等待现有订单过期)并创建新的限价订单,来刷新其在做市端市场的限价订单。这一过程确保了做市端的限价订单始终处于正确且盈利的价格水平。
该逻辑流程的入口是 cross_exchange_market_making.pyx 文件中的 c_process_market_pair() 函数。
取消订单流程¶
取消订单流程会定期监控做市端的所有活跃限价订单,确保它们始终有效且具有盈利能力。如果任何活跃限价订单变得无效(例如因资产余额变化)或不再盈利(由于市场价格变动),则应取消此类订单。
活跃订单取消设置¶
active_order_canceling 设置决定了取消订单流程的行为方式。当做市端为中心化交易所(如 Binance、Coinbase Pro)时,应启用 active_order_canceling;当做市端为去中心化交易所时,应禁用该设置。
当 active_order_canceling 启用时,跨交易所做市策略会通过定期主动取消订单来刷新订单。这对于中心化交易所最为理想,因为它允许策略在市场价格发生显著变化时快速响应。但对于收取取消订单 Gas 费用的去中心化交易所(如 Radar Relay),不应启用此选项。
当 active_order_canceling 禁用时,跨交易所做市策略将发出在预设时间后自动过期的限价订单。这意味着策略只需等待订单自然过期即可刷新做市端订单,而无需主动取消。这对于去中心化交易所非常有用,因为它避免了可能非常漫长的取消延迟,同时等待订单过期也不会产生任何 Gas 成本。
即使启用了 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() 中找到。
去中心化交易所(网关)¶
与中心化交易所相比,去中心化交易所具有若干特殊性,若在吃单方选择它们,则必须予以考虑。首先,总体而言与它们的交互可靠性较低。例如,与中心化交易所不同,从去中心化交易所获取资产价格有时会失败。因此,许多在去中心化交易所上的操作可能需要重复执行,直到成功完成为止。
另一个区别在于交易费用依赖于当前的汽油费(gas fee)。因此,吃单方的交易费用可能波动,导致在 check_if_still_profitable() 方法中执行的仓位盈利能力检查,对同一做市方仓位在不同时刻返回不同的结果。
ℹ️ 更多资源¶
使用交叉交易所做市(XEMM)策略降低风险:XEMM 策略能有效降低库存风险。本文将介绍如何实施 XEMM 策略。
交叉交易所做市策略 | Hummingbot Live:在这段视频中,Paulo 演示了如何使用 Hummingbot 应用优化交叉交易所做市策略。
了解更多与此策略及其他策略相关的资源,请访问 Hummingbot 学院!
