MuskatGroup / Продукты
Ethereum: живой монитор двух торговых стратегий
Перенос торгового робота с .NET на Rust: котировки ETH/USDT, отклонение от средней, SMA 3/8 и журнал виртуальных сделок.
Задача
Превратить исходный торговый робот в наглядную демонстрацию: показать живую цену Ethereum, правила принятия решений и каждую виртуальную покупку или продажу. Посетителю не нужны регистрация, биржевые ключи или доступ к управлению.
Две стратегии
Основной режим использует последние 20 закрытых минутных цен. Робот покупает ниже μ − 2σ и продаёт при возвращении к μ. Среднеквадратичное отклонение считается для всей выборки с делением на N.
Дополнительный режим сохраняет алгоритм исходника: пересечение простых скользящих средних SMA 3 и SMA 8. Пересечение вверх открывает позицию, обратное — закрывает. Равенство линий не считается пересечением. Каждая стратегия имеет независимую позицию и не совершает повторных покупок до продажи.
Живые данные и прозрачное исполнение
Rust-сервис раз в десять секунд получает минутные свечи ETH/USDT Spot из публичного API Bybit. Сигналы рассчитываются только по закрытым свечам. Виртуальная сделка получает цену открытия следующей свечи, фиксированный объём — 1 ETH. Комиссии и проскальзывание не моделируются; реальные заявки на биржу не отправляются.
Исторические свечи при старте нужны только для индикаторов: робот не выдаёт прошлые сигналы за совершённые сделки. После перезапуска или разрыва данных пропущенные сделки не достраиваются. Интерфейс показывает устаревание котировок и время последнего получения данных.
Интерфейс
Интерактивный график объединяет цену, индикаторы и метки сделок. Журнал объясняет причины покупки и продажи; выбор записи выделяет событие на графике. Доступны три периода просмотра, русский и английский языки, светлая и тёмная темы, мобильное представление и управление с клавиатуры.
Скриншоты сделаны на работающем демо с настоящими котировками. Пустой журнал стратегии означает отсутствие новых сигналов с момента запуска, а не ошибку.
Архитектура и модернизация
Исходная .NET/Redis-реализация заменена Rust, Axum, Tokio и SQLx. Доменная математика отделена от HTTP, биржевого адаптера и хранения. SQLite транзакционно сохраняет позиции, журнал и точку обработки свечей. OpenAPI служит источником TypeScript-типов для нового React/Vite-интерфейса.
Сервис предоставляет только чтение. Независимый Compose-проект хранит SQLite в постоянном томе; backend выходит к поставщику котировок через отдельную сеть и не публикует порты наружу. Выпуск поддерживает резервирование и откат образов вместе с базой.
Публичная ссылка появится после размещения на отдельном поддомене.