Verify cross-exchange arbitrage with public exchange APIs
Published by Ultra Index Invest (ultraindex.pro). Last updated: . Use exchange public market data to check whether a quoted arbitrage fill could exist at the stated UTC time — you judge the spread; no need to trust our narrative.
Step 1 — Download sample trade CSV
Download the February 2025 sample (10,001 rows). Pick one row: symbol, exchange pair, open/close timestamps (UTC to the millisecond), volume, and PnL fields.
Download evidence_trade_record.csv (10,001 rows) · Live strategy context: https://ultraindex.pro/strategies
Step 2 — Query public trades on each venue
Binance
- Spot: GET /api/v3/aggTrades — params: symbol, startTime, endTime (UTC ms), limit (max 1000)
- USDT-M futures: GET /fapi/v1/aggTrades — same time window rules
- Window between startTime and endTime must not exceed 1 hour; paginate with fromId if needed
Bybit
- GET /v5/market/recent-trade — latest public trades; spot limit 60, derivatives up to 1000
- No startTime filter on recent-trade — for older ticks use Bybit Historical Trading Data daily CSV archives
Bybit recent-trade docs · Historical Trading Data
Bitget (optional third venue)
- GET /api/v1/market/fills (spot) or GET /api/v1/mix/market/fills (mix) — limit max 100, no historical timestamp filter
Step 3 — Compare prices at open time
At the CSV open timestamp, compare best available trade prices on both exchanges. If a durable bid/ask or last-trade spread existed, the arbitrage leg is plausible; if not, reject the row. This is independent verification — the same method we document on our strategy market evidence panel.
Related Ultra Quant pages
- Stratified index backtesting — 12 factors, 4 rebalance modes
- Stratified backtesting guide
- Cross-exchange arbitrage strategies — live activity feed
- S&P 500 market data — index constituent panel
Research and education only — not investment advice.