Запуск живого дашборда торгового бота: свечи, Фибоначчи и метрики в реальном времени
Сегодня запустил публичный дашборд торгового бота для Московской биржи. Теперь любой подписчик блога может в реальном времени видеть, что происходит с ботом: какой инструмент торгуется, где сейчас цена относительно уровней Фибоначчи, и какие результаты показывает стратегия.
Дашборд доступен по адресу: bot.majotrade.net
Что показывает дашборд
Свечной график с уровнями Фибоначчи
Центральная часть дашборда – интерактивный свечной график фьючерса GAZPF (Газпром, срочный рынок FORTS). На графике отображаются последние 200 пятиминутных свечей с наложенными уровнями Фибоначчи:
- Swing High / Swing Low – границы последнего значимого свинга
- 0.236, 0.382, 0.500, 0.618, 0.786 – уровни коррекции
- Каждый уровень раскрашен своим цветом для быстрого визуального восприятия
График поддерживает масштабирование и прокрутку – можно приблизить конкретный участок и рассмотреть паттерны.
Статус бота
В верхней части дашборда отображается текущее состояние:
- Инструмент: GAZPF@RTSX
- Режим: Fibonacci (стратегия на основе уровней Фибоначчи + DeMark)
- Статус: idle / signal_detected
- Тренд: UP / DOWN / Neutral
Когда бот обнаруживает торговый сигнал, статус меняется на “signal_detected”, и на графике появляются линии входа, take-profit и stop-loss.
Метрики торговли
Панель метрик показывает:
- Общее количество сделок
- Win rate (процент прибыльных)
- Profit factor (отношение прибыли к убыткам)
- P&L за весь период и за сегодня
Бот работает в dry-run режиме (без реальных ордеров), поэтому сейчас метрики отражают результаты бэктестинга и симулированных сделок.
Как это устроено
Архитектура
Дашборд состоит из трёх компонентов:
1. WASM-приложение (фронтенд)
Написано на Rust с использованием фреймворка egui. Компилируется в WebAssembly и работает прямо в браузере – без сервера, без JavaScript. Рендеринг графика через библиотеку egui_plot.
Свечи отрисовываются примитивами: - Polygon – заливка тела свечи (зелёная для бычьих, красная для медвежьих) - Line – вертикальная линия тени от low до high - HLine – горизонтальные уровни Фибоначчи с подписями
2. Экспортёр данных (бэкенд)
Rust-бинарник dashboard_export подключается к PostgreSQL, собирает свечи, метрики и состояние Фибоначчи, формирует JSON-файл и загружает его на хостинг через FTP.
Запускается по cron каждые 5 минут в торговые часы:
*/5 10-23 * * * /home/sergey/finam-rs-bot/scripts/export_dashboard.sh
3. Торговый сервер (archbook)
Домашний сервер на Arch Linux, который: - Получает данные от Finam через gRPC - Собирает 5-минутные свечи в PostgreSQL - Запускает торгового бота с Fibonacci-стратегией - Генерирует и выгружает JSON для дашборда
Все компоненты управляются через systemd и Ansible.
Стек технологий
- Rust – торговый бот, сбор данных, экспортёр дашборда
- egui + eframe – UI фреймворк для WASM-приложения
- egui_plot – библиотека графиков (свечи, линии, полигоны)
- trunk – сборщик WASM-приложений из Rust
- PostgreSQL – хранение свечей, сделок, метрик
- Ansible – деплой бинарников на торговый сервер
- FTP + cron – доставка JSON на хостинг
Баги первого дня
Запуск не обошёлся без сюрпризов. В первый же день обнаружил и исправил два серьёзных бага.
Все свечи были зелёными
На графике все 200 свечей отображались как зелёные прямоугольники без верхних и нижних теней. Сравнение с TradingView показало, что реальная картина совсем другая – примерно половина свечей должна быть красной.
Причина оказалась в коде сбора данных: open_price ошибочно устанавливался равным min_price, а close_price – равным max_price. В результате close всегда >= open (зелёная свеча), а тело свечи занимало весь диапазон high-low (нет теней).
Фикс: начал отслеживать реальные цены первой и последней сделки в каждом 5-минутном интервале. Дополнительно обновил 313 строк исторических данных через SQL JOIN с таблицей candles, где OHLC были корректными.
Результат: вместо 200 зелёных свечей – 154 зелёных, 46 красных и 90 с видимыми тенями.
P&L был занижен в 100 раз
Фьючерсы GAZPF и SBERF имеют множитель: 1 ценовой пункт = 100 RUB. Бот считал P&L без этого множителя, показывая “прибыль 0.20 RUB” вместо реальных 20 RUB.
Фикс: добавил параметр point_value с автодетектом по инструменту (GAZPF/SBERF = 100, остальные = 1). Исправлены 17 мест вычисления P&L по всей кодовой базе.
Что дальше
Дашборд уже работает и обновляется каждые 5 минут. В ближайших планах:
- Реальные сделки – перевод бота из dry-run в live-режим (когда метрики начнут отражать реальный P&L)
- История сделок – таблица с последними входами/выходами и причинами закрытия позиций
- Мульти-инструмент – добавление SBERF на отдельную вкладку
Ссылка на дашборд: bot.majotrade.net