Анатомия спреда: Откуда берется дисбаланс?
Рынок неэффективен. Особенно в моменты жесткого хайпа или паники. На CEX (Binance, Bybit, OKX) цену двигают маркетмейкеры и ордербуки. Там все решает секундный перевес стакана. На DEX цена живет по законам AMM (Automated Market Makers) и жестко привязана к математической формуле пула (например, константного произведения $x \times y = k$).
Если на бирже крупный игрок начинает резко лить токен в стакан, CEX-цена мгновенно летит вниз. А на DEX? А на DEX тишина, пока туда не добежит первый арбитражер или обычный юзер. Вот этот временной лаг между обновлением ордербука на CEX и изменением соотношения токенов в пуле DEX — и есть наш хлеб.
Но учтите деталь, о которой редко пишут в пабликах: Спред часто бывает иллюзорным. Вы видите разницу в 3%, радуетесь, залетаете, а пул пустой. Ликвидности там три копейки. Вы нажмете Swap, цена улетит против вас, и вместо профита вы получите минус. Это называется ценовым воздействием (Price Impact).
Карта рисков: Что убьет ваш депозит
Прежде чем лезть в код и сканеры, зафиксируйте чек-лист угроз. Арбитраж — это игра на скорость с отрицательным матсжиданием, если вы не умеете считать скрытые косты.
| Тип коста / Риска | Где зарыт подвох | Как минимизировать |
|---|---|---|
| CEX Withdrawal Lag | Заморозка вывода биржей на 5-10 минут. За это время спред схлопнется. | Держать ликвидность и там, и там. Работать "встречными объемами" без реального гоняния токенов между биржами. |
| Price Impact | Низкая ликвидность в пуле DEX. Большой ордер сильно двигает цену. | Считать объем пула. Объем вашей позы не должен превышать 1-2% от TVL пула. |
| Gas & MEV | В EVM-сетях (Ethereum, BSC, Arbitrum) боты увидят транзу в мемпулу и перебьют ее через Front-running. | Использовать Flashbots RPC (для Mainnet) или защищенные RPC-узлы, чтобы не светить транзу в общем пуле. |
| CEX Fees | Комиссия мейкера/тейкера + фиксированная комиссия за вывод токена. | Качать объемы на CEX для снижения VIP-уровня. На EXMON, например, Maker/Taker вообще в нуле, что идеально для таких кругов. |
Алгоритм поиска руками и автоматизация
Искать связки полностью руками в 2026 году — это мазохизм. Но понимать механику вы обязаны.
Стратегия простая. Берем CoinMarketCap или CoinGecko. Фильтруем токены с капитализацией пониже (щиткоины, но живые, со средними объемами). Открываем вкладку «Markets» («Рынки») и смотрим расхождения. Если видим разницу между условным Gate.io и пулом на Uniswap/PancakeSwap в сети Arbitrum или Base (там газ копеечный) — начинаем копать.
Пошаговый ручной чек-лист:
- Проверить статус ввода/вывода токена на CEX. Если вывод закрыт — спред фейковый. Проходим мимо.
- Проверить тип сети. Токен на CEX должен быть именно в той сети, где крутится DEX-пул. Мосты сожрут время и профит.
- Оценить проскальзывание. Вбиваем в интерфейсе DEX нужный объем продажи/покупки. Смотрим на финальный Price Impact. Если он сжирает спред — связка мертва.
Скрипт для мониторинга: Считаем спред как профи
Хватит теории. Перейдем к софту. Нам нужен скрипт, который будет дергать цену с CEX (через CCXT) и парсить цену пула напрямую из смарт-контракта DEX (через Web3.py), минуя тормозные фронтенды.
Ниже готовый, рабочий скрипт для связки Bybit (CEX) и Uniswap v2 пул на Arbitrum (DEX). Код боевой.
Python
import time
from web3 import Web3
import ccxt
# Подключаемся к ноде. Юзайте быстрые приватные RPC, публичные часто лагают
RPC_URL = "https://arb1.alpharc.io/v1/your-api-key" # замени на свой рабочий RPC
w3 = Web3(Web3.HTTPProvider(RPC_URL))
if not w3.is_connected():
raise Exception("Нода легла, чини")
# Инициализируем биржу через CCXT
exchange = ccxt.bybit({
'enableRateLimit': True,
})
# Контракт пула Uniswap V2 (или Суши) Arbitrum для примера (WETH/USDC)
# Сюда можно подставить любой щиток, главное знать адрес пула пар токенов
POOL_ADDRESS = "0x905dfCD56492171426f30a7d11d68E1da87ab64B"
# ABI пула V2. Нужна только функция getReserves, остальное мусор, не тащим
POOL_ABI = [
{
"constant": True,
"inputs": [],
"name": "getReserves",
"outputs": [
{"name": "_reserve0", "type": "uint112"},
{"name": "_reserve1", "type": "uint112"},
{"name": "_blockTimestampLast", "type": "uint32"}
],
"payable": False,
"stateMutability": "view",
"type": "function"
}
]
pool_contract = w3.eth.contract(address=w3.to_checksum_address(POOL_ADDRESS), abi=POOL_ABI)
def get_dex_price():
# Дергаем резервы напрямую из контракта
reserves = pool_contract.functions.getReserves().call()
# В пуле токен0 и токен1. Предположим: token0 = USDC (6 децималов), token1 = WETH (18 децималов)
# Внимание: всегда проверяйте какой токен нулевой, какой первый в контракте!
reserve_usdc = reserves[0] / 10**6
reserve_weth = reserves[1] / 10**18
# Цена WETH в USDC по формуле пула
price_dex = reserve_usdc / reserve_weth
return price_dex
def get_cex_price():
# Берем спотовый стакан Bybit
orderbook = exchange.fetch_order_book('ETH/USDC')
bid = orderbook['bids'][0][0] if len(orderbook['bids']) > 0 else 0
ask = orderbook['asks'][0][0] if len(orderbook['asks']) > 0 else 0
return bid, ask
def monitor():
print("Запуск мониторинга неэффективности...")
while True:
try:
dex_p = get_dex_price()
cex_bid, cex_ask = get_cex_price()
if dex_p == 0 or cex_bid == 0:
continue
# Сценарий 1: На DEX дешевле, на CEX дороже. Покупаем на DEX, льем на CEX.
spread_to_cex = ((cex_bid - dex_p) / dex_p) * 100
# Сценарий 2: На CEX дешевле, на DEX дороже. Покупаем на CEX, льем на DEX.
spread_to_dex = ((dex_p - cex_ask) / cex_ask) * 100
if spread_to_cex > 0.5: # 0.5% порог, чтобы покрыть комиссии
print(f"[!] Сигнал! На DEX ДЕШЕВЛЕ. DEX: {dex_p:.2f} | CEX Bid: {cex_bid:.2f} | Спред: {spread_to_cex:.2f}%")
if spread_to_dex > 0.5:
print(f"[!] Сигнал! На CEX ДЕШЕВЛЕ. CEX Ask: {cex_ask:.2f} | DEX: {dex_p:.2f} | Спред: {spread_to_dex:.2f}%")
time.sleep(2) # Не драмсить ноду и биржу слишком часто, поймаем бан по IP
except Exception as e:
print(f"Ошибка в цикле: {e}")
time.sleep(5)
if __name__ == "__main__":
monitor()Продвинутая тактика: Встречные объемы (Хеджирование)
Гонять токены физически — это прошлый век. Пока транза подтвердится, пока биржа зачислит депозиты (требуя 15-30 подтверждений сети) — рынок уйдет. Спред испарится. Профи выжимают неэффективность по-другому.
Мы держим балансы заранее на обеих площадках.
Пример: У вас лежит $1000 и 1 ETH на балансе CEX. И столько же лежит на вашем Metamask в сети Arbitrum.
Скрипт сигналит: на DEX цена ETH просела до $2900, а на CEX она держится $2950.
Ваши действия: Вы одновременно жмете Swap на DEX (покупаете ETH за стейблы по $2900) и продаете ETH на CEX по $2950. В ту же секунду. Суммарный объем ваших активов вырос на дельту спреда. Никаких межбиржевых переводов. Балансы перераспределились, профит зафиксирован в стейблах. Потом, когда рынок успокоится, вы просто выровняете позы обычным транзитом.
И самое важное: берегитесь «токсичного потока». Если цена на CEX падает камнем вниз, не вздумайте выкупать этот актив на DEX вручную. Спред кажется огромным, но пул просто еще не успел пересчитаться. Вы выкупите нож, а через 5 секунд арбитражные боты укатают этот пул еще ниже, оставив вас с кучей обесценивающегося токена на руках.
Снайпинг пулов v3: Как не остаться без штанов на концентрированной ликвидности
Если вы думаете, что Uniswap v2 — это вершина эволюции, вы застряли в 2021 году. Сейчас весь основной объем и спред живут в Uniswap v3 и ее форках (PancakeSwap v3, QuickSwap v3). Здесь механика AMM меняется кардинально. В отличие от v2, где ликвидность размазана от нуля до бесконечности, в v3 ликвидность концентрируется в ценовых диапазонах — тиках (ticks).
Что это значит для нас? Жесточайший Price Impact при выходе цены за пределы ликвидного диапазона.
Если на CEX токен пампят, а в пуле v3 ликвидность в текущем тике заканчивается, цена внутри DEX совершает колоссальный скачок (сквиз). Вы видите спред в 15%, прыгаете в пул, а контракт исполняет вашу транзакцию по худшей цене, потому что внутри узкого диапазона просто не было ордеров.
Формула ликвидности Uniswap v2: x * y = k (Плавное изменение цены)
Формула Uniswap v3: (x + L / √P_b) * (y + L * √P_a) = L^2 (Ступенчатое изменение)Чтобы вручную рассчитать реальный спред в v3 пуле, вам недостаточно знать резервы. Нужно парсить slot0 смарт-контракта пула.
Чек-лист проверки v3 пула перед входом:
- Вытаскиваем sqrtPriceX96 из функции slot0. Это текущая цена в специфическом формате.
- Проверяем текущий tick.
- Смотрим глубину ликвидности (liquidity) в текущем тике. Если она близка к нулю — спред искусственный, вас засадит в позицию по самой невыгодной цене.
Проводка транзакции: Как обойти MEV-ботов на повороте
Допустим, вы нашли сочный спред. Сеть Ethereum или Base. Вы отправляете транзакцию через обычный Метамаск. Что происходит дальше? Тразна попадает в мемпул (публичную очередь). MEV-боты (Maximum Extractable Value) сканируют мемпул 24/7. Они видят вашу транзакцию, понимают, что она принесет $100 профита, и генерируют свою точно такую же транзу, но ставят комиссию за газ (gas price) на 1 гвей больше.
Блокчейн валидатор берет их транзакцию первой. Бот забирает ваш спред. Ваша транзакция исполняется следом, но уже в минус или ревертится (отменяется), сжигая ваш газ. Вас только что отфронтранили (Front-running). Приятного мало.
Как защищаться:
- Используйте private RPC. Забудьте про дефолтные настройки кошелька. В Ethereum Mainnet прописывайте Flashbots RPC (https://rpc.flashbots.net). В сетях типа BNB Chain или Polygon ищите специализированные приватные узлы (например, MEV-Share или MevBlocker). Ваша транзакция пойдет в обход публичного мемпула напрямую к валидаторам. Боты ее просто не увидят.
- Выставляйте жесткий Slippage Tolerance. В настройках DEX ставьте проскальзывание не более 0.5% для ликвидных пар и максимум 1-1.5% для щитков. Если бот попытается вас подвинуть, транзакция просто упадет в реверт, сохранив тело депозита (хоть и потеряете копейки на газ).
Практический пример: Разбор реального кейса
Давайте разберем, как выглядит идеальный круг. Без выдумок. Токен X (условный децентрализованный игровой актив).
- Мониторинг: На Bybit цена токена резко падает с $1.00 до $0.90 из-за крупного слива одного из инвесторов. Стакан на покупку плотный.
- Анализ DEX: На PancakeSwap (сеть BNB Chain) цена токена все еще держится на уровне $0.98. Пул ликвидности — $200,000.
- Расчет объема: Мы хотим прокрутить $2,000. Проверяем Price Impact на PancakeSwap. При продаже $2,000 в пул цена изменится всего на 0.3%. Значит, мы закроем продажу в среднем по $0.977.
Математика круга:
- Покупка на Bybit: $2,000 / $0.90 = 2222.2 токенов X.
- Комиссия CEX (Taker 0.1%): минус 2.2 токена. Остается 2220.
- Вывод на кошелек: Фиксированная комиссия сети — 10 токенов X. На кошелек долетает 2210 токенов.
- Продажа на DEX: 2210 * $0.977 = $2159.17.
- Минус газ за Swap на DEX: ~$0.15 (в сети BNB).
- Чистый профит: $159.02 с одного круга за 3 минуты.
Маркетмейкеры CEX выровняли цену с DEX примерно за 4 минуты после нашего круга. Окно возможностей закрылось. Кто успел — тот заиграл.
Инструменты профессионального фармера спредов
Если не хотите писать весь софт с нуля, вот стек, которым пользуюсь я и большинство команд средней руки:
- DeXito / Dexscreener / GeckoTerminal — для визуального поиска аномалий. Смотрите вкладку "Arbitrage" на специализированных аналитических платформах.
- DeBank / Arkham — для отслеживания кошельков топовых арбитражеров. Нашли кошелек, который стабильно делает профитные транзы в мемпуле? Ставьте его на вочлист и анализируйте, какие пулы он доит.
- Tenderly — симулятор транзакций. Если крутите большой объем и боитесь, что смарт-контракт выдаст ошибку, прогоните транзу через симулятор Tenderly. Он покажет, сколько газа сожрется и выполнится ли условие в реальности.
Работать руками на этом рынке можно, но ваш главный враг — невнимательность. Перепутали сети, не проверили комиссии на вывод с CEX, нажали кнопку на DEX без учета проскальзывания — и ваш профит улетает в карман валидаторам сети. Будьте прагматичны, считайте косты до миллицента и не жадничайте.