Проверяйте торговые гипотезы на настоящем стакане,
а не на сглаженных свечах
Платформа записывает стакан с частотой один снапшот в секунду, складывает его в хранилище (ClickHouse как слой сырья, Oracle как DDS с партиционированием), проверяет качество данных и считает бэктест так, чтобы результат можно было воспроизвести через месяц. Ниже — живой дашборд и реальные цифры из архива.
Дашборд
Слева — живой стакан с биржи (Finam Trade API, обновление каждые 5 секунд). Справа и ниже — архив: реальная запись за 17 апреля 2026, восстановить её заново нельзя, потому что API отдаёт историю только за последний год.
Живой рынок подключение…
| Инструмент | Bid / Ask | Спред, ₽ | 1 контракт | Имбаланс |
|---|---|---|---|---|
| загрузка… | ||||
Стакан: — —
Архив: спред за сессию 17.04.2026
Архив: имбаланс стакана
Итоги дня реальные данные
Качество данных: что нашлось в записи
Проверки не исправляют данные, а фиксируют расхождения. «Подогнать» значение под ожидание — значит спрятать дефект, а потом построить на нём стратегию.
| Проверка | Что ищет | Найдено | Важность |
|---|---|---|---|
| загрузка… | |||
Что такое алготрейдинг
Это торговля не руками, а по алгоритму: правила входа и выхода записаны в код, и код исполняет их без участия человека — одинаково в понедельник утром и в пятницу вечером, без усталости, страха и желания «отыграться».
Руками — это как?
Смотрит человек на график и решает: «здесь куплю, там продам». На решение влияют новости, настроение, вчерашний убыток и мысль «ещё немного подожду». Два одинаковых дня — два разных решения по одному и тому же графику.
По алгоритму — это как?
Правило записано заранее и однозначно: «если объём покупок в стакане превышает объём продаж на первых десяти уровнях в 2,5 раза и тренд вверх — покупать, выходить при откате на N пунктов». Один и тот же вход — всегда одно и то же действие.
Зачем так делать
Алгоритм можно измерить: сколько сделок, какая доля прибыльных, какая просадка, сколько съедают комиссии. Решение руками измерить нельзя — его можно только запомнить и потом спорить, «повезло» или «работает».
Проверка на истории — один из способов понять, рабочий ли алгоритм
Правила записывают в код и «прогоняют» по прошлому: как повела бы себя стратегия, если бы торговала год назад. Это называют бэктестом.
- Берут историю, а не воспоминания. Не «я помню, что тут был рост», а запись цен и объёмов с датой и временем — такая, чтобы её нельзя было переписать задним числом.
- Прогоняют алгоритм по прошлому. Сделка за сделкой, по тем же правилам, что будут в реальности: тот же размер позиции, те же стопы, те же издержки.
- Считают результат и риски. Не только «сколько заработал», но и максимальную просадку — сколько было бы больно по дороге, и сколько забрали комиссии.
- Сравнивают с простым эталоном. Если «просто купить и держать» дало больше — алгоритм не нужен, и честнее сказать это сразу.
- Проверяют на данных, которых не видели. Настроил на 2024-м — проверь на 2025-м. Хороший результат только на том отрезке, где настраивал, значит почти ничего.
Отсюда и задача этой платформы: дать честную историю и честный счёт, чтобы гипотезу можно было проверить, а не «почувствовать». Живой стакан и архив выше — это как раз те данные, на которых такая проверка делается.
Как это выглядит на практике: проверили три гипотезы
Мы не будем показывать «прибыльную стратегию» — её нет. Вместо этого покажем, как выглядит честная проверка: три гипотезы на реальной записи стакана за 10 торговых дней (287 240 снапшотов, 28 723 987 уровней), с издержками и проверкой на данных, которые не участвовали в настройке.
| Гипотеза | 1 день: train | 1 день: test | 10 дней (главное) | Вердикт |
|---|---|---|---|---|
| А. Перевес объёма в стакане → вход в ту же сторону, удержание 1–2 минуты |
145 сделок +200 ₽ +1,38 ₽/сделка |
110 сделок −570 ₽ −5,19 ₽/сделка |
2 723 сделки −8 061 ₽ 1 из 10 дней в плюсе t = −4,01 |
мертва значимо теряет |
| Б. То же, но удерживать 20 минут (амортизировать издержки) |
12 сделок +543 ₽ +45,25 ₽ |
8 сделок −54 ₽ −6,69 ₽ |
не проверялась мало сделок |
мертва 12 сделок — не статистика |
| В. Тренд по средней цене (пересечение SMA 10/60), удержание 10 минут |
23 сделки +302 ₽ +13,15 ₽ |
15 сделок +190 ₽ +12,70 ₽ |
397 сделок −4 112 ₽ 2 из 10 дней в плюсе t = −2,47 |
значимо убыточна один день обманул |
Издержки больше сигнала
Сигнал по стакану на горизонте одного снапшота даёт в среднем 0,18 ₽ движения, а один круг «туда-обратно» стоит 3–4 ₽ (комиссия плюс спред). Разница в 20 раз — это не «стратегия плохая», это арифметика.
Было «+190», стало «−4 112»
На одном дне гипотеза В дала плюс на обеих половинах — и выглядела кандидатом. На десяти днях она даёт −4 112 ₽, прибыльных дней 2 из 10, значимость t = −2,47. То, что на одном дне было лучшим параметром (удержание 600), на десяти стало худшим.
Возврат к среднему — тоже нет
Если тренд значимо теряет, логично развернуть: продавать на пересечении вверх. Разворот даёт +1 730 ₽ и 7 из 10 дней в плюсе, но значимость t = 1,03 — не проходит порог даже без поправки на число проверенных гипотез. Рынок «анти-моментум», но заработать на этом после издержек не выходит.
Подробный разбор с кодом, всеми 72 комбинациями перебора, equity curve, разбивкой по отрезкам дня и результатами по каждому из 10 дней — в репозитории проекта (market_dwh/backtest/). Масштаб данных: 10 дней, 287 240 снапшотов, 28 723 987 уровней стакана, загруженных в хранилище. Для сравнения: «просто купить и держать» в эти дни давало от +1 002 ₽ до −1 120 ₽ — обыграть нужно не ноль, а вот это.
Что это за продукт
Инструмент для одного вопроса: стратегия действительно работает или я подогнал её под прошлое? Большинство самодельных ботов умирают не на стратегии, а на данных и на отсутствии воспроизводимости. Здесь закрыты обе части.
Запись стакана, а не свечей
Свеча скрывает, что происходило внутри минуты. Стакан с глубиной 50 уровней на сторону показывает спред, плотность и «стены» — то, из чего вообще состоит скальпинг.
Хранилище, а не папка с jsonl
Слой сырья в ClickHouse (2,7 млн уровней загружаются за 4 секунды), DDS в Oracle с партиционированием по суткам и PL/SQL-пакетами, витрины для аналитики.
Проверки качества
Шесть проверок на каждый день: перекрёстный стакан, глубина, дубли, битые значения, аномальный спред, разрывы записи. Каждая находка — в журнале, ни одна не «исправлена» молча.
Воспроизводимый бэктест
Загрузка идемпотентна: повторный прогон за ту же дату даёт ровно те же строки. Перезагрузка дня — 120 секунд вместо 567 за счёт TRUNCATE PARTITION вместо DELETE.
Оркестрация, а не «скрипт на удачу»
Airflow DAG: интервал берётся из data_interval_start, а не из «сейчас» — поэтому backfill за прошлые дни даёт те же цифры, что и первый прогон.
Честные границы
Платформа не обещает прибыльную стратегию. Она даёт инфраструктуру, на которой гипотезу можно проверить и — чаще всего — опровергнуть.
Как устроен путь данных
От биржевого API до графика на этой странице — пять шагов, каждый проверяемый.
- Сбор. Стакан забирается раз в секунду (Finam Trade API, JWT-сессия), пишется как есть: время, цена, объём, сторона. Ничего не сглаживается.
- Слой сырья. ClickHouse принимает запись и разбирает её: stg.orderbook_levels, ReplacingMergeTree, партиции по месяцам. 381 МБ → 3,9 секунды.
- DDS. Выгрузка в CSV → внешняя таблица Oracle (ORACLE_LOADER) → партиционированный по суткам dds_orderbook_levels через direct-path insert в PL/SQL-пакете.
- Проверки и витрины. Пакет считает минутные агрегаты (спред, имбаланс, mid) и прогоняет шесть проверок качества. Найденное пишется в dq_issues.
- Сверка. Один и тот же расчёт делается независимо в ClickHouse и Oracle: 586 минут и средний спред 2,757 ₽ совпадают — это и есть проверка, что витрина не врёт.
Данные: что реально есть
Цифры измерены, а не оценены. Их можно пересчитать — код и SQL открыты.
Связаться
Пишите, если нужен разбор данных, хранилище или проверка стратегии на истории.