Skip to main content
The Arbitrage Executor watches the same asset on two markets. When buying on one and selling on the other would be profitable after fees, it sends both orders at once as market orders. One executor makes one arbitrage trade.
Condor can’t create an arbitrage executor. None of its tools creates one, so agents and the Condor chat can’t use it. Create it through the Hummingbot API with POST /executors/, as shown below.

Overview

How it works

  1. On each update, the executor asks both markets what price it would get for order_amount: a buy on buying_market and a sell on selling_market. If the quote assets differ, it converts the sell price with the rate oracle.
  2. It computes the profitability: the gap between the two prices as a fraction of the buy price, minus the estimated fees on both sides as a fraction of order_amount.
  3. When the profitability is above min_profitability, it places a market buy on buying_market and a market sell on selling_market at the same time.
  4. When both orders have filled, it ends with close type COMPLETED.
It keeps waiting until the gap appears or you stop it. A failed order is placed again. After more than 10 failures (the retry limit the Hummingbot API gives every executor) it ends as FAILED.

Configuration

The two trading pairs must have the same base asset, or an interchangeable one. The base assets are the only part that is checked. Hummingbot treats these as interchangeable: ETH and WETH, BTC and WBTC, BNB and WBNB, POL and WPOL, AVAX and WAVAX, ONE and WONE, USDC and USDC.E, SOL and USOL, ETH and UETH, BTC and UBTC, and any two tokens whose names both contain USD.

Via the API

Buy 10 SOL on Binance and sell 10 SOL on KuCoin as soon as the gap is worth more than 0.4% after fees:
When it starts, the executor checks that the account holds at least order_amount of the base asset on the selling market, and enough quote on the buying market to buy order_amount. If not, it ends with INSUFFICIENT_BALANCE.

Close types

Stopping early

Stop the executor with POST /executors/{executor_id}/stop. It stops right away. keep_position only changes the close type: nothing is unwound either way, and nothing is added to the Position Hold.

What it reports

The executor’s custom_info includes buy_connector, sell_connector, buy_pair, sell_pair, the last quoted buy_price and sell_price, trade_pnl_pct (the gap), tx_cost_pct, profit_pct (the gap minus costs) and failures. Its net_pnl_quote is the sell proceeds minus the buy cost minus fees, and is reported only once the executor has completed.

Considerations

Learn more