cross-exchange-mining¶
📁 策略信息¶
- 文件夹: /hummingbot/strategy/cross_exchange_mining
- 配置文件: cross_exchange_mining_config_map_pydantic.py
- 维护者: bsmeaton
📝 概述¶
跨交易所挖矿策略会在做市交易所上创建买卖限价单,其价差宽于吃单交易所的价差。当做市交易所的订单成交时,策略会在吃单交易所执行相应的资产平衡操作,以获得有利的价差(两个价差之差等于 min_profitability),从而实现利润。
该策略会持续追踪吃单交易所和做市交易所上的基础资产数量,以维持 order_amount,并不断寻求重新平衡和维持资产配置,从而降低用户在市场下跌或上涨时持有过多报价资产或基础资产的风险。
🏦 支持的交易所¶
- SPOT CLOB CEX
🛠️ 策略配置¶
| 参数 | 类型 | 默认值 | 是否提示新建? | 提示 | 
|---|---|---|---|---|
| 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数量是多少? | |
| slippage_buffer | 小数 | 5 | 是 | 为 taker 订单的价格增加多少缓冲以应对滑点? | 
| balance_adjustment_duration | 小数 | 5 | 是 | 连续两次投资组合再平衡之间的时间间隔是多少? | 
| min_prof_tol_low | 小数 | 0.05 | 是 | 你希望在低于最低盈利能力的百分比多少时取消已设置的订单? | 
| min_prof_tol_high | 小数 | 0.05 | 是 | 你希望在高于最低盈利能力的百分比多少时取消已设置的订单? | 
| volatility_buffer_size | 小数 | 120 | 是 | 用于计算波动率的时间周期(秒)是多少? | 
| min_prof_adj_timer | 小数 | 3600 | 是 | 基于过去 24 小时交易结果调整最低盈利能力的时间间隔是多少? | 
| min_order_amount | 小数 | 0 | 是 | 买卖限价单所需的最小订单数量是多少? | 
| rate_curve | 小数 | 1 | 是 | 基于过去 24 小时交易结果调整最低盈利能力的速率曲线乘数是多少? | 
| trade_fee | 小数 | 0.25 | 是 | 涵盖吃单和做市交易的完整交易手续费是多少? | 
📓 描述¶
该策略通过在吃单交易所和做市交易所之间维持“订单数量”的基础资产余额来运行。策略会在做市交易所设置买入或卖出限价单,这些订单仅在吃单交易所拥有足够报价资产或基础资产时才会创建,以便在做市交易所的限价单成交后,能够在吃单交易所完成或平衡交易。
当检测到基础资产失衡时,该策略可立即进行交易平衡。尽管在检测到失衡后吃单交易会立即执行,但后续的平衡操作至少会间隔 balance_adjustment_duration 变量所设定的时间,以确保余额已更新并记录完毕,避免因过早重试而导致错误。通过这种方式,策略将精确地在各交易所之间维持“订单数量”的基础货币余额:当基础货币过剩时卖出,短缺时买入。
该策略的盈利方式与跨交易所做市策略类似:在做市交易所设置较宽的价差,当订单成交时,用户可在吃单交易所以更低的价格买回基础货币(若做市交易所为卖出订单成交),或以更高的价格卖出基础货币(若做市交易所为买入订单成交)。这两笔交易之间的价格差应等于 min_profitability 变量。将此变量设为较高值,将因做市交易所价差扩大而导致成交次数减少,但每笔交易的盈利能力更高;反之亦然。
当订单设置的价差满足当时 min_profitability 变量时,系统将每 tick 监控该订单。由于吃单订单簿中的订单不断变化,交易的理论盈利能力会随时间波动,从而导致平衡已成交交易的成本持续变化。当盈利能力低于 min_profitability 减去 min_prof_tol_low 的阈值,或高于 min_profitability 加上 min_prof_tol_high 的阈值时,该订单将被取消并重新以 min_profitability 水平重置。
在此基本逻辑之外,策略运行期间还会对 min_profitability 数值进行领先和滞后调整。
短期,领先调整:
该策略会分析做市市场的当前波动率,以调整上述的 min_profitability 数值。该函数计算在长度为 volatility_buffer_size 的时间窗口内,货币对价格的标准差。随后,将该标准差转换为中位价上下三倍标准差的百分比,并将其加到 min_profitability 上。因此,更高的波动率或标准差将提高最小盈利能力,扩大价差,从而在波动时期降低风险。此调整将持续 volatility_buffer_size 的时间周期,除非计算出更高的波动率调整值,此时将采用更高的调整率并重置计时器。
长期,滞后调整:
该策略会分析此前完成的交易及平衡交易,以评估策略产生利润的成功率。若用户亏损,策略将扩大价差以降低 min_profitability;若交易过于盈利,则缩小价差以提高 min_profitability。这是因为策略旨在实现盈亏平衡的投资组合,以最大化挖矿奖励,故命名为 cross_exchange_mining。
策略会以 min_prof_adj_timer 为间隔读取用户 hummingbot/data 文件中的历史交易记录。当此函数被调用时,它会分析文件中过去 24 小时内记录的交易,并根据时间戳匹配构成完整平衡交易的已成交做市订单与吃单订单。
该策略在计算中使用 trade_fee 变量,以计入这些交易中支付给两个交易所的费用。计算结果返回过去 24 小时内完成的交易与平衡对的平均盈利能力。该数值随后被转换为调整值:0% 的盈利能力(基于订单金额)将导致 0 调整。
正或负的百分比将通过公式 (Percentage * rate_curve)**3 + min_profitability 转换为调整值。立方运算对大幅盈利或亏损施加指数级惩罚,从而在大幅盈利时显著降低 min_profitability,在大幅亏损时显著提高 min_profitability。变量 rate_curve 作为此调整的乘数,建议将其保持在 0.5–1.5 范围内;数值越高,先前交易对 min_profitability 调整的影响越大。
从个人角度来看,我多年来一直使用XEMM 策略,我选择这一策略的动机并非在于提升其盈利效率,而在于即使在剧烈的市场波动中,也能更可靠地维持基础资产的对冲头寸。该代码已完全重构自 XEMM 策略,旨在实现更合逻辑的流程,并移除那些我认为增加复杂性却未给用户带来任何益处的元素。
该策略适用于在做市方和吃单方的中心化交易所使用相同的交易对,策略通过市场交易在吃单方完成成交。
