Настройка логирования сделок криптобота под ключ с отчетностью

Вы запускаете торгового бота на Binance, через месяц торговли пытаетесь посчитать P&L, но в логах – только 'Buy 0.1 BTC at 30000'. Ни комиссий, ни проскальзываний, ни контекста стратегии. Знакомая ситуация? **Настройка логирования сделок криптобота под ключ** решает эту проблему: мы внедряем структу

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1009

Вы запускаете торгового бота на Binance, через месяц торговли пытаетесь посчитать P&L, но в логах – только 'Buy 0.1 BTC at 30000'. Ни комиссий, ни проскальзываний, ни контекста стратегии. Знакомая ситуация? Настройка логирования сделок криптобота под ключ решает эту проблему: мы внедряем структурированные JSON-логи с pino, храним их в PostgreSQL+TimescaleDB и строим дашборды P&L за секунды. Наши инженеры с 5+ лет опыта в блокчейн-разработке делают это за 1–3 дня. Закажите настройку — и получите полный аудит каждой сделки.

Почему структурированное логирование критично для аудита?

Логи в JSON-формате парсятся инструментами, plain text — нет. Сравните:

Критерий Plain text (console.log) JSON (pino/winston)
Поиск по полю grep по тексту (ошибки) SQL-запрос к JSONB
Анализ P&L вручную извлекать числа SUM(realizedPnl) за секунду
Фильтр по стратегии нет метаданных WHERE strategy = 'grid'
Скорость обработки 1M записей часы миллисекунды

JSON в 50+ раз быстрее при анализе — это подтверждают бенчмарки. В одном проекте мы обнаружили, что 23% сделок теряли прибыль из-за завышенных комиссий, которые были не видны в plain-логах. Экономия от одной такой находки может составлять $1000+.

Как настроить логирование сделок криптобота под ключ?

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

Минимальный набор событий:

type TradeEvent = | { type: "order_placed"; orderId: string; symbol: string; side: "buy" | "sell"; quantity: number; price: number; orderType: "market" | "limit"; timestamp: number; } | { type: "order_filled"; orderId: string; executedQty: number; executedPrice: number; fee: number; feeCurrency: string; timestamp: number; } | { type: "order_cancelled"; orderId: string; reason: string; timestamp: number; } | { type: "position_opened"; positionId: string; entryPrice: number; size: number; leverage: number; timestamp: number; } | { type: "position_closed"; positionId: string; exitPrice: number; realizedPnl: number; timestamp: number; } | { type: "signal_generated"; strategy: string; signal: string; params: Record<string, unknown>; timestamp: number; } | { type: "error"; code: string; message: string; context: Record<string, unknown>; timestamp: number; }; 

Каждое событие должно содержать strategy, exchange, sessionId — это фильтрует логи по конкретному прогону. Ниже таблица с обязательными полями для каждого типа:

Тип события Обязательные поля
order_placed orderId, symbol, side, quantity, price, orderType
order_filled orderId, executedQty, executedPrice, fee, feeCurrency
order_cancelled orderId, reason
position_opened positionId, entryPrice, size, leverage
position_closed positionId, exitPrice, realizedPnl
signal_generated strategy, signal, params
error code, message, context

Пошаговая инструкция по настройке pino

  1. Замените console.log на pino с JSON-форматом.
  2. Добавьте базовые поля (strategy, exchange, sessionId) в каждый вызов.
  3. Настройте транспорт: pino-pretty для dev, JSON для production.
  4. Подключите async writer для записи в stdout или файл.
  5. Интегрируйте отправку логов в PostgreSQL через logstash или прямой writer.

Пример минимальной конфигурации:

import pino from "pino"; const logger = pino({ level: process.env.LOG_LEVEL ?? "info", base: { strategy: process.env.STRATEGY_NAME, exchange: process.env.EXCHANGE, sessionId: process.env.SESSION_ID ?? Date.now().toString(36), }, transport: process.env.NODE_ENV === "development" ? { target: "pino-pretty" } : undefined, }); logger.info({ type: "order_filled", orderId, executedQty, executedPrice, fee }, "Order filled"); 

