2026-05-08·Микроструктура·~12 мин чтения

Как читать ленту aggregate-trade на Binance

Если вы никогда не читали ленту aggTrade, вы торгуете по графикам. Графики — это агрегации решений. Лента aggTrade и ЕСТЬ сами решения: каждая исполненная сделка, кто был тейкером, в какую сторону, какого размера, по какой цене, в какую миллисекунду. Это данные микроструктуры. Они бесплатны. Доступны через WebSocket. И дают информацию, которую ценовые свечи попросту не способны вместить.

Что такое лента aggTrade

Каждый раз, когда кто-то выставляет рыночный ордер на Binance Futures, он забирает ликвидность из стакана. Сделка записывается с полями: цена, количество, таймстамп и флаг, указывающий, кто был мейкером (стоящий ордер), а кто тейкером (агрессивный ордер).

Слово «aggregate» (агрегированная) означает вот что: если один рыночный ордер проедает 5 разных ценовых уровней, эти 5 филлов сливаются в ОДНУ запись aggTrade со средневзвешенной по объёму ценой и общим количеством. То есть aggTrade — это данные «на уровне сделки»: одна запись на рыночный ордер, а не на ценовой уровень.

Доступ к ним через WebSocket: wss://fstream.binance.com/stream?streams=btcusdt@aggTrade. Подпишитесь, и сообщения начнут приходить за секунды. На активном символе вроде BTCUSDT ждите 50-200 сообщений в секунду в обычные часы, гораздо больше при волатильности.

Поля и что они значат

Типичный payload aggTrade:

{
  "e": "aggTrade",
  "E": 1714867234000,        // event time
  "s": "BTCUSDT",            // symbol
  "a": 5933014,              // aggregate trade ID
  "p": "100012.50",          // price
  "q": "0.025",              // quantity
  "f": 100928146,            // first trade ID in aggregate
  "l": 100928150,            // last trade ID in aggregate
  "T": 1714867234123,        // trade time
  "m": false                  // isBuyerMaker
}

Самое важное поле из всех — это m, флаг «isBuyerMaker».

Переверните флаг в голове: если m равно FALSE, сделка — это «taker buy», покупательское давление. Название сбивает с толку, но так уж повелось.

Почему это важнее свечей

Минутная свеча с объёмом $50M, максимумом $100,150 и минимумом $99,950 говорит вам, что сделки прошли в этом диапазоне. Она не говорит:

Лента aggTrade сохраняет все три вещи. Графики их схлопывают. Решения, которые вы принимаете по графикам, слепы к базовой реальности: кто покупает или продаёт и насколько агрессивно.

Паттерны, которые стоит узнавать на ленте

После достаточного времени за экраном определённые паттерны ленты становятся узнаваемыми. Они не проприетарные: их хорошо знают на институциональных торговых столах.

Устойчивый taker-buy с ростом цены

Каждый новый aggTrade показывает m: false (taker buys). Цена тикает вверх постепенно. Это «поглощение предложения»: покупатели съедают оферы быстрее, чем мейкеры их пополняют. Бычий сигнал.

Всплеск taker-buys БЕЗ движения цены

20-30 taker-buys за 10 секунд, но цена держится плоско. Это значит, что большая лимитная стена на продажу поглощает спрос. Кто-то агрессивно скидывает аски по низким ценам; покупатели их съедают, но у продавца ещё есть запас. Обычно продавец побеждает (цена падает, когда покупатели иссякают). Отойдите в сторону.

Пустая лента с расширяющимся спредом

Внезапно очень мало aggTrades. Ранее узкий спред bid-ask расширяется. Маркетмейкеры убрали ликвидность. Идёт волатильность. Отсутствие сделок само по себе несёт информацию.

Распределение размеров с длинным хвостом

Большинство сделок $500-5 000. И вдруг единственный агрегат $500K+. Эта одна крупная сделка обычно информированная: участник готов заплатить за проскальзывание, чтобы войти быстро, потому что у него есть тезис. Следите за направлением.

Паттерн айсберг

Один и тот же ценовой уровень снова наполняется на биде (или аске) после того, как его съели. Там стоит крупный скрытый ордер. Часто держится во время откатов, подсказывает направление.

Каскад стопов

Внезапный всплеск taker-sells (m=true), затем более глубокие падения цены, затем ещё всплеск, ещё падение и так далее. Стопы летят каскадом. Когда каскад иссякает (обычно 20-90 секунд), цена часто резко разворачивается, потому что предложение закончилось.

Метрика taker-ratio

Самая базовая систематическая фича, выведенная из aggTrade:

taker_buy_ratio = sum(quantity × price) where m=false
                / sum(quantity × price) all aggTrades

Computed over a window (5min, 30min, 1h, etc).

Выше 0.55: устойчивое покупательское давление. Ниже 0.45: давление на продажу. Метрика полезнее всего В КОНТЕКСТЕ:

В одиночку она шумная. В связке с данными позиционирования (открытый интерес, long/short-соотношения топ-трейдеров) она становится реальным компонентом сигнала.

Китовые принты

Определите «китовый принт» как любой aggTrade выше некоторого номинального порога, скажем $50 000 или $100 000. Считайте китовые принты в минуту и по сторонам (покупки против продаж).

Полезные паттерны:

Порог ($50K против $100K против $500K) зависит от ликвидности монеты. Для BTC «кит» — это $1M+. Для средних альтов $50K уже значимо. Калибруйте под каждую монету.

Реализация подписчика WebSocket

Скелет на Node.js продакшн-качества:

const WebSocket = require('ws');
const trades = new Map();   // sym → rolling array of {ts, usd, isBuy}
const MAX_PER_SYM = 5000;

