Зауважимо: коли бот втрачає гроші, зрозуміти причину без детального контексту неможливо. Логи лише з ціною та об'ємом не дають відповіді. Потрібен повний ланцюжок: векторні ознаки на момент сигналу, версія моделі, прогноз (score/probability), умови виконання ордерів (slippage, комісія, спред) та підсумковий P&L по кожній позиції. Без цього налагодження бота — ворожіння на feature vector'ах. Ми проєктуємо систему журналювання угод, яка фіксує кожну угоду з повним контекстом. Наша команда має понад 10 років досвіду в AI трейдинг бот та понад 40 впроваджень під ключ. Ми гарантуємо якість впровадження та надаємо гарантію на систему. Наші інженери сертифіковані ClickHouse та Python.
Перше, з чим стикаються команди — розрив між сигналом та виконанням. Модель передбачає рух, але брокер виконав ордер за іншою ціною через затримку або прослизання. Лог має фіксувати timestamp відправки, timestamp отримання, спред, розмір прослизання. Інакше ви не зрозумієте, де втрачено прибуток.
Ми використовуємо ClickHouse — колонкову СУБД, яка забезпечує запис 50 000 угод/сек та стиснення даних у 5-10 разів. ClickHouse краще за PostgreSQL у 10 разів для запису логів, і в 14 разів швидший на агрегаціях. Це дозволяє зберігати мільярди записів та виконувати ClickHouse аналітику в реальному часі.
Чому журналювання угод критичне для 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 хвилин. Це стало можливим завдяки повному контексту: векторні ознаки, версія моделі, 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 |
|---|---|---|
| Запис (угод/сек) | 50 000 | 5 000 |
| Агрегація по 10 млн рядків | 0.3 сек | 4.2 сек |
| Стиснення | 4-8x | 1.5x |
Дані з ClickHouse Benchmark
Типові помилки при впровадженні
- Відсутність унікального ідентифікатора угоди — ламає зв'язок сигнал-ордер-виконання.
- Логування лише успішних ордерів — ви втрачаєте інформацію про rejected/cancelled ордери.
- Не зберігаються векторні ознаки — неможливо відтворити рішення моделі постфактум.
- Зберігання торгових логів в одній таблиці без партицій — запити по історичних даних сповільнюються на порядок.
Процес роботи
- Аналіз — вивчаємо поточну архітектуру, визначаємо список полів (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-трейдинг-бота. Отримайте консультацію — наші інженери допоможуть налаштувати супровід угод під вашу стратегію.