Хранение: PostgreSQL + TimescaleDB

TimescaleDB автоматически сегментирует данные по времени (гипертаблицы), что даёт скорость запросов к миллионам строк за миллисекунды. Обычный PostgreSQL без расширения будет тормозить на логах с частотой >100 событий/сек.

CREATE TABLE trade_events ( id BIGSERIAL, session_id TEXT NOT NULL, strategy TEXT NOT NULL, exchange TEXT NOT NULL, event_type TEXT NOT NULL, payload JSONB NOT NULL, ts TIMESTAMPTZ NOT NULL DEFAULT now(), PRIMARY KEY (id, ts) ); SELECT create_hypertable('trade_events', 'ts'); CREATE INDEX ON trade_events (session_id, ts DESC); CREATE INDEX ON trade_events USING GIN (payload); 

С TimescaleDB запрос "все сделки стратегии X за прошлую неделю" выполняется за миллисекунды даже на миллионах строк.

Как настроить P&L анализ из логов?

SELECT strategy, date_trunc('day', ts) AS day, COUNT(*) FILTER (WHERE event_type = 'order_filled') AS trades, SUM((payload->>'executedQty')::numeric * (payload->>'executedPrice')::numeric) FILTER (WHERE payload->>'side' = 'sell') AS gross_revenue, SUM((payload->>'fee')::numeric) FILTER (WHERE event_type = 'order_filled') AS total_fees, SUM((payload->>'realizedPnl')::numeric) FILTER (WHERE event_type = 'position_closed') AS realized_pnl FROM trade_events WHERE ts > now() - interval '30 days' GROUP BY strategy, day ORDER BY day DESC; 

Этот запрос даёт дневную P&L по стратегиям, учитывая комиссии — то, что обычно упускают в простых логах.

Алерты на аномалии

Логирование бесполезно без реакции на проблемы. Простой мониторинг через периодический запрос:

async function checkAnomalies() { const recentErrors = await db.countEvents({ type: "error", since: minutesAgo(5) }); if (recentErrors > 10) await alertService.send("High error rate: " + recentErrors + " errors in 5m"); const lastFill = await db.lastEventTime({ type: "order_filled" }); if (minutesSince(lastFill) > 60 && isMarketHours()) { await alertService.send("No fills in 60 minutes — bot may be stuck"); } } 

Добавьте алерт в Telegram при >N ошибках или отсутствии заполнений. Ошибка проскальзывания всего 0.1% может стоить $500 в день — своевременное оповещение спасает бюджет.

Что входит в работу

  • Замена console.log на pino/winston с JSON-форматом
  • Добавление sessionId, strategy, exchange во все события
  • Таблица trade_events в PostgreSQL с индексами и TimescaleDB
  • Async writer (буферизованная вставка батчами, не блокирует торговый loop)
  • Базовый SQL-запрос P&L по дням
  • Алерт в Telegram при >N ошибках за период
  • Документация по схеме логов и примерам запросов
  • Деплой на ваш сервер или облако

Почему нас выбирают

  • 5+ лет опыта в блокчейн-разработке (Ethereum, Solana, BNB Chain)
  • Более 50 проектов по торговым ботам и DeFi
  • Гарантия настройки: если через месяц что-то не работает, исправляем бесплатно
  • Используем только проверенные инструменты: pino, TimescaleDB, Telegram Bot API
  • Работаем удалённо и в офисе (Минск, BY)

Сроки и стоимость

Базовая настройка занимает от 1 до 3 дней. Стоимость рассчитывается индивидуально в зависимости от сложности стратегии и объёма логов. Одна обнаруженная вовремя ошибка может сохранить до $2000, поэтому проект окупается за 1–2 недели.

Для точной оценки пришлите описание вашего бота и требования по логированию. Мы подготовим коммерческое предложение в течение 24 часов. Свяжитесь с нами в Telegram или по email — обсудим детали. Не откладывайте на завтра — закажите настройку сейчас.