Финтех и алготрейдинг

BybitBot

Настольное приложение для управления торговлей бессрочными фьючерсами одновременно на неограниченном числе биржевых счетов из единого интерфейса. Поддерживаются биржи Bybit и MEXC, по всем подключенным аккаунтам в реальном времени строится сводная картина балансов, открытых позиций и прибыли, а выставление, изменение и закрытие ордеров выполняется на всех активных счетах одним действием с автоматическим пересчетом объема под баланс каждого. Продукт решает задачу профессиональной синхронной торговли, при которой ручное дублирование сделок по десяткам счетов физически невозможно и неизбежно приводит к ошибкам и расхождению цен входа.
C# WPF

Задача

Управление торговлей сразу на множестве счетов через штатные веб-интерфейсы бирж непрактично. Каждую сделку приходится вручную повторять на каждом аккаунте, заново пересчитывать объем под индивидуальный баланс и плечо, отдельно задавать тейк-профит и стоп-лосс. На волатильном рынке задержка даже в минуты дает разные цены входа и прямые убытки. Параллельно требовалось вести сводный учет прибыли по всем счетам с разбивкой по периодам и автоматическим расчетом комиссионного вознаграждения за управление.
Ключевые требования:
  • единый терминал для работы с несколькими биржами и произвольным количеством аккаунтов;
  • выставление, доливка, частичное и полное закрытие позиций сразу на всех активных счетах одним действием с автоматическим расчетом объема как доли от баланса каждого счета;
  • управление тейк-профитом и стоп-лоссом как по абсолютной цене, так и по проценту доходности с мгновенным взаимным пересчетом;
  • обновление балансов и позиций в режиме реального времени;
  • отчетность по прибыли за день, неделю, месяц, год и произвольный диапазон дат с учетом комиссии.

Решение

Реализовано настольное приложение на C# и WPF с собственным слоем абстракции над биржами. В основе лежит единый контракт работы с биржей, от которого наследуются конкретные адаптеры Bybit и MEXC. Вся бизнес-логика терминала оперирует этим контрактом и не знает деталей конкретного API, поэтому подключение новой биржи сводится к написанию одного изолированного адаптера без изменения остального кода.
Торговые операции построены по принципу веерного исполнения: одно действие транслируется во все активные счета, причем объем для каждого вычисляется как заданный процент от его собственного баланса и округляется до шага лота конкретного инструмента. Поверх этого работает движок агрегации, который собирает позиции и лимитные ордера со всех аккаунтов и сводит их в единую таблицу с усредненной ценой входа и суммарной нереализованной и реализованной прибылью.
Данные обновляются непрерывным асинхронным циклом опроса с защитой от наложения итераций. Управление риском вынесено в отдельный модуль, где тейк-профит и стоп-лосс задаются и в цене, и в проценте ROI с двусторонним пересчетом на лету. Блок отчетности постранично выгружает историю закрытых сделок за год и формирует сводку прибыли по каждому счету с автоматическим расчетом комиссии. Дополнительно встроена защита приложения от несанкционированного запуска через привязку к оборудованию и удаленный механизм отзыва доступа.

Архитектура и сложности

Унификация разнородных биржевых API. Bybit и MEXC отличаются структурой эндпоинтов, форматами ответов и моделью данных по позициям и ордерам. Различия скрыты за общим интерфейсом, благодаря чему верхний уровень приложения работает с любой биржей единообразно, а специфика инкапсулирована внутри адаптеров.
Подпись запросов и синхронизация времени. Каждый приватный запрос подписывается по HMAC-SHA256, при этом у бирж разные схемы формирования подписываемой строки. Перед каждым подписанным вызовом запрашивается серверное время биржи, что удерживает метку в пределах допустимого окна recvWindow и исключает отказы из-за расхождения локальных и серверных часов.
Конкурентность и отзывчивость интерфейса. Цикл опроса работает асинхронно с интервалом в одну секунду, флаг занятости предотвращает запуск новой итерации поверх незавершенной, а обновление элементов выполняется через маршалинг в UI-поток. Интерфейс остается отзывчивым даже при опросе многих счетов сразу.
Агрегация позиций по счетам. Позиции и лимитные ордера сопоставляются по инструменту, направлению, плечу и идентификатору ордера, после чего сводятся в консолидированное представление с корректным усреднением цены и суммированием прибыли. Это дает целостную картину портфеля вместо разрозненных данных по отдельным аккаунтам.
Точность денежных расчетов. Все финансовые вычисления ведутся на decimal, объем округляется до шага лота инструмента, а форматирование чисел приведено к инвариантной культуре, чтобы разделитель дроби не ломал запросы к API. Это устраняет ошибки округления, характерные для расчетов с плавающей точкой.
Устойчивость к сбоям. Сетевые вызовы и операции с файлами конфигурации обернуты в обработку ошибок с повторными попытками, любая ошибка биржи всплывает в журнал интерфейса и не роняет приложение. Терминал продолжает работу при временных сбоях сети и блокировках файлов.
Постраничная выгрузка истории. История закрытых сделок собирается курсорной пагинацией недельными окнами на глубину до года, после чего агрегируется в отчет с расчетом комиссии по каждому счету.

Результат

  • Тиражирование сделки по десяткам счетов сокращено с нескольких минут ручной работы до одного действия, а параметры риска по всем аккаунтам гарантированно идентичны.
  • Сводные данные по балансам и позициям обновляются раз в секунду, что обеспечивает контроль портфеля близко к реальному времени.
  • Поддержаны две биржи через единый интерфейс, подключение следующей локализовано в одном адаптере и не затрагивает остальной код.
  • История прибыли собирается на глубину до 12 месяцев и автоматически сводится в отчет по периодам с расчетом комиссионного вознаграждения.
  • Полностью исключены ручные ошибки расчета объема и дублирования ордеров, а точность денежных операций обеспечена арифметикой decimal.
  • Приложение защищено от несанкционированного запуска привязкой к оборудованию и удаленным отзывом доступа.

Стек

C#, .NET Framework 4.8, WPF и XAML, асинхронное программирование на async/await и Task, HttpClient, REST API Bybit v5 и MEXC Contract, подпись HMAC-SHA256, Newtonsoft.Json, кастомные темы оформления через ResourceDictionary, паттерн адаптера для абстракции бирж. 
Сюда Туда