Разработка системы журналирования сделок AI-трейдинг-бота

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка системы журналирования сделок AI-трейдинг-бота
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    854
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка системы журналирования сделок AI-трейдинг-бота

Система журналирования сделок — фундамент для анализа производительности, отладки ошибок и регуляторного compliance. AI-трейдинг-боту нужна не просто запись факта сделки, но и полный контекст: какие данные получила модель, какое предсказание выдала, почему была принята именно такая позиция.

Что нужно логировать

Предсказание модели: входные признаки (feature vector), версия модели, timestamp предсказания, значение предсказания (score/probability/return forecast), confidence при наличии.

Исполнение ордера: тип ордера, запрошенная цена, исполненная цена, slippage, комиссия, время исполнения.

Контекст рынка: bid/ask spread в момент исполнения, volume в стакане, режим рынка.

P&L: реализованный и нереализованный P&L по каждой позиции, атрибуция P&L по факторам.

Реализация

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()
            }]
        )

Аналитика по логам

ClickHouse позволяет эффективно анализировать миллионы сделок:

-- 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;

Полное журналирование — основа не только compliance, но и непрерывного улучшения модели через анализ ошибочных сделок.