Understanding Spreads & Signals

How spreads are calculated, how to read signals on the dashboard, and how filtering and smart delivery work.

Last updated: May 2026

What is a Spread

A spread is the percentage difference between the best ask on one exchange and the best bid on another. If Exchange A's ask is $100 and Exchange B's bid is $100.50, the spread is +0.50%. A positive spread indicates a potential buy-on-A, sell-on-B opportunity.

Spreads can be positive or negative depending on direction. Arbitron computes spreads for both directions of every exchange pair, so you always see the most profitable side.

It is important to distinguish two different "spreads" in crypto trading. The intra-exchange bid-ask spread is the gap between the highest buy order and lowest sell order on a single order book — typically 0.005–0.05% on liquid perps. The cross-exchange spread, which Arbitron tracks, is the difference between one exchange's best ask and another's best bid; this is the arbitrage opportunity. Spreads can be quoted in absolute terms (Exchange A ask $150.00 vs Exchange B bid $150.45 = $0.45 gap) or as a percentage. The percentage formula: spread% = (bid_B − ask_A) / ask_A × 100. Using the example: (150.45 − 150.00) / 150.00 × 100 = 0.30%. Percentage is the right metric because it normalizes across symbols — a $0.45 gap is huge on SOL but invisible on BTC.

Spread Calculator

Pick prices on each exchange and watch the spread & direction change

Exchange A BUY
$152.00
Exchange B SELL
$152.45
Formula
spread = (B − A) / A × 100
= ($152.45 − $152.00) / $152.00 × 100
Spread +0.296%
−1% 0 +1%

Positive spread — A is cheaper. Buy on A, sell on B to capture the gap.

Reading Spread Signals

Each signal on the dashboard shows the symbol, the two exchanges, the spread percentage, and the direction (which exchange to go long/short). Each signal also includes a strength indicator — a progress bar showing how actively the spread oscillates (see the Signal Strength article for details).

Signals also display funding rates and 24h volume where available. This helps you assess the full cost picture — a great spread with high negative funding may not be profitable to hold.

Dashboard visual language. Green arrows and positive percentages mean a buy-A/sell-B opportunity exists at the stated edge. The signal strength bar (0–100%) reflects how persistently the spread oscillates above your threshold — 80%+ is a high-conviction recurring opportunity, 20% is a one-time spike. A clock icon or grey-out indicates a stale signal: the underlying market data has not updated within the last 5 seconds, usually because of WebSocket reconnect or exchange API lag. Each row shows a freshness timestamp ("2s ago", "12s ago") so you can verify the data is live. A red exclamation mark next to a symbol means a funding settlement is approaching — held positions will be debited or credited within minutes.

Signal Filters

You can configure filters to control which signals appear on your dashboard. Set minimum and maximum spread thresholds, select specific exchanges, set minimum volume requirements, and filter by funding rate range.

Filters are applied server-side before signals reach your browser, so the dashboard only shows opportunities that match your criteria. This reduces noise and helps you focus on actionable setups.

Three practical filter recipes for distinct trader styles. Conservative low-frequency: min spread 0.20%, min volume $5M/24h, max funding |0.03%|, exchanges limited to Binance/Bybit/OKX, min strength 70%. Targets ~2–5 cycles per day, high confidence. Aggressive high-frequency: min spread 0.06%, min volume $500k, no funding filter, all 18 exchanges enabled, min strength 30%. Targets 50–200 cycles per day, low edge per cycle, demands tight fees (VIP1+). Funding-arbitrage hunter: spread filter relaxed to 0.05%, but funding differential filter set to >0.04% per 8h, position held across multiple settlements. Hold time hours not seconds. Each persona requires different account tier, position size, and risk discipline — copying the wrong recipe is the most common configuration mistake.

Smart Signal Delivery

Arbitron uses smart delivery: you receive a signal when the spread first crosses your threshold, and updates are throttled to prevent dashboard flooding during volatile periods. The system only sends new data when the spread has moved meaningfully.

