Запуск живого дашборда торгового бота: свечи, Фибоначчи и метрики в реальном времени — MajoTrade
MajoTrade

Запуск живого дашборда торгового бота: свечи, Фибоначчи и метрики в реальном времени

· REPA

Сегодня запустил публичный дашборд торгового бота для Московской биржи. Теперь любой подписчик блога может в реальном времени видеть, что происходит с ботом: какой инструмент торгуется, где сейчас цена относительно уровней Фибоначчи, и какие результаты показывает стратегия.

Дашборд доступен по адресу: 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