Вы открываете Binance / Bybit / OKX и т.п., смотрите на график, нажимаете Buy и думаете, что только что купили актив на рынке

На самом деле вы сделали гораздо более интересную вещь: отдали заявку в чужую инфраструктуру, где профессиональные участники заранее знают, где стоит ликвидность, как устроен стакан и какие заявки сейчас находятся в очереди

И самое неприятное - вы почти всегда играете против участников, которые технически и информационно находятся на другом уровне

Спойлер: у вас нет шансов. Сейчас покажу почему на реальных примерах

Если не хотите читать лонгрид - смело мотайте в конец статьи. Там коротко собрал главный вывод и что с этим делать, как получить преимущество над большинством трейдеров

Начнем, главный ваш конкурент, знакомьтесь - маркет-мейкер.

По сути, такой же игрок, как и вы, только у которого официально привилегированное положение: низкие комиссии, более быстрый и приоритетный доступ к инфраструктуре биржи и возможность работать с огромным количеством заявок.

Как зарабатывает ММ? На простом примере.

Допустим, BTC сейчас стоит $100 000.

Маркет-мейкер выставляет одновременно:

Buy - $99 999
Sell - $100 001

Если кто-то продаёт ему BTC по $99 999, а через некоторое время другой участник покупает у него по $100 001 — маркет-мейкер заработал $2 на одном BTC, не угадав вообще ничего о направлении рынка.

Его преимущество не в том, что он знает, куда завтра пойдёт BTC.

Его преимущество в том, что он может делать это тысячи и десятки тысяч раз, постоянно переставляя заявки вслед за рынком.

А теперь представьте, что между его покупкой и продажей проходит не несколько минут, а миллисекунды.

И при этом у него:

  • комиссия существенно ниже вашей;

  • заявки отправляются и снимаются быстрее;

  • гораздо больше возможностей по API;

  • собственные серверы находятся максимально близко к инфраструктуре биржи;

  • одновременно работают десятки алгоритмов;

  • а риск позиции можно мгновенно захеджировать на другой бирже.

Получается довольно интересная ситуация.

Вы и маркет-мейкер смотрите на один и тот же BTC, но играете в разные игры.

Вы смотрите на график и решаете: покупать или продавать?

ММ смотрит на:

стакан → поток заявок → сделки → другие биржи → свою позицию → стоимость исполнения следующего ордера.

И здесь появляется ещё один важный момент.

Маркет-мейкеру совершенно не обязательно держать огромную реальную ликвидность в стакане постоянно. Его задача — управлять заявками так, чтобы в каждый конкретный момент получать максимальную вероятность исполнения при приемлемом риске.

И вот тут мы подходим к самому интересному.

А что вообще означает цифра в стакане?

Допустим, вы открываете стакан и видите:

$871 ликвидности до вашей цены.

Вы делаете простой вывод:

«Я спокойно могу зайти на $50 — глубины хватает с огромным запасом».

Но откуда вы знаете, что эти $871 действительно можно исполнить?

Вы видите только снимок состояния книги заявок, который биржа передала вам через API/WebSocket.

А теперь давайте посмотрим на реальный ордер, который я отправил в такую книгу

что произошло с моими $50

Я торгую арбитраж на нескольких криптобиржах и сохраняю стакан непосредственно перед отправкой каждого ордера.

Поэтому в этом случае у меня есть сразу две вещи:

что биржа показывала в стакане и что реально произошло с моим ордером.

Возьмём один конкретный пример.

За 100 мс до отправки моего ордера стакан выглядел так:

Стакан до входа

Биды - цена / количество / объём в долларах

0.03683    11 770    $433
0.03681     4 410    $162
0.03678     4 730    $174
0.03677     2 750    $101  ← наша лимитка

Я собирался продать на $50 по цене 0.03677.

До моей цены в стакане отображалось:

$433 + $162 + $174 = $769

То есть ликвидности было больше, чем достаточно.

Причём я специально выбрал небольшой размер ордера. Даже если часть стакана исчезнет за эти 100 мс, я ожидал нормального исполнения.

Ордер отправлен.

Через 8 миллисекунд приходят первые исполнения.

И вот тут начинается странное.

Что реально исполнилось

0.036832    $0.74
0.036782    $0.73

Итого:

$1.47.

Из запрошенных $50 исполнилось меньше трёх процентов.

Остаток ордера мы сняли через несколько секунд.

На первый взгляд можно сказать:

«Ну и что? Стакан просто изменился».

И это действительно первое объяснение, которое приходит в голову.

Но здесь есть одна деталь, которая делает ситуацию гораздо интереснее.

Куда делся уровень $162?

Посмотрите ещё раз на стакан:

0.03683    $433
0.03681    $162   ← здесь была ликвидность
0.03678    $174

А теперь посмотрите на реальные исполнения:

0.03683    $0.74   ← исполнилось
0.03681    $0      ← ничего
0.03678    $0.73   ← исполнилось

Наш ордер перепрыгнул через уровень 0.03681, на котором, согласно стакану, находилось ещё $162.

И вот здесь возникает вопрос:

как ордер смог получить исполнение по 0.03678, если между ним и 0.03683 находился уровень 0.03681 с заявленным объёмом?

Если этот объём действительно находился в книге заявок в момент обработки нашего ордера, сначала должна была исполниться заявка на 0.03681.

Но этого не произошло.

Давайте посмотрим на стакан после

Через несколько секунд мы получили уже такую картину:

0.03678       40       $1.5
0.03677    2 890       $106
0.03675    1 740        $64

И это тоже интересно.

На верхнем уровне осталось всего около $1.5 ликвидности.

То есть фактически доступный объём оказался примерно там, где мы его и увидели по реальным исполнениям.

А вот что произошло с остальными уровнями — уже гораздо интереснее.

Так что же мы на самом деле наблюдаем?

Здесь важно не делать поспешный вывод.

Этот эксперимент не доказывает, что биржа специально рисует стакан.

Есть несколько возможных объяснений:

  • заявка на уровне могла быть снята между моментом получения стакана и моментом исполнения;

  • данные WebSocket могли отражать состояние книги с задержкой;

  • market-data feed и matching engine могли видеть разные состояния книги в конкретный момент;

  • могла сыграть роль специфика реализации самой торговой системы.

Но для нас как для трейдера есть одна вещь, которая важнее того, почему это произошло.

Объём, который мы видели в стакане, не гарантировал нам исполнение.

И именно это я решил проверить дальше.

Потому что один странный ордер можно списать на случайность.

А что будет, если посмотреть не на один ордер, а на все мои входы на этой бирже за несколько дней?

А если посмотреть не на один ордер?

Один странный случай ещё ничего не доказывает.

Стакан мог обновиться между двумя событиями, данные могли прийти с задержкой, заявка могла быть снята — вариантов достаточно.

Поэтому я взял 500 своих ордеров на этой бирже и для каждого сравнил:

  • что показывал стакан непосредственно перед отправкой;

  • какие уровни должен был пройти ордер;

  • какие исполнения (fills) я получил фактически;

  • какие ценовые уровни в реальности были пропущены.

И картина сохранилась.

Проблема не исчезла на большой выборке.

Мы снова и снова получали ситуации, когда стакан показывал ликвидность на промежуточном уровне, но в реальных исполнениях этого уровня не было.

То есть это уже не история про один неудачный ордер.

Мы наблюдаем систематически повторяющееся расхождение между тем, что показывает стакан, и тем, что реально доступно для исполнения.

И вот здесь для меня как для разработчика торгового бота начинается самое интересное.

Потому что если такое происходит один раз - можно сказать:

«Ну, не повезло».

Если такое происходит на сотнях ордеров - закладывать отображаемый объём стакана непосредственно в торговую стратегию уже нельзя.

ВЫВОД

После всего этого может возникнуть вопрос: а зачем вообще так глубоко разбираться в стакане?

Потому что цена на экране - это ещё не рынок.

Рынок - это реальная ликвидность, очередность заявок, скорость их изменения и то, что действительно исполняется, а не просто цифры, которые вы видите в терминале.

Если вы научитесь отличать реальную ликвидность от отображаемой, понимать плотность стакана и видеть, как она меняется перед вашим ордером, вы перестаёте принимать решения на основании цифр, которые могут оказаться недоступными уже через несколько миллисекунд.

И здесь появляется преимущество.

Пока один трейдер смотрит на стакан и думает:

«Здесь стоит $100 000 — можно спокойно заходить».

другой понимает:

«Из этих $100 000 реально доступно гораздо меньше. Если я сейчас отправлю свой объём, цена исполнения будет совсем другой».

Первый рассчитывает сделку по нарисованной ликвидности.

Второй - по реальной.

И именно на таких мелочах профессиональные участники начинают обгонять остальных.

Вы не становитесь маркет-мейкером и не получаете волшебную кнопку «заработать».

Но вы перестаёте быть тем человеком, который смотрит на стакан как на готовую истину.

Вы начинаете понимать, что происходит внутри рынка.

А это уже совсем другой уровень торговли.

Это общий принцип. Конкретные примеры по биржам, способы проверки стакана и практические советы о том, как научиться отличать реальную ликвидность от фантомной, я разбираю в своём Telegram-канале -> https://t.me/bylabdata