The Signal Strength indicator helps separate real opportunities from noise — signals that oscillate frequently receive a higher strength rating, while one-time spikes that do not repeat fade away over time. This natural decay prevents stale signals from cluttering your dashboard.

Smart delivery has three layers that prevent dashboard flooding without dropping real opportunities. Hysteresis: a signal opens when the spread crosses your threshold +5% (e.g. 0.105% on a 0.10% threshold) and closes only when it drops below threshold −5% (0.095%). This prevents flicker when the spread oscillates exactly at the boundary. Per-symbol cooldown: after a signal fires, the same exchange-pair-symbol combination is muted for 10–30 seconds even if it re-crosses the threshold. Throttling versus dropping: during volatility storms the engine throttles update rate (sends every 500ms instead of every tick) but never drops a state transition — you always see when a signal opens or closes, just with batched intermediate updates.

Spread Direction and Mode

Spread direction matters because it dictates which exchange you long and which you short. Arbitron computes both directions for every pair simultaneously: A→B (buy on A, sell on B) and B→A (buy on B, sell on A). The dashboard always shows the side that is currently profitable. Your card's Mode setting — Long, Short, or Both — filters which direction is tradeable. Long-only means you only enter cycles where the long leg sits on the configured "primary" exchange. Both is the default and the most opportunity-rich — it lets the engine pick whichever direction has the edge at signal time.

Direction matters even more for funding pickup. If Exchange A's funding is +0.05% and Exchange B's is −0.01%, you want to be short on A (receive 0.05%) and long on B (receive 0.01%) — total funding income +0.06% per interval. If your spread signal pushes the opposite direction (long A, short B) you pay both sides: −0.06%. Over three 8-hour settlements that is 0.18% per day in funding drag. The funding differential column on the dashboard shows the net per-interval funding income or cost in the current signal's direction — green is income, red is drag. Always pair spread sign with funding sign.

Concrete example with numbers. SOL-USDT, Exchange A ask $150.00 funding +0.04%, Exchange B bid $150.30 funding −0.02%. Spread = (150.30 − 150.00) / 150.00 = +0.20%. Direction: buy A, sell B. Funding impact: you are long A (pay +0.04%) and short B (receive +0.02%) = net −0.02% per 8h. Hold one cycle through one settlement: spread profit 0.20% − round-trip fees 0.10% − funding 0.02% = net 0.08% per cycle. Now reverse mode: forced long B, short A. Funding flips favorable (+0.06%) but spread reverses against you (−0.20%). The lesson: mode-locking can turn a clean opportunity into a guaranteed loss. Default to Both unless you have a deliberate funding strategy.

Spread Mathematics

Expected profit per cycle is a four-term equation: profit% = gross_spread − round_trip_fees − expected_slippage − funding_drag. Gross spread is the signal's quoted percentage. Round-trip fees = (taker_A + taker_B) × 2, because you pay on entry and exit on both legs — at 0.05% taker each, that is 0.20%. Expected slippage depends on order size versus order book depth at the top 5 levels; for liquid majors with $1k orders expect 0.01–0.02%, for thin alts $5k+ orders expect 0.05–0.15%. Funding drag applies only if the cycle holds across a settlement boundary. Break-even spread is the minimum gross spread that yields zero net: break_even = 2 × (taker_A + taker_B) + slippage_estimate. At VIP0 with 0.05% takers and 0.02% slippage, break-even ≈ 0.22%.

Expected throughput is the second half of the equation: daily_profit$ = cycles_per_day × position_size × profit_per_cycle%. A trader running 30 cycles per day at $5,000 size with 0.08% net profit earns 30 × 5000 × 0.0008 = $120 daily, before drawdowns. The same trader scaling to $20,000 size earns $480 daily — but only if liquidity supports 4x larger fills without proportional slippage increase. The "cycles per day" number is the variable most operators underestimate; market regime changes can drop it 5x overnight (low-volatility weeks have fewer opportunities). Build your model on conservative cycle counts, scale size deliberately, and re-measure profit-per-cycle weekly because fee tiers, exchange behavior, and competitor activity all drift.

