Отметим: когда бот теряет деньги, понять причину без детального контекста невозможно. Логи только с ценой и объёмом не дают ответа. Нужна полная цепочка: feature vector на момент сигнала, версия модели, прогноз (score/probability), условия исполнения (slippage, комиссия, спред) и итоговый P&L по каждой позиции. Без этого отладка — гадание на feature vector'ах. Мы проектируем систему журналирования, которая фиксирует каждую сделку с полным контекстом. Наша команда имеет более 8 лет опыта в AI-трейдинг-системах и более 50 внедрений под ключ.
Первое, с чем сталкиваются команды — разрыв между сигналом и исполнением. Модель предсказывает движение, но брокер исполнил ордер по другой цене из-за задержки или проскальзывания. Лог должен фиксировать timestamp отправки, timestamp получения, спред, размер проскальзывания. Иначе вы не поймёте, где потеряна прибыль.
Мы используем ClickHouse — колоночную СУБД, которая обеспечивает запись 50 000 сделок/сек и сжатие данных в 5-10 раз. Это позволяет хранить миллиарды записей и выполнять аналитику в реальном времени.
Почему журналирование сделок критично для AI-трейдинга?
Без детальной записи вы не сможете:
- восстановить причину убыточной сделки (ошибка модели, латентность, рыночный шок);
- предоставить регулятору отчёт о соблюдении торговых лимитов;
- улучшать модель: атрибуция P&L по факторам (model_version, symbol, feature set) требует чистой исторической выборки.
Сравнение подходов к логированию:
| Подход | Пропускная способность | Хранение контекста | Аналитика в реальном времени |
|---|---|---|---|
| Файловый лог (CSV) | ~1 000 сделок/сек | Нет, только строка | Нет |
| PostgreSQL | ~5 000 сделок/сек | Частично (JSONB) | Средняя (индексы) |
| ClickHouse | ~50 000 сделок/сек | Полный (вложенные структуры) | Высокая (материализованные вью) |
ClickHouse в 10 раз быстрее PostgreSQL по агрегации логов при объёме >10 млн записей (ClickHouse Benchmark).
Какие данные обязательно логировать?
| Сущность | Поле | Пример |
|---|---|---|
| Сигнал | timestamp, symbol, features (json), model_version, prediction | 2023-03-15 10:30:00, BTCUSDT, {"rsi": 30}, v2.1, 0.85 |
| Ордер | order_id, signal_id, side, qty, order_type, limit_price | ord_123, sig_456, BUY, 0.5, LIMIT, 45000 |
| Исполнение | fill_id, order_id, fill_price, fill_qty, commission | fill_789, ord_123, 45005, 0.5, 0.001 |
Эти данные позволяют полностью воспроизвести историю сделки.
Как мы реализуем систему журналирования?
Мы используем ClickHouse как основное хранилище, Python для ETL, Airflow для оркестрации. Ниже — фрагмент кода, который пишет сигнал, ордер и исполнение в одну транзакцию (через запросы INSERT).
Пример реализации класса TradingLogger
import json import uuid from datetime import datetime from clickhouse_driver import Client class TradingLogger: def __init__(self, clickhouse_host: str): self.ch = Client(clickhouse_host) self._ensure_tables() def log_signal(self, symbol: str, features: dict, prediction: float, model_version: str) -> str: signal_id = str(uuid.uuid4()) self.ch.execute( """INSERT INTO trading_signals VALUES""", [{ 'signal_id': signal_id, 'timestamp': datetime.utcnow(), 'symbol': symbol, 'model_version': model_version, 'prediction': prediction, 'features': json.dumps(features), }] ) return signal_id def log_order(self, signal_id: str, symbol: str, side: str, qty: int, order_type: str, limit_price: float = None): self.ch.execute( """INSERT INTO orders VALUES""", [{ 'order_id': str(uuid.uuid4()), 'signal_id': signal_id, 'symbol': symbol, 'side': side, 'qty': qty, 'order_type': order_type, 'limit_price': limit_price or 0, 'submitted_at': datetime.utcnow() }] ) def log_fill(self, order_id: str, fill_price: float, fill_qty: int, commission: float): self.ch.execute( """INSERT INTO fills VALUES""", [{ 'fill_id': str(uuid.uuid4()), 'order_id': order_id, 'fill_price': fill_price, 'fill_qty': fill_qty, 'commission': commission, 'filled_at': datetime.utcnow() }] ) Пример из практики: один из клиентов получил экономию времени на отладку 40% после внедрения нашей системы. Ранее поиск аномальной сделки занимал 2–3 часа, после — 15 минут. Это стало возможным благодаря полному контексту: feature vector, версия модели, slippage.
Как анализировать P&L по моделям?
ClickHouse позволяет эффективно анализировать миллионы сделок с атрибуцией P&L:
-- P&L атрибуция по модели и символу SELECT model_version, symbol, sum(realized_pnl) as total_pnl, count() as trade_count, avg(fill_price - requested_price) / avg(fill_price) * 10000 as avg_slippage_bps FROM fills JOIN orders USING order_id JOIN trading_signals USING signal_id WHERE filled_at >= today() - 30 GROUP BY model_version, symbol ORDER BY total_pnl DESC; Сравнение производительности ClickHouse vs PostgreSQL для аналитики логов:
| Метрика | ClickHouse | PostgreSQL |
|---|---|---|
| Запись (cделок/сек) | 50 000 | 5 000 |
| Агрегация по 10 млн строк | 0.3 сек | 4.2 сек |
| Сжатие | 4-8x | 1.5x |
Данные из ClickHouse Benchmark
Типичные ошибки при внедрении
- Отсутствие уникального идентификатора сделки — ломает связь сигнал-ордер-исполнение.
- Логирование только успешных ордеров — вы теряете информацию о rejected/cancelled ордерах.
- Не сохраняется feature vector — невозможно воспроизвести решение модели постфактум.
- Хранение логов в одной таблице без партиций — запросы по историческим данным замедляются на порядок.
Процесс работы
- Анализ — изучаем текущую архитектуру, определяем список полей (features, orders, fills).
- Проектирование — разрабатываем схему ClickHouse с тегами и партициями (день/модель).
- Реализация — пишем класс
TradingLogger, интеграция с брокерским API. Включаем дашборд в Grafana. - Тест — загружаем исторические данные, проверяем корректность связок signal→order→fill.
- Деплой — CI/CD, мониторинг алертов (отсутствие логов >5 минут).
Сроки: от 2 до 4 недель в зависимости от количества моделей и источников данных.
Что входит в работу
- Исходный код библиотеки логирования с документацией на русском.
- Скрипты миграции clickhouse (создание таблиц, материализованных вью).
- Пример дашборда (Grafana) с ключевыми метриками (P&L, slippage, trade count).
- Обучающий вебинар для команды на 2 часа.
- Поддержка в течение 1 месяца после деплоя.
Свяжитесь с нами для консультации — оценим ваш проект за один рабочий день. Закажите внедрение системы журналирования и получите полный контроль над сделками AI-трейдинг-бота. Получите консультацию — наши инженеры помогут настроить логирование под вашу стратегию.







