Skip to main content
The XEMM Executor (cross-exchange market making) rests one limit order on a maker exchange, priced so that it is profitable against the price on a taker exchange. When the limit order fills, the executor immediately hedges it with a market order on the taker exchange. One executor makes one round trip.
Condor can’t create an XEMM 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

maker_side decides which market gets the limit order:
  1. The executor quotes the taker market for order_amount and estimates the fees on both sides.
  2. It places the limit order at the price that would earn target_profitability after those fees.
  3. While the order rests, it recalculates the profitability. If the net profitability drops below min_profitability or rises above max_profitability, it cancels the order and places a new one at the target.
  4. When the limit order fills, it sends a market order for order_amount on the taker market and stops once both orders are done.
The taker exchange must support market orders.

Configuration

The values must satisfy min_profitability ≤ target_profitability ≤ max_profitability, and min_profitability can’t equal max_profitability. The two trading pairs must have the same base asset, or an interchangeable one. 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. The quote assets may differ; the executor converts between them with the rate oracle.

Via the API

Rest a buy of 0.5 ETH on Binance priced for 0.2% profit against a market sell on KuCoin, re-pricing it when profitability leaves the 0.1% to 0.4% band:
The account needs funds for both orders: with maker_side: 1, quote on the buying market and base on the selling market. The executor checks both balances when it starts.

Close types

Stopping early

Stop the executor with POST /executors/{executor_id}/stop. The executor cancels a resting maker order and 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 the maker and taker connectors and pairs, maker_target_price, taker_price, trade_profitability, tx_cost_pct and net_profitability (trade profitability minus costs).

Learn more