Frequently asked questions

What is a spread in crypto futures?

A spread is a price gap. The bid-ask spread is the gap on a single order book between best buy and best sell — typically 0.005–0.05% on liquid perps. The cross-exchange spread, which arbitrage targets, is the gap between one exchange's best ask and another exchange's best bid for the same symbol. When the cross-exchange spread exceeds round-trip fees plus slippage, a profitable two-leg trade exists. Arbitron tracks cross-exchange spreads continuously across 18 venues.

How is the spread percentage calculated?

Spread% = (bid_B − ask_A) / ask_A × 100. Example: SOL-USDT, Exchange A ask = $150.00, Exchange B bid = $150.45. Spread = (150.45 − 150.00) / 150.00 × 100 = 0.30%. The direction (buy A, sell B) is implied by the sign — positive means buy-on-A is profitable, negative means buy-on-B. Arbitron computes both directions for every exchange pair every tick and surfaces whichever side has the larger positive edge.

What makes a good arbitrage signal?

Four properties: spread comfortably above break-even (2x round-trip fees minimum), high signal strength (>50% — meaning the spread oscillates persistently rather than spiking once), sufficient order-book depth at the top 3 levels to fill your size without slippage, and favorable or neutral funding direction. Ignore one-time wicks: they usually unwind before your order fills. Prefer signals on liquid majors (SOL, ETH, BNB) over thin alts until you trust your execution.

Why are my spread signals delayed?

Three common causes. WebSocket reconnect: the exchange briefly dropped the feed and Arbitron is re-syncing — usually resolves within 5 seconds. Rate limit throttling: the exchange has temporarily slowed your data stream due to a burst — appears as occasional 1–3 second gaps. Local network latency: high latency between your browser and our servers adds 100–500ms to dashboard updates. Stale signals are visually flagged with a grey-out or clock icon so you never act on outdated data.

How often do new signals appear?

Frequency depends entirely on your filter settings and market regime. A conservative filter (>0.20% spread, top 5 exchanges, liquid majors) yields 5–20 signals per day. An aggressive filter (>0.06% spread, all 18 exchanges, all symbols) yields hundreds per hour during volatile periods, near-zero during quiet ones. Crypto volatility is regime-driven — expect signal frequency to swing 10x between calm and turbulent weeks. Build your strategy around the average, not the peak.

Can I filter signals by exchange?

Yes. The signal filter panel lets you whitelist or blacklist specific exchanges from both legs of the arbitrage pair. Restrict to your trusted, well-funded venues, or exclude exchanges currently under maintenance. You can also filter by minimum 24h volume, funding rate range, and signal strength. Filters are applied server-side before signals reach your browser, so the dashboard only shows opportunities matching your criteria — no client-side noise.

What's the difference between bid-ask and cross-exchange spread?

Bid-ask spread is intra-exchange: the gap between the best buy and best sell on a single order book. It is a cost (you pay it when crossing the spread with a market order) and is typically tiny on liquid perps. Cross-exchange spread is inter-exchange: the gap between one venue's ask and another venue's bid for the same symbol. It is a profit opportunity — when it exceeds your round-trip costs, you can buy cheap on one exchange and sell expensive on the other.

Why does the dashboard show stale signals?

A stale-signal indicator means the underlying market data has not updated within the last 5 seconds — usually because of an exchange WebSocket reconnect, brief API outage, or scheduled maintenance. The signal is preserved on screen but visually greyed-out so you do not mistake outdated prices for live opportunity. Once fresh data resumes the indicator clears automatically. If staleness persists more than 60 seconds for a specific exchange, check the exchange status page.

Try Arbitron — find spreads across 18 exchanges

Real-time spread signals, automated execution, full PnL tracking. Free to sign up, invite-only access during beta.

An unhandled error has occurred. Reload X

Reconnecting…

Retrying in s…

Reconnecting…

Session paused

Reloading…