本文介绍一种基于聚合器套利的策略优化方案。整体思路是在同时请求多个不同数量的报价后,与 CEX 的最佳买卖报价(BBO)进行比对,选择近似的报价,然后在 DEX 上先发起交易,待 DEX 成交后再在 CEX 上执行对冲交易。当有头寸的时候可以通过调整报价参数来对冲头寸,以减少风险和手续费。


询价思路

  • 同时向聚合器请求相同币种不同价值的报价

    因为报价通常是比较耗时的的一个操作,往往是毫秒级的。通过提前拿到报价再来近似,比普通先通过cex bbo数量再来请求报价要快一点。

    这里报价的请求数量可更加偏低点。比如说我策略的最大下单量是500u,那么当我设定一个币同一个方向只有10个不同价位报价的时候,我们应该给更低价值的报价分配更多的金额。因为套利更多是吃盘口流动性,当然bbo出现低价值的maker单的情况会更多点。可以才用等比的方式。

    package main
    
    import (
        "fmt"
        "math"
    
        "github.com/davecgh/go-spew/spew"
    )
    
    
    func generateGeometricSequence(minValue, maxValue, numValues int) []float64 {
        // 使用对数来生成等比数列
        start := math.Log(float64(minValue))
        end := math.Log(float64(maxValue))
    
        // 在对数空间内生成均匀分布的数值
        logValues := make([]float64, numValues)
        for i := 0; i < numValues; i++ {
            logValues[i] = start + float64(i)*(end-start)/float64(numValues-1)
        }
        // 转换回普通数值
        values := make([]float64, numValues)
        for i := 0; i < numValues; i++ {
            values[i] = math.Exp(logValues[i])
        }
    
        // 确保最后一个值不超过最大值
        if values[numValues-1] > float64(maxValue) {
            values[numValues-1] = float64(maxValue)
        }
    
        return values
    }
    
    func main() {
        // 示例:生成从10到500之间的10个等比数值
        minValue := 10
        maxValue := 500
        numValues := 10
    
        values := generateGeometricSequence(minValue, maxValue, numValues)
    
        // 输出结果
        for _, v := range values {
            fmt.Printf("%.2f ", v)
        }
    }
    ///10.00 15.44 23.85 36.84 56.90 87.88 135.72 209.61 323.74 500.00
  • 将这些报价与 CEX 的 BBO 进行比较
  • 当发现近似的报价时,选择该报价进行后进行套利

    当价差大的时候可以考虑使用价值更大的报价以获得更高利润 。当利润一般的时候就选项更低价值的报价以减少cex滑点。

分步执行交易

  • 第一步: 在 DEX 上发送对应报价的tx
  • 第二步: 等待 DEX 成交后,再在 CEX 上发送对应的对冲交易

滑点问题及优化

由于 DEX 交易存在滑点风险,会导致实际成交价格与预期存在偏差,从而影响头寸。为此,策略中引入了以下优化思路:

DEX 买入 & CEX 卖出

  1. 基本原理

    • 在 DEX 买入时,获得的 币的 数量通常是一个预估值,不够精确;当部分聚合器提供准确输出的时候,可能走的dex数量不如选择准确输入的时候dex。换句话说,使用准确输入的聚合器选项可以获得更多的流动性。
    • 例如,当现在价格是0.1u的时候,想用 10U 在 DEX 上买入100个币,但实际成交可能会因滑点而偏低;
  2. 策略调整

    • 询价的时候dex买入的数量降低一定数量:

      • 因为cex下单存在tick的情况,假设cex的amount tick是0.5,当我下单10ubase的时候,实际上因为正滑点的影响我得到了99.7个base,那么我交易所对冲的时候是对冲99.5个base 那么就会有0.2个base头寸。如果我dex询价的数量是9.98u的base 那么实际上可能得到99.55个的base,头寸就小了。

DEX 卖出 & CEX 买入

  • DEX 卖出的 Base 数量是固定值,因此在 CEX 上可以完全等量对冲。
  • 这种模式下,不会出现头寸不平衡的问题。
  • 询价的时候根据当前头寸情况进行调整:

    如果链上钱包出现多头头寸的时候,报价的时候多报价对应头寸价值 。因为交易所一般是只有当平仓的时候可以不受到最低下单额度限制,并且保留tick限制。所以利用链上没有这些限制的机制,来及时的把多余的链上钱包头寸合并到一笔套利tx里面,既减少了头寸风险又减少了手续费。


总结

本文介绍了一种基于聚合器的套利策略优化方案,主要涉及以下几个关键点:

  1. 多报价请求与比对: 同时请求多个报价,并与 CEX 的 BBO 进行比较,选择最优报价进行操作。
  2. 头寸管理: 在 DEX 卖出与 CEX 买入时,根据当前头寸调整报价,利用链上灵活的头寸管理机制来减少风险。

此文章内容由云梦量化科技区块链开发工程师ethan创作投稿。


云梦量化科技
1 声望0 粉丝