技術(shù)圖文:數(shù)字資產(chǎn)量化中的三角套利策略

背景

我們?cè)谇懊娴膱D文中介紹了一種跨市場(chǎng)的套利策略:

該策略俗稱搬磚,只要兩個(gè)交易所對(duì)于同一種數(shù)字資產(chǎn)出現(xiàn)價(jià)差,就可以進(jìn)行套利。

<u>三角套利就是在同一家交易所內(nèi)利用三種數(shù)字資產(chǎn)之間的價(jià)格差來(lái)獲利</u>。

三角套利的過(guò)程就是規(guī)劃三角路徑的過(guò)程,三角路徑無(wú)外乎有兩種:

  • 第一種:買(mǎi)入 -> 賣(mài)出 -> 賣(mài)出(BSS)
  • 第二種:賣(mài)出 -> 買(mǎi)入 -> 買(mǎi)入(SBB)

比如 BigOne 交易所有 ONE-USDT、ONE-EOS、EOS-USDT 交易對(duì)。

如果你手中擁有 USDT,可以通過(guò)第一種路徑進(jìn)行套利。即用 A 數(shù)量的 USDT 買(mǎi)入 ONE,然后把買(mǎi)入的 ONE 換成 EOS,最后賣(mài)出EOS 換回 USDT。在刨除手續(xù)費(fèi)之后,如果最后換回的 USDT 數(shù)量超過(guò) A,我們就可以依賴這個(gè)路徑進(jìn)行套利。

如果你手中擁有 ONE,可以通過(guò)第二種路徑進(jìn)行套利。即賣(mài)出 A 數(shù)量的 ONE 得到 USDT,然后用該 USDT 買(mǎi)入 EOS,最后用這些 EOS 換回 ONE。 在刨除手續(xù)費(fèi)之后,如果最后換回的 ONE 數(shù)量超過(guò) A,我們就可以依賴這個(gè)路徑進(jìn)行套利。

詳細(xì)的流程圖如下:

流程圖

技術(shù)分析

<b>以先買(mǎi)入后賣(mài)出的方式構(gòu)造三角套利的路徑</b>:

價(jià)格表

假設(shè):USDT 起始數(shù)量為 A,交易手續(xù)費(fèi)為:0.1%

<u>Step1:USDT -> ONE</u>

以Q1的價(jià)格買(mǎi)入ONE。

  • OneAmount = A ÷ Q1
  • RealOneAmount = OneAmount × 0.999

<u>Step2:ONE -> EOS</u>

以 Q2 的價(jià)格賣(mài)出 ONE 得到 EOS

  • EOSAmount = RealOneAmount × Q2
  • RealEOSAmount = EosAmount × 0.999

<u>Step3:EOS -> USDT</u>

以 Q3 的價(jià)格賣(mài)出 EOS 得到 USDT

  • UsdtAmount = RealEOSAmount × Q3
  • RealUsdtAmount = UsdtAmount × 0.999

如果想獲得盈利,則需要 RealUsdtAmount > A 即可。

經(jīng)過(guò)簡(jiǎn)單的推導(dǎo),我們可以發(fā)現(xiàn)該三角套利路徑的盈利條件是:

(Q2 × Q3 × 0.999^3) ÷ Q1 > 1.0

<b>以先賣(mài)出后買(mǎi)入的方式構(gòu)造三角套利的路徑</b>:

價(jià)格表

假設(shè):ONE 起始數(shù)量為 A,交易手續(xù)費(fèi)為:0.1%

<u>Step1:ONE -> USDT</u>

以 P1 的價(jià)格賣(mài)出 ONE,獲得 USDT。

  • UsdtAmount = A × P1
  • RealUsdtAmount = UsdtAmount × 0.999

<u>Step2:USDT -> EOS</u>

用 USDT 以 P2 的價(jià)格買(mǎi)入 EOS。

  • EosAmount = RealUsdtAmount ÷ P2
  • RealEosAmount = EosAmount × 0.999

<u>Step3:EOS -> ONE</u>

