Spot and futures: the same signal is a different trade

BTCUSDT on spot and BTCUSDT on the perpetual share a name and nearly a price. Everything a trader has to decide about them differs. Here is what the terminal now does about it.

3 min read

Crypto Tradingcrypto futuresspotfunding ratesignals

Also available in Bahasa Indonesia

For a while the terminal produced one signal for BTCUSDT and showed it to everybody. If you traded spot, it said BUY or SELL. If you traded the perpetual, it also said BUY or SELL, because the code guessed the market from the symbol and the symbol looks the same on both.

That was three mistakes in one, and it took a customer noticing signals disappearing to find them.

The signal that vanished

Browser notifications carry a tag, and a new notification with the same tag replaces the one on screen. The tag was built from the symbol and the direction: sig-BTCUSDT-short. So a SHORT on the perpetual and a SELL on spot were, to the browser, the same notification - and whichever arrived second silently replaced the first. Nothing errored. A signal simply never appeared.

The market is part of the identity now: sig-futures-BTCUSDT-short and sig-spot-BTCUSDT-short can both be on screen at once, and the page's own memory of what it has already shown is keyed the same way.

The price that was slightly wrong

The perpetual is not the spot pair. It has its own order book, its own last price and its own funding, and it prints its own candles. We measured the basis on the day we changed this:


BTCUSDT   spot 78,358.63   perp 78,331.90   basis ~5 bp
SOLUSDT   spot    101.89   perp    101.84   basis ~5 bp

Five basis points is small. That is exactly why quoting the spot price on a futures ticket was easy to miss, and still wrong: the entry, the stop and the distance to liquidation are all measured from the perp price. A futures signal is now computed on the perpetual's own candles.

The cost that spot does not have

Funding is charged on the whole notional every eight hours, paid by one side to the other, and it can turn. A trade worth taking on spot can be a losing trade on the perp for that reason alone. So a futures ticket now shows the current rate, which side pays it, and - the useful form - how many days of carry add up to one R of your risk:


funding +0.03%/day · paid by this side - one R of carry every 41 days

Spot tickets show no funding line, because spot has no funding.

The call that means two different things

A bearish reading on the perpetual is a SHORT you can open. The same reading on spot is only sell what you hold, or stand aside - there is nothing to open, because spot has no short side. The old page labelled both SELL and treated both as entries.

A bearish spot call is now marked as an exit rather than a position, and the card says the same reading is an openable SHORT on futures.

One thing we deliberately did not change

The automated engine still reads spot candles when it trades futures. Every backtest behind the evidence gate was measured on spot bars, and moving the live engine to a different feed would leave the gate vouching for a system that is no longer the one running. The screens that only show a futures signal have no such tie, so they price it where it would actually be traded. Moving the engine means re-running the whole sweep on perpetual bars first - and a test now fails if anybody tries to skip that step.

The two markets were always separate in the database. What looked like a lack of separation was the signal layer treating two trades as one. That is fixed, and the difference between them is on the ticket where it belongs.

← Crypto Trading