Кто двигает рынок — маркет-мейкер, алгоритм или просто очень дорогая quant логика
Люди до сих пор любят думать, что рынок двигает либо “умный человек”, либо “злой маркет-мейкер”, либо “секретный алгоритм”.
На практике всё чуть менее романтично: рынок двигают ликвидность, очередь, задержки, риск, execution-логика и очень дорогая quant логика.
Ниже — о том, как на самом деле работают TWAP, VWAP, POV и почему большинство разговоров про “алго” звучат умно только до первого реального ордера.
Кто вообще такие маркет-мейкеры
Давайте начнём с простого вопроса, который почему-то до сих пор у многих вызывает странные эмоции: кто вообще такие маркет-мейкеры?
Первая — сказочная: маркет-мейкер — это какой-то хозяин стакана, который по щелчку пальцев двигает цену туда, куда хочет и самое главное без риска :) , но это не так ибо котировальный механизм это главный риск тейкер.
Вторая — истерическая: маркет-мейкер — это мошенник, который только и делает, что рисует ликвидность, гоняет толпу и красиво стрижёт тех, кто пришёл “по рынку” , сидит ничего не делает тянет бабки с толпы.
Правда, как обычно, скучнее, злее и дороже, меркантильнее и запутанней чем кажется.
По факту маркет-мейкер — это не обязательно конкретный человек. Чаще это система котирования, которая:
- стоит в обе стороны,
- держит bid/ask,
- управляет инвентарём,
- роллит спред через FPGA роутер (за счет сверх быстрой коммутации , но это мы затронем в некст статье , чтобы Вам было понятно что это вообще такое , запасайтесь водярой там будет много физики/математики/VHQL-COBOL-C++ говна кода
- старается стоять нейтрально через exposure manifold risk undertaking (Общий объем открытых позиций, подверженных риску в рамках текущей сделки или стратегии)
- контролирует риск,
- и пытается заработать на спреде, скорости и качестве исполнения.
То есть маркет-мейкер — это не “злой питушара”.
Это машина, набор правил, ограничений, моделей и инфраструктуры.
И да, иногда эта машина объясняет тебе, что ты опоздал на пару микросекунд. Вежливо, математически и за твой счёт, порой это стандартная практика из-за FPGA коммутации.
Классическая архитектура: клиент не лезет в рынок напрямую, а отправляет программно сгенерированные заявки брокеру через API. Дальше уже начинается execution — то есть не “что купить”, а “как именно протащить объём через рынок и не устроить самому себе ценовую аварию и рагнуть prop-desk”.
На чём маркет-мейкер вообще зарабатывает
На низковолатильном рынке базовая история простая: маркет-мейкер котирует спред.
Ты решаешь ударить маркетом в ask на 50 лотов — и внезапно обнаруживаешь, что тебя исполнили хуже, чем ты ожидал.
И тут в голове у большинства сразу всплывает вечное:
“меня опять где-то красиво переиграли/наебали”.
На практике всё чуть менее романтично.
Пока твоя заявка проходит через инфраструктуру, кто-то быстрее тебя:
- видит изменение потока,
- За счет collocation и прекрасно подписанных JVA c биржами , что дает им минимальные задержки при котирование ордеров
- понимает, что ликвидность под угрозой.
- Начинает уходить из стакана вызывая каскад ликвидаций при этом оставляя execution логику на паузе - при этом не хочет принимать риск волатильности на себя.
- перестраивает котировку.
- или забирает лучший кусок раньше тебя.
- За счет FPGA (Field-Programmable Gate Array) - Коммутации.
Это не обязательно “обман”.
Чаще это сочетание latency, приоритета по времени, перестановки котировок и обычного проскальзывания.
Если перевести на русский: пока ты думаешь, что покупаешь по лучшей цене, рынок уже живёт в следующем кадре.
И вот это надо понять очень рано:
рынок не обязан ждать, пока ты догрузишься , он будет тебя ебать в будущем , просто за счет скорости и все , но не всегда самый быстрый самый умный и богатый , но это очень сильно решает при правильном стэке и capex (инвестиций в основной капиталл).
Почему крупный ордер нельзя просто влупить целиком
Потому что если ты фонд, деск или институциональный игрок и тебе надо купить не 500 акций, а 100 тысяч, то рынок это не переварит бесплатно.
Если ты вываливаешь крупный объём сразу, ты сам сдвигаешь цену против себя.
То есть приходишь за ликвидностью, а по дороге получаешь:
- market impact,
- проскальзывание,
- ухудшение средней цены,
- и сигнал всем остальным, что в стакан влез кто-то большой и нервный/жадный.
Поэтому крупный приказ режут на дочерние ордера.
И вот дальше начинается уже не “торговля”, а execution science:
- сколько отправить сейчас,
- сколько отложить,
- бить маркетом или стоять лимитом,
- на какой площадке торговать,
- как не спалить намерение,
- как не улететь в impact,
- и как не купить самому себе дороже просто потому, что ты нетерпеливый.
- какой роутер заэкзекьютить,
- как понять что емкости будет достаточно,
- есть ли возможности за нейтралить позу.
Отсюда и рождаются TWAP, VWAP и POV.
Архитектура современных торговых алгоритмов
Когда-то заявки реально передавали брокеру по телефону или факсу.
Сейчас это звучит как ультра-кринж, но да — рынок пережил и такое.
Сегодня есть несколько уровней технологической зрелости.
Макроалгоритмы — это слой торговой идеи:
Микроалгоритмы — это execution-движок:
- как выставлять заявки,
- как дробить объём,
- когда агрессировать,
- когда стоять пассивно,
- как работать с очередью и ликвидностью.
Smart Order Routing — это ещё один слой, если площадок несколько:
- куда именно слать ордер,
- какой dark платит рибейты
- есть ли клиринговая сессия у эмитента
- где сейчас жирная ликвидность которую можно разобрать , либо огромная очередь ритейла которая повисла на OI
- Каким ордером лучше залететь чтобы в конкретный момент получить лучшие условия.
То есть современный рынок — это не “один робот”.
Это стек:
стратегия → execution → routing → risk → infra
И если ты слаб хотя бы в одном слое, рынок тебе это быстро объяснит.
Здесь клиент ближе к рынку и сам взаимодействует с книгой заявок. На красивых картинках это выглядит как свобода и контроль. В жизни это ещё значит, что теперь у тебя меньше права сваливать косяки на кого-то другого , тебя просто вынесут даже если у тебя collaction на NYSE Дэске.
TWAP — самый честный способ быть тупым
TWAP — это Time-Weighted Average Price.
Идея до смешного простая: если тебе надо исполнить крупный объём за период времени, ты делишь его на равные части и исполняешь равномерно по времени.
Где Q — общий объём ордера, N — число интервалов исполнения, а q_i — размер каждой дочерней заявки. То есть без магии: общий объём просто нарезается на одинаковые куски.
- легко реализовать,
- легко контролировать,
- легко объяснить риск-менеджеру, который не любит сюрпризы , и вечером нормально сожрал говна от жены.
Что в этом плохого:
рынок не торгует равномерно.
Обычно в начале сессии объёма больше, в конце тоже, а в середине дня рынок часто тоньше и тупее (мы говорим про NYSE/NQ/AMEX).
А TWAP всё равно будет лупить одинаковыми кусками, как бухгалтер с секундомером.
То есть TWAP — это алгоритм не для тех, кто хочет быть особенно умным.
Это алгоритм для тех, кто хочет быть предсказуемым и дисциплинированным.
Иллюстрация TWAP-логики: алгоритм режет общий объём на одинаковые куски и исполняет их через равные интервалы. Просто, дисциплинированно, предсказуемо — и местами туповато, потому что рынок не обязан жить ровным метрономом.
VWAP — когда ты хотя бы признаёшь, что рынок живой
VWAP — это Volume-Weighted Average Price, то есть цена, взвешенная по объёму.
Здесь всё проще, чем выглядит: берём цену каждой сделки, умножаем на объём, суммируем и делим на общий объём. Получаем среднюю цену, по которой реально торговался рынок, а не абстрактную “среднюю температуру по больнице”.
В числителе ты суммируешь цену, умноженную на объём.
В знаменателе — весь объём.
То есть VWAP — это не “средняя цена по времени”, а средняя цена, по которой реально торговался рынок по объёму.
Логика VWAP-исполнения простая:
алгоритм смотрит на исторический профиль объёмов и говорит:
- утром ликвидности обычно больше — значит можно исполнить больше,
- в середине дня поток тоньше — значит надо сбавить,
- под закрытие объём снова растёт — значит туда тоже можно положить больший кусок.
В чём плюс:
VWAP уже уважает то, что рынок в течение дня живёт неравномерно.
В чём минус:
VWAP любит исторические данные.
А рынок не обязан сегодня вести себя так же, как вчера.
То есть VWAP умнее TWAP, но если день аномальный, а ты исполняешься по “средней номинальной точке твоего босса ”, можно очень красиво и очень технично ошибиться.
VWAP уже смотрит не на часы, а на объём. Утром и под закрытие поток обычно выше — значит, и исполнять там можно больше. Это уже не “равномерная резка”, а попытка синхронизироваться с естественным ритмом рынка.
POV — когда ты торгуешь не по архиву, а по факту
POV — это Percentage of Volume.
Идея простая: не пытаться заранее угадать профиль дня, а просто держать фиксированную долю от реального текущего объёма.
Где Q — остаток ордера, V — рыночный объём за интервал, а γ — коэффициент участия. Алгоритм берёт свою долю от текущего потока, но не больше того, что тебе вообще осталось исполнить.
- рынок наторговал много — ты исполнил больше,
- рынок наторговал мало — ты не лезешь как далбаеб в пустой стакан,
- остаток ордера тоже учитывается.
Более формально остаток позиции можно записать так:
Эта запись говорит одну простую вещь: за каждый шаг времени алгоритм забирает долю от реально прошедшего объёма, но не больше остатка собственного ордера. То есть математика здесь нужна не для понта, а чтобы не исполнить невозможное.
Почему это сильнее VWAP:
потому что POV ориентируется на сегодняшний поток, а не на вчерашние сказки о том, каким “обычно бывает” рынок.
POV-алгоритм не живёт вчерашней статистикой, а просто держит фиксированную долю от текущего потока рынка. Если объём есть — участвует больше. Если рынок дохлый — не лезет в пустоту как человек, который перепутал execution с истерикой.
Почему POV в пределе приводит к VWAP
Вот тут уже начинается приятная quant-логика.
Если алгоритм всё время исполняет фиксированную долю γ от рыночного объёма, то в непрерывном времени можно написать:
Если перейти от дискретных шагов ко времени как к непрерывному процессу, то скорость исполнения ордера становится пропорциональна скорости торговли всего рынка. По-человечески: едешь рядом с потоком, а не пытаешься воевать с ним.
Это уже связь между остатком твоего ордера и общим объёмом рынка за период. Чем больше рынок реально наторговал, тем больше ты успеваешь исполнить при фиксированной доле участия.
Если к моменту T ордер исполнен полностью, то:
Если к концу горизонта ордер закрыт полностью, стартовый объём должен быть равен доле γ от всего рыночного объёма за этот период. То есть чудес нет: нельзя исполнить 20% дневного объёма, если ты всё время участвовал в рынке только на 5%.
А теперь самое красивое и шедевральное . Средняя цена исполнения выражается так:
Вот здесь и проявляется красивая связь: если честно держать постоянную долю участия в объёме, средняя цена исполнения стремится к VWAP. То есть POV — это не отдельная религия, мантра ,ультра HFT trade а динамический способ прийти к тому же benchmark’у.
если ты честно весь день торгуешь фиксированную долю от рыночного потока, твоя средняя цена исполнения стремится к VWAP.
То есть POV и VWAP — это не два разных религиозных течения по типу Христианства и Иудаизма.
Это две версии одной и той же задачи:
как протащить большой объём через рынок, не устроив самому себе рагпулл на котлету фаундэйшена.
Здесь лучше оставить визуальный переход между execution-логикой и микроструктурой: от “как нарезать объём” к вопросу “как рынок вообще двигается на уровне книги заявок”.
Где начинается настоящая микроструктура
Теперь уходим из мира “равномерно нарезать объём” в мир, где начинается уже по-настоящему интересное.
Цена двигается не потому, что кто-то написал красивый тред в Twitter (да это решает на новостных стаках , но вначале идет execution layer и только потом уже влияние новости , так-как информация доход быстрее а также гребанные инсайдеры. Которые так-же держат HFT фонды , не будем упоминать их тут.
Цена двигается тогда, когда на одном из уровней исчезает ликвидность.
- если раньше истощается ask queue — цена скорее двинется вверх,
- если раньше истощается bid queue — цена скорее двинется вниз.
Именно поэтому в микроструктуре так важен вопрос:
какая сторона стакана умрёт первой?
Вероятность движения цены через истощение очереди
Тогда вероятность движения можно описать функцией:
Формула выглядит злобно, но смысл у неё приземлённый: вероятность движения цены зависит от относительных размеров bid/ask и от того, насколько синхронно ведут себя эти очереди. То есть это просто более умный способ сказать: “стакан важен, но не так примитивно, как любят новички”.
Она говорит:
вероятность сдвига цены зависит от относительного баланса очередей bid и ask и от того, насколько согласованно живут эти очереди во времени.
Когда корреляция между очередями обнуляется, формула упрощается и становится функцией отношения bid к ask. То есть рынок уже можно описывать через imbalance, не делая вид, что за этим стоит какая-то магия.
А здесь всё почти по-школьному: чем больше bid относительно общей ликвидности, тем выше вероятность соответствующего движения. Но рынок, к сожалению, не настолько вежлив, чтобы всегда оставаться в этом частном случае.
Это уже почти интуитивная формула из школьного мира:
чем больше bid относительно общей видимой ликвидности, тем выше вероятность соответствующего движения.
Зачем в модель вводят скрытую ликвидность
Потому что стакан врёт.
Не всегда, но регулярно :)
Как и профили обьема
Не всегда но регулярно :)
Ты видишь только displayed liquidity, а рынок живёт ещё и на:
- айсбергах,
- скрытых лимитах,
- внутреннем неттинге,
- OTC-потоке,
- Дарк пуллы
- Reroute клиринг
- не учтенный нетто баланс у клирингового специалиста,
- крупныe участники, которые не светят весь размер.
Поэтому в модели вводят параметр скрытой ликвидности H:
Параметр hidden liquidity — напоминание о том, что видимый стакан не равен всему рынку. Айсберги, скрытые лимиты и прочая невидимая кухня делают рынок менее наивным, чем хочется тем, кто смотрит только на top-of-book.
Смысл простой:
мы не доверяем видимому стакану на 100%, поэтому добавляем корректировку на то, что часть ликвидности есть, но ты её глазами не видишь.
То есть если кто-то до сих пор живёт с формулой
“bid больше ask — значит цена точно вверх”,
то конечно жаль этого добряка, рынок давно уже сложнее детского конструктора.
Как это калибруют на реальных данных
Вот тут начинается тотальная дрочка и куча муторной работы .
Берутся исторические данные по конкретному торговому дню:
- значения bid и ask группируются по децилям,
- для каждого набора (i, j) считается эмпирическая частота роста цены u_ij,
- считается, сколько раз вообще такое состояние наблюдалось — d_ij,
- параметры модели подбираются методом наименьших квадратов.
- это только пример (в реальности есть еще Exection ML/RL специалисты которые умирают от сигаретного дыма и алкогольного опьянения в оффисе)
Формально это записывается так:
А вот это уже скучная взрослая часть: модель надо не “придумать красиво”, а откалибровать на реальных данных. Подбираются параметры, чтобы предсказанные вероятности были максимально близки к фактическим движениям цены. Магии нет — только статистика, вычисления и дисциплина.
мы подбираем H и ρ так, чтобы модель как можно лучше объясняла реально наблюдавшиеся сдвиги цены.
То есть всё это не магия.
Это обычная калибровка вероятностной модели на рыночных данных.
Да, выглядит уебищно.
Нет, это не “волшебный secret HFT trading ultra wealth paradigm”.
Это просто статистика, applied math и очень много скучной инженерии.
Что из этого надо вынести
Современный execution и market making — это не про “секретную кнопку заработать”.
Это про набор довольно приземлённых, но очень дорогих задач:
- как не сдвинуть рынок своим же объёмом;
- как не отдать edge тому, кто быстрее;
- как выбирать между лимитом и маркетом;
- как маршрутизировать приказ;
- как оценивать вероятность движения цены;
- как не форсить гамму
- где лучше встать
- зачем роллить спред
- как забрать обьем у рынка
- как не умереть от инвентаря, задержек и собственной же инфраструктуры.
И вот в этом месте обычно хочется немного остудить пыл тех, кто после пары статей решил:
“Ну всё, сейчас на выходных соберу HFT-бота”.
Конечно, можешь собрать.
Вопрос только в том, что потом делать с:
- инфраструктурой,
- market data,
- risk checks,
- monitoring,
- routing,
- лицензиями,
- капиталом,
- и людьми, которые будут чинить всё это в 03:40, когда exchange gateway внезапно решит испортить тебе жизнь.
Потому что настоящий execution — это не Python-скрипт на коленке.
Это дорогая дисциплина, где рынок проверяет не твой энтузиазм, а твою инженерную состоятельность.
Финал
Если будет интересно, дальше можно уже идти глубже:
- latency stack,
- co-location,
- queue priority,
- adverse selection,
- inventory control,
- FPGA,
- feed arbitration,
- и весь тот прекрасный мир, где половина людей любит слово “alpha”, но плохо отличает сетевую задержку от собственной фантазии.
А пока достаточно понять одно:
маркет-мейкер — это не злой путишара.Это машина, которая живёт на спреде, риске, скорости и математике.И если ты хочешь с ней конкурировать — сначала проверь не амбиции, а бюджет. #CHASETRUST #MARKETSTRUCTURE #EXECUTION #HFT #ALGO #VWAP #TWAP #POV #MICROSTRUCTURE #QUANT