function connect(symbols) {
  const streams = symbols.map(s => s.toLowerCase() + '@aggTrade').join('/');
  const url = 'wss://fstream.binance.com/stream?streams=' + streams;
  const ws = new WebSocket(url);

  ws.on('message', (buf) => {
    const msg = JSON.parse(buf.toString());
    const d = msg && msg.data;
    if (!d || d.e !== 'aggTrade') return;
    handleTrade(d);
  });

  ws.on('close', () => {
    setTimeout(() => connect(symbols), 5000);  // reconnect with backoff
  });
}

function handleTrade(d) {
  const sym = d.s;
  const px = parseFloat(d.p);
  const qty = parseFloat(d.q);
  if (!px || !qty) return;
  const usd = px * qty;
  const isBuy = d.m === false;   // m=true means seller was taker
  const ts = d.T || Date.now();

  let arr = trades.get(sym);
  if (!arr) { arr = []; trades.set(sym, arr); }
  arr.push({ ts, usd, isBuy });
  if (arr.length > MAX_PER_SYM) arr.splice(0, arr.length - MAX_PER_SYM);
}

// Example: compute taker-buy ratio for BTCUSDT in last 5 min
function takerBuyRatio(sym, windowMs) {
  const arr = trades.get(sym);
  if (!arr) return null;
  const now = Date.now();
  const cutoff = now - windowMs;
  let buyUsd = 0, totalUsd = 0;
  for (let i = arr.length - 1; i >= 0; i--) {
    const t = arr[i];
    if (t.ts < cutoff) break;
    if (t.isBuy) buyUsd += t.usd;
    totalUsd += t.usd;
  }
  return totalUsd > 0 ? buyUsd / totalUsd : null;
}

connect(['BTCUSDT', 'ETHUSDT', 'SOLUSDT']);

Заметки:

Реальность объёма данных

Подписка на aggTrade по 50 активным альтам даёт 5 000-30 000 сообщений в минуту в обычные часы. Во время новостных событий или флеш-крашей можно увидеть 100 000+ в минуту.

Что из этого следует:

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

Чем aggTrade НЕ является

Две важные оговорки:

1. aggTrade — это пост-исполнение. К моменту, когда вы его видите, сделка уже произошла. Опередить её нельзя. Вы можете использовать АГРЕГИРОВАННЫЙ паттерн, чтобы информировать решения о БУДУЩЕМ поведении, но не можете торговать по какой-либо отдельной записи aggTrade как таковой.

2. aggTrade не показывает отложенные ордера. В стакане есть и исполненные сделки (aggTrade), И стоящие ордера (стримы depth/depth20). Для полной картины нужны оба. aggTrade показывает только то, что случилось; depth показывает то, что стоит в очереди на исполнение.

Как это используют институциональные столы

На настоящем систематическом торговом столе лента aggTrade питает несколько разных типов стратегий:

Для ритейл-систематических стратегий самые полезные применения такие: инженерия фич (taker-buy ratio, счётчик китовых принтов) и детекция событий (паттерны внезапных всплесков). Их проще извлечь и провалидировать, чем более изощрённые институциональные приёмы.

Как начать этим пользоваться

Три нарастающих уровня вовлечённости:

1. Понаблюдайте за потоком час. Подпишитесь на aggTrade по BTCUSDT, логируйте в консоль, смотрите. Паттерны начнёте видеть за 30-60 минут: всплески, китовые принты, затишья. Это обязательно перед любой количественной работой.

2. Реализуйте базовые фичи. Taker-buy ratio на окнах 5мин и 30мин. Счётчик китовых принтов. Объём в секунду.

3. Прогоните бэктест фич против будущих доходностей. If your features have predictive power (AUC > 0.55 против, скажем, направления доходности следующих 30мин), они реальны. Большинство ритейл-«чтецов ленты» это не валидируют и в итоге читают паттерны, которые на деле ничего не предсказывают.

Частые ошибки

Пытаться читать отдельные сделки. Один агрегат на $300K не говорит вам ничего. Сигнал — это паттерны во множестве сделок во времени.

Забыть про инверсию флага m. «isBuyerMaker = false» означает, что купил ТЕЙКЕР. Многие понимают это наоборот и переворачивают свой анализ.

Использовать aggTrade для высокочастотных, чувствительных к латентности игр. К моменту доставки по WebSocket сделке уже 50-300мс. Настоящий HFT использует прямые фиды биржи с колокацией. Ритейл-aggTrade годится для среднечастотного анализа.

Хранить каждое сообщение. Забьёте диск. Агрегируйте в поминутные или по-5-минутные, а потом храните сводки.

Читать ленту во время новостей. Объём во время новостных событий аномален. Паттерны, которые «работают» на нормальных рынках, растворяются. Событийным стратегиям нужен свой отдельный каркас.

Куда двигаться дальше

Если этот вводный разбор полезен, естественные следующие шаги такие:

Если вам нужна структурированная программа, которая проведёт вас от «я только что прочитал этот пост» до «у меня развёрнута систематическая стратегия на фичах order flow», наш Crypto Quant Pro буткемп покрывает весь путь, включая инфраструктуру, исследование факторов, бэктестинг и живое исполнение. 30-дневный курс включает более строгий разбор фич микроструктуры в дни 7-12.

А если вы предпочитаете подписаться на сервис, который уже гоняет стратегии на таких данных, наш сигнальный продукт использует фичи позиционирования + микроструктуры, чтобы выдавать pre-pump алерты по USDT-margined альтам на Binance Futures. Живой референс-счёт; проверьте нашу работу перед подпиской.

Любой из путей, DIY или подписка, начинается с того, чтобы час почитать поток. Обходного пути мимо привыкания к сырым данным нет.