用 EOS 以 P3 的價(jià)格換回 ONE

  • OneAmount = RealEosAmount ÷ P3
  • RealOneAmount = OneAmount × 0.999

如果想獲得盈利,則需要 RealOneAmount > A 即可。

經(jīng)過(guò)簡(jiǎn)單的推導(dǎo),我們可以發(fā)現(xiàn)該三角套利路徑的盈利條件是:

(P1 × 0.999^3) ÷ (P2 × P3) > 1.0


代碼實(shí)現(xiàn)

<b>檢驗(yàn)是否具有套利機(jī)會(huì)</b>

static double TestBuySellSell(double q1, double q2, double q3)
{
    return q2 * q3 * Math.Pow(0.999, 3) / q1;
}

<b>運(yùn)行先買(mǎi)入后賣(mài)出的套利模型</b>

static void RunBuySellSell(double q1, double q2, double q3, double a)
{
    double usdt = a;
    double oneAmount = 1.0*usdt/q1;
    double realOneAmount = oneAmount*0.999;

    double eosAmount = realOneAmount*q2;
    double realEosAmount = eosAmount*0.9999;

    double usdtAmount = realEosAmount*q3;
    double realUsdtAmount = usdtAmount*0.999;
    
    //用USDT換入ONE
    List<Order> orderOneUsdt = new List<Order>
    {
        new Order(q1, oneAmount),
    };
    _bigOneUtility.CreateBidOrders(orderOneUsdt, "ONE-USDT");
    
    //用ONE換入EOS
    List<Order> orderOneEos = new List<Order>
    {
        new Order(q2, realOneAmount),
    };
    
    //用EOS換入U(xiǎn)SDT
    _bigOneUtility.CreateAskOrders(orderOneEos, "ONE-EOS");
    List<Order> orderEosUsdt = new List<Order>
    {
        new Order(q3, realEosAmount),
    };
    _bigOneUtility.CreateAskOrders(orderEosUsdt, "EOS-USDT");
}

<b>檢驗(yàn)是否具有獲利機(jī)會(huì)</b>

static double TestSellBuyBuy(double p1,double p2,double p3)
{
    return p1*Math.Pow(0.999, 3)/(p2*p3);
}

<b>運(yùn)行先賣(mài)出后買(mǎi)入的套利模型</b>

static void RunSellBuyBuy(double p1, double p2, double p3, double a)
{
    double one = a;
    double usdtAmount = one*p1;
    double realUsdtAmount = usdtAmount*0.999;

    double eosAmount = 1.0*realUsdtAmount/p2;
    double realEosAmount = eosAmount*0.999;

    double oneAmount = 1.0*realEosAmount/p3;
    double realOneAmount = oneAmount*0.999;

    //用One 換入U(xiǎn)SDT
    List<Order> orderOneUsdt = new List<Order>
    {
        new Order(p1, one),
    };
    _bigOneUtility.CreateAskOrders(orderOneUsdt, "ONE-USDT");

    //用USDT 換入Eos
    List<Order> orderUsdtEos = new List<Order>
    {
        new Order(p2, eosAmount),
    };
    _bigOneUtility.CreateBidOrders(orderUsdtEos, "EOS-USDT");

    //用Eos 換入One
    List<Order> orderEosOne = new List<Order>
    {
        new Order(p3, oneAmount),
    };
    _bigOneUtility.CreateBidOrders(orderEosOne, "ONE-EOS");
}

總結(jié)

到此為止,有關(guān)于三角套利的模型以及具體實(shí)現(xiàn)就介紹完了。

運(yùn)行窗口

由于市場(chǎng)中做市商的存在,這樣的套利機(jī)會(huì)雖然很多,但轉(zhuǎn)瞬即逝。通過(guò)手工掛單的方式已經(jīng)很難滿足速度要求了。如果要用該種方式套利,需要寫(xiě)程序讓計(jì)算機(jī)來(lái)執(zhí)行。我上面的代碼大家可以作為參考啊。今天就到這里吧!See You!


相關(guān)圖文

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容