AMM-arbitrage
1. 參數(shù)
| 策略運(yùn)行參數(shù) | 含義 |
|---|---|
| market_info_1 | 第一個(gè)市場(chǎng) |
| market_info_2 | 第二個(gè)市場(chǎng) |
| min_profitability | 執(zhí)行交易的最低盈利能力(例如 0.0003 為 0.3%) |
| order_amount | 訂單金額 |
| market_1_slippage_buffer | 市場(chǎng) 1 的滑點(diǎn)緩沖區(qū)。調(diào)整訂單價(jià)格以提高訂單成交幾率的緩沖區(qū)。 買(mǎi)入訂單中調(diào)高(1+percent),在賣出訂單中調(diào)低(1-percent)。 |
| market_2_slippage_buffer | 市場(chǎng) 2 的滑點(diǎn)緩沖區(qū) |
| concurrent_orders_submission | 是否同時(shí)提交兩個(gè)套利接受者訂單(買(mǎi)入和賣出)如果為 false,機(jī)器人將等待第一個(gè)交易訂單填寫(xiě),然后再提交另一個(gè)訂單。 |
| status_report_interval | 等待刷新?tīng)顟B(tài)的秒數(shù) |
| rate_source | 代幣之間轉(zhuǎn)換率的來(lái)源 |
| 策略配置參數(shù) | 含義 |
|---|---|
| connector 1 | 第一個(gè)要交易的交易所或者 AMM 協(xié)議 |
| market_1 | 第一個(gè)要和另一個(gè)交易所套利的幣對(duì) |
| connector 2 | 第二個(gè)要交易的交易所或者 AMM 協(xié)議 |
| market_2 | 第二個(gè)要和另一個(gè)交易所套利的幣對(duì) |
| order_amount | 第一個(gè)交易對(duì)使用的買(mǎi)單的訂單金額 |
| min_profitability | 交易執(zhí)行的最小利潤(rùn)率,不足則不會(huì)執(zhí)行 |
| market_1_slippage_buffer | 對(duì)于市場(chǎng) 1 交易執(zhí)行之前允許的價(jià)格變動(dòng)緩沖帶 |
| market_2_slippage_buffer | 對(duì)于市場(chǎng) 2 交易執(zhí)行之前允許的價(jià)格變動(dòng)緩沖帶 |
| concurrent_orders_submission | 是否同時(shí)下單 |
| manual_gas_price | 手動(dòng)設(shè)置 gas 費(fèi) |
2. 套利提案的生命周期
2.1 創(chuàng)建套利提案
套利方案列表,包含兩個(gè)套利方案[(market_1 buy, market_2 sell) , (market_1 sell, market_2 buy)]每個(gè)套利提案有兩個(gè)side: (first_side , second_side)
2.2 計(jì)算套利提案預(yù)計(jì)盈利
計(jì)算套利預(yù)計(jì)收益有以下幾組參數(shù)
- base 幣種買(mǎi)賣市場(chǎng)匯率
sell_quote_to_buy_quote_rate(在此策略下可以取常數(shù) 1)& quote 幣種買(mǎi)賣市場(chǎng)匯率sell_base_to_buy_base_rate - buy_side 手續(xù)費(fèi)
buy_fee_amount&sell_side 手續(xù)費(fèi)sell_fee_amount - 買(mǎi)入花費(fèi)數(shù)量
buy_spent_net& 賣出獲得數(shù)量sell_gained_net - 以買(mǎi)入市場(chǎng)計(jì)算的賣出獲得數(shù)量
sell_gained_net_in_buy_quote_currency -
result預(yù)計(jì)利潤(rùn)率
預(yù)計(jì)利潤(rùn)計(jì)算公式
base 和 quote 幣種買(mǎi)賣市場(chǎng)之間匯率
sell_base_to_buy_base_rate = 1 (套利策略使用固定值為 1)
sell_quote_to_buy_quote_rate = 從 RateOracle 獲取 sell_quote到 buy_quote 的匯率 或者 固定值
如果收取的手續(xù)費(fèi)是 quote 幣種則要轉(zhuǎn)換為 base 幣種來(lái)計(jì)算
buy_fee_amount = (price * order_amount) * percent + 固定手續(xù)費(fèi)(可能為 0)
sell_fee_amount = (price * order_amount) * percent + 固定手續(xù)費(fèi)(可能為 0)
購(gòu)買(mǎi)花費(fèi)的數(shù)量
buy_spent_net = (buy.amount * buy.quote_price) + buy_fee_amount
賣出獲得的數(shù)量
sell_gained_net = (sell.amount * sell.quote_price) - sell_fee_amount
把賣市場(chǎng)轉(zhuǎn)移到買(mǎi)市場(chǎng)來(lái)計(jì)算可能的收益,兩個(gè)市場(chǎng) base 和 quote 的匯率不同,賣市場(chǎng)賣出1個(gè)quote獲得的賣base數(shù),相當(dāng)于在買(mǎi)市場(chǎng)賣出 sell_quote_to_buy_quote_rate 個(gè)quote獲得的賣base數(shù),考慮到買(mǎi)賣市場(chǎng)的 base 之間可能也有匯率 要轉(zhuǎn)換成買(mǎi)市場(chǎng) base 數(shù)
sell_gained_net_in_buy_quote_currency = (sell_gained_net * sell_quote_to_buy_quote_rate / sell_base_to_buy_base_rate)
在buy_side市場(chǎng)的利潤(rùn)率
result = (sell_gained_net_in_buy_quote_currency - buy_spent_net) / buy_spent_net
如果通過(guò)上述公式計(jì)算出result > min_profitability則代表存在套利空間,此提案會(huì)繼續(xù)執(zhí)行。
2.3 處理滑點(diǎn)buffer
處理滑點(diǎn)是通過(guò)修改提案的價(jià)格來(lái)實(shí)現(xiàn)的,根據(jù)配置項(xiàng)目的 market_1_slippage_buffer,market_2_slippage_buffer來(lái)計(jì)算買(mǎi)賣雙方的下單價(jià)格,買(mǎi)方的價(jià)格=買(mǎi)方價(jià)格*(1+market_1_slippage_buffer),賣方的價(jià)格=賣方價(jià)格*(1-market_2_slippage_buffer)
2.4 處理預(yù)算限制
如果沒(méi)有足夠的余額來(lái)提交具有所需訂單金額的訂單,則通過(guò)將提案金額設(shè)置為 0 來(lái)更新 arb_proposals。
遍歷提案列表,檢查每個(gè)提案的兩個(gè) side,取得 side 中的 quote 或者 base 幣種,調(diào)用 get_available_balance 行情接口查詢余額,然后計(jì)算需要的余額是否能夠覆蓋需要的金額,如果一個(gè)side 的需求余額不能被覆蓋,則 side 的 amount 會(huì)被更新為 0。
2.5 執(zhí)行交易
執(zhí)行交易有兩種執(zhí)行模式,一種是同時(shí)執(zhí)行,另一種是先執(zhí)行一個(gè)等待執(zhí)行完畢之后再執(zhí)行另一個(gè)。這個(gè)取決于配置,如果 concurrent_orders_submission 為 False,它將在提交第二個(gè)訂單之前等待第一個(gè)訂單完成。
3. 總體執(zhí)行流程
