Как проверять качество биржевых market data
Есть поток биржевых событий: price, exchange timestamp, local timestamp и два канала доставки primary/secondary. Как понять, все ли в порядке с данными?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужно проверить временной интервал, задержку local - exchange, дубли primary/secondary, пропуски, нулевые/невозможные цены, out-of-order события и периоды, где один feed деградирует.
Подробный разбор
Сначала фиксируем схему: exchange timestamp - время события на бирже, local timestamp - время получения на нашей стороне, feed - primary или secondary. Основная derived-фича - latency = local - exchange. Она не должна быть отрицательной и должна иметь ожидаемое распределение по каждому feed.
Дальше идут проверки полноты: за какой период данные, нет ли дыр во времени, сколько событий в минуту, есть ли дубликаты одного биржевого события в primary и secondary, совпадают ли price и exchange timestamp у парных событий. Для HFT важно не просто "есть строки", а корректный порядок и задержки.
Отдельно проверяются значения: price не должен быть нулевым или отрицательным, не должно быть резких невозможных скачков без рыночной причины, не должно быть систематических пропусков в конкретные минуты. Хороший ответ заканчивается диагностикой: какие графики/агрегаты построить и какие алерты завести в production.
Типичные ошибки
- Смотреть только describe() по price и не анализировать timestamps.
- Не разделить primary и secondary feed.
- Не проверить дыры во времени и out-of-order события.
Как сказать на собеседовании
- Начни с latency = local_timestamp - exchange_timestamp.
- Разделяй проверки schema, time coverage, feed consistency и market sanity.
Какой market-data feed приходит раньше
По данным с primary и secondary feed нужно понять, через какой канал события приходят на сервер раньше. Как это посчитать корректно?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужно сопоставить одно и то же биржевое событие между feeds и сравнить local timestamps. Просто сравнивать среднюю latency по всем строкам можно, но лучше делать paired comparison.
Подробный разбор
Правильнее всего матчить одинаковые события: например по exchange timestamp, price и другим идентификаторам события, если они есть. Для каждой пары primary/secondary считаем разницу arrival_delta = local_secondary - local_primary. Если delta > 0, primary пришел раньше; если delta < 0, secondary раньше.
После этого смотрим распределение delta: median, p95/p99, долю случаев, где secondary быстрее, и зависимость от времени. Отдельно проверяем, что пары действительно соответствуют одному событию, иначе сравнение latency будет шумным.
Если полных пар нет, можно сравнить распределения latency по feed, но это менее надежно: разные feeds могли доставить разный набор событий.
Типичные ошибки
- Сравнить средние timestamps без матчинга событий.
- Не проверить случаи, где один из feeds не прислал событие.
- Спрятать хвосты распределения за одним средним значением.
Как сказать на собеседовании
- Скажи "paired events" и "distribution, not only mean".
- Назови p50/p95/p99 и долю случаев, где secondary быстрее.
Почему secondary иногда быстрее primary
В части событий secondary feed приходит быстрее primary. Как охарактеризовать эти случаи и найти причину?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужно выделить пары, где secondary быстрее, и сравнить их с нормальными парами по времени, burst-rate, exchange timestamp, цене, количеству событий и задержке primary.
Подробный разбор
Сначала строим признак secondary_faster = local_secondary < local_primary для matched events. Дальше не надо сразу гадать причину: нужно сравнить эти строки с обычными по нескольким срезам.
Полезные срезы: время дня, интервалы с большим числом тиков, latency primary, latency secondary, конкретные инструменты, price anomalies, пропуски в primary, out-of-order события. Если secondary быстрее только во время bursts, вероятная причина - primary начинает задерживаться при высокой нагрузке. Если это происходит в конкретные минуты, возможен сетевой или pipeline incident.
В production это превращается в мониторинг: доля secondary_faster по окнам, p95 latency по feed, missing paired events, zero/invalid price и alert на резкие отклонения.
Типичные ошибки
- Сразу объяснять все "сетевой проблемой" без срезов.
- Не сравнить anomalous subset с baseline subset.
- Не смотреть bursts и time windows.
Как сказать на собеседовании
- Формулируй как slice-and-compare.
- Назови гипотезу про bursts, но подчеркни, что ее надо проверить.
Какие аномалии искать в биржевом датасете
После базовых latency-вопросов интервьюер спрашивает: какие еще аномалии можно заметить в market-data файле?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Ищем дыры во времени, нулевые цены, дубликаты, out-of-order events, отрицательную latency, нестыковки между feeds и резкие скачки частоты событий.
Подробный разбор
Хороший список аномалий для market data:
- пропуски во времени: минуты или секунды без событий, хотя рынок активен;
- price = 0, отрицательные цены или невозможные скачки;
- дубликаты одного события;
- exchange timestamp идет назад или события приходят out of order;
- local timestamp раньше exchange timestamp;
- primary и secondary расходятся по price для одного события;
- один feed систематически теряет события;
- latency резко меняется в конкретных окнах.
Важно не просто перечислить, а сказать, как искать: график event count per minute, histogram latency by feed, paired feed diff, min/max price by window, duplicate key counts и отдельный отчет по anomalies.
Типичные ошибки
- Ограничиться NaN/null checks.
- Не учитывать временную природу данных.
- Не разделять аномалии значений и аномалии доставки.
Как сказать на собеседовании
- Дай чеклист и сразу назови агрегаты/графики.
- Не забывай про zero price и gaps in time.