Gross and Net Spread: How to Assess the Potential of an Arbitrage Trade
#arbitrage#spread
The spread is the difference between the prices of one asset, or of contracts on it, in two markets. In cross-exchange arbitrage, this difference helps assess the terms for opening and closing a bundle.
Spread = (higher price − lower price) ÷ lower price × 100%
(102 − 100) ÷ 100 × 100% = 2%
But the same formula can give results with different meanings. It all depends on which prices you use: last trade prices, the best offers in the order books, or the weighted average execution prices of a specific lot.
In this article we look at how a difference in quotes turns into the estimated potential of a bundle with a long and a short.
Spread from last prices
The last price is the result of a trade that has already taken place between market participants.
Accordingly, the spread from last prices shows the difference formed by past trades on two venues. It does not reflect the prices at which your lot can be executed right now.
Suppose the last trades went through:
- on exchange A — at 100 USDT;
- on exchange B — at 102 USDT.
The difference is 2%. However, the orders those trades were made against may have been filled completely. A new purchase or sale will go through at other available offers.
To assess the execution terms, you need to look at the current orders and the available volumes.
Spread from order books
An order book shows the current orders of market participants: at what prices and in what volume they are ready to buy or sell the instrument.
An order book has two sides:
- ask — sellers' orders, against which you can buy;
- bid — buyers' orders, against which you can sell.
When you open a long, you buy the instrument; when you open a short, you sell it. So to calculate the entry spread, you compare the sellers' offers on one exchange with the buyers' offers on the other.
However, comparing only the best prices is not enough. The best level may hold only part of your lot. The rest of the volume will have to be executed at the next levels of the order book.
Why lot size changes the spread
Suppose you are going to open a long and a short of 10 coins each in contract equivalent.
| Price | Available volume |
|---|---|
| 99 USDT | 5 coins |
| 101 USDT | 5 coins |
| Price | Available volume |
|---|---|
| 103 USDT | 5 coins |
| 101 USDT | 5 coins |
(103 − 99) ÷ 99 × 100% ≈ 4.04%
But buying at 99 and selling at 103 USDT is possible for only 5 coins. Your lot is twice as large, so each operation will touch two price levels.
To find the spread for the whole lot, you first need to calculate the weighted average price of each leg.
How the weighted average price is calculated
The weighted average price takes into account what part of the lot is executed at each price.
Weighted average price = sum of price × volume at each level ÷ total volume
(99 × 5 + 101 × 5) ÷ 10 = 100 USDT
(103 × 5 + 101 × 5) ÷ 10 = 102 USDT
So the whole lot can be bought at an average of 100 USDT and sold at an average of 102 USDT.
If the last level used holds more volume than needed, only the required part of it is included in the calculation.
The larger the lot, the more levels it may touch and the further the weighted average prices may move away from the best offers.
If there are not enough orders for the whole lot, its full execution cannot be calculated from the current order book. This happens mostly in low-liquidity markets and with large lots.
Gross spread: the price difference before fees
The gross spread is the difference between the weighted average execution prices of the chosen lot, before trading fees.
Gross spread = (average sell price − average buy price) ÷ average buy price × 100%
(102 − 100) ÷ 100 × 100% = 2%
Comparing the best prices showed 4.04%, but for the full lot of 10 coins the gross spread is 2%.
The difference is explained by the volumes available at the price levels. It is already included in the weighted average prices — there is no need to subtract it again as separate “slippage on volume”.
When calculating a trading bundle, it is also important to keep the direction: on which leg we buy and on which we sell. The formula with the higher and the lower price shows the size of the gap, but on its own it does not tell a favourable direction from an unfavourable one.
Entry spread and exit spread
Opening and closing a bundle use different sides of the order books:
| Bundle leg | Entry | Exit |
|---|---|---|
| Long | Buy at ask | Sell at bid |
| Short | Sell at bid | Buy at ask |
So the exit spread cannot be calculated from the same orders as the entry spread. For the volume being closed, the weighted average prices of selling the long and buying back the short have to be calculated separately.
In a convergence strategy, the trader opens the bundle at a wider spread and closes it at a narrower one.
- entry spread — 2%;
- target exit spread — 0.5%;
- difference between the levels — 1.5 percentage points.
This is a preliminary estimate of the potential of the spread's movement before fees. The entry spread on its own is not yet an earned profit.
Net spread: entry, exit and fees
To assess the potential of the whole trade, you need to account for the fees of four operations:
- Opening the long.
- Opening the short.
- Closing the long.
- Closing the short.
Net trade spread ≈ entry spread − exit spread − fees of both legs on entry and exit
Suppose the entry is planned at a 2% spread, the exit at 0%, and the fee for each operation is 0.05%.
| Item | Value |
|---|---|
| Entry spread | 2% |
| Exit spread | 0% |
| Fee for opening the long | 0.05% |
| Fee for opening the short | 0.05% |
| Fee for closing the long | 0.05% |
| Fee for closing the short | 0.05% |
| Estimated net trade spread | ≈ 1.80% |
2% − 0% − 0.05% − 0.05% − 0.05% − 0.05% = 1.80%
2% − 0.5% − 0.20% = 1.30%
So it is not only the entry level that matters for assessing a trade. You need to understand what part of the spread you plan to capture and how much you will pay for opening and closing the bundle.
This is a simplified percentage calculation. The exact money result depends on the execution prices: fees are charged on the turnover of each operation, and the percentage entry and exit spreads may have different price bases. So the value obtained should not automatically be treated as a return on the margin posted.
How to check the result in money
Let's take the same lot: 10 coins on each leg. For the example we use linear contracts settled in USDT.
We open:
- a long at an average price of 100 USDT;
- a short at an average price of 102 USDT.
Later we close both positions at 101 USDT. The prices converged, and the exit spread is zero.
(closing price − opening price) × volume
(101 − 100) × 10 = 10 USDT
(opening price − closing price) × volume
(102 − 101) × 10 = 10 USDT
In total, we get 20 USDT before fees.
Fee = average execution price × volume × fee rate ÷ 100
| Operation | Turnover | Fee |
|---|---|---|
| Opening the long | 1,000 USDT | 0.500 USDT |
| Opening the short | 1,020 USDT | 0.510 USDT |
| Closing the long | 1,010 USDT | 0.505 USDT |
| Closing the short | 1,010 USDT | 0.505 USDT |
| Total | 4,040 USDT | 2.02 USDT |
Turnover adds up the amounts of trades without a sign, so on entry and on exit it is the same — 2,020 USDT each. The result depends on the direction: we count a purchase as an outflow and a sale as an inflow.
Entry: −1,000 (buying the long) + 1,020 (selling the short) = +20 USDT
Exit: +1,010 (selling the long) − 1,010 (buying back the short) = 0 USDT
This is the price difference between the two legs, locked in at entry: 2 USDT per coin × 10 coins. At exit the prices converged, and closing cost nothing. The equal turnover is a coincidence of the example: the prices converged exactly in the middle. Had they converged at 100.5 USDT, the exit turnover would have been 2,010 USDT, and the result — the same 20 USDT.
10 + 10 − 2.02 = 17.98 USDT
17.98 ÷ 1,000 × 100% = 1.798%
The simple percentage estimate gave 1.80%, and the calculation from actual turnovers — 1.798%. The small difference arises because each fee is calculated from its own trade amount.
How it works in Profit Cloud
Arbitrageur takes into account the prices and the available order volumes in the order books of both exchanges and calculates weighted average prices for the lot size you specify.
The chart shows the truly executable gross spread based on the current order books. Its calculation already accounts for which price levels will be needed to execute your volume.
When you set entry and exit trigger levels, the terminal automatically calculates the net spread between these levels, including the trading fees for opening and closing both legs.
The calculation uses the rates specified when the exchange connections were created. If no custom fees are set, the exchanges' base rates apply.
Profit Cloud calculates and shows the potential of a trade for your lot before it is opened.
The calculation reflects the current state of the order books. By the time of execution the orders may change, so actual prices and the final result may differ from the preliminary estimate.