跳转至内容

cross_exchange_market_making

📁 策略信息

📝 摘要

该策略也被称为流动性镜像交易所再营销,它允许您在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 网关访问。

跨交易所做市策略的代码分为两个主要部分:

  1. 订单创建和调整

    定期在 maker 端创建和调整限价订单。

  2. 对冲订单成交

    每当挂单方订单成交时,在吃单方执行相反的对冲交易。

实时配置

该策略现在支持实时配置。这意味着用户的任何配置更改都会被策略立即采纳,无需重新启动。

订单创建和调整

这是订单创建和调整部分逻辑流程的高级视图。订单创建和调整的整体逻辑相当复杂,但大致可以分为取消订单流程创建订单流程

跨交易所做市策略通过定期取消旧订单(或等待现有订单过期)并创建新限价订单,定期刷新其在挂单方市场的限价订单。此过程确保其在挂单方的限价订单始终是正确且有利可图的价格。

Figure 1: Order creation and adjustment flow chart

此逻辑流程的入口点是 cross_exchange_market_making.pyx 中的 c_process_market_pair() 函数。

取消订单流程

取消订单流程定期监控挂单方的所有活动限价订单,以确保它们始终有效且有利可图。如果任何活动限价订单变得无效(例如由于资产余额发生变化)或变得无利可图(由于市场价格变化),则应该取消此类订单。

Figure 2: Cancel order flow chart

主动订单取消设置

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() 中找到。

否则,策略将进入下一个检查。

价格是否正确?

做市方和吃单方的资产价格一直在变化,因此做市方限价订单的最优价格也会随时间变化。

跨交易所做市策略根据以下因素计算最优定价:

  1. 吃单方当前的市价订单价格。
  2. 做市方当前的订单簿深度。
  3. 应用于做市方订单簿深度的 top_depth_tolerance 设置。
  4. 应用于吃单方市价订单价格的 min_profitability 设置。

如果活动订单的价格与计算出的最优价格不同,则该订单将被取消。否则,策略将允许订单保留。

此检查的逻辑可在 cross_exchange_market_making.pyx 文件中的函数 c_check_if_price_correct() 中找到。

在对做市方所有活动订单进行检查后,策略将继续执行创建订单流程。

创建订单流程

在完成取消订单流程后,跨交易所做市策略将检查并重新创建做市方任何缺失的限价订单。

Figure 3: Cancel order flow chart

创建订单流程中的逻辑相对简单。它会检查做市方是否存在现有的买价和卖价订单。如果任何订单缺失,它将检查当前创建订单是否盈利。如果创建缺失订单有利可图,它将计算最优的定价和数量并创建这些订单。

创建订单流程的逻辑可在 cross_exchange_market_making.pyx 文件中的函数 c_check_and_create_new_orders() 中找到。

对冲订单成交

跨交易所做市策略将始终立即对冲做市方的任何订单成交,而不管此时对冲的盈利性如何。其理由是,对于用户而言,减少不必要的市场风险暴露比投机性地等待有利可图的对冲时机(可能永远不会到来)更有用。

Figure 4: Hedging order fills flow chart

对冲订单成交流程的逻辑可在 cross_exchange_market_making.py 文件中的函数 c_did_fill_order()c_check_and_hedge_orders() 中找到。

去中心化交易所(网关)

与中心化交易所相比,去中心化交易所有几个特殊性,如果在吃单方选择了去中心化交易所,则必须考虑这些因素。首先,通常与去中心化交易所的交互不太可靠。与中心化交易所不同,例如从 DEX 获取资产价格可能会偶尔失败。因此,DEX 上的许多操作可能需要重复执行,直到成功为止。

另一个不同之处在于交易费用取决于当前的 gas 费用。因此,taker 交易费用可能会变化,因此对于相同的 maker 仓位,check_if_still_profitable() 方法执行的仓位盈利能力检查在不同时刻也可能返回不同的结果。

ℹ️ 更多资源

什么是跨交易所做市?

与 Jelle 共同探讨跨交易所做市

使用跨交易所做市 (XEMM) 策略降低风险:XMM 策略能有效降低库存风险。本文讨论了如何实施 XEMM。

跨交易所做市策略 | Hummingbot 直播:在这个视频中,Paulo 展示了如何使用 Hummingbot 应用优化跨交易所做市策略。

查看Hummingbot 学院以获取与此策略及其他策略相关的更多资源!