Пришло время начать разработку нашего бота. Для подключения я выбрал биржу ByBit (здесь должна быть реферальная ссылка, но я таким не особо увлекаюсь 🙃).
У меня было несколько причин для этого выбора: во-первых, у меня уже был аккаунт на этой бирже; во-вторых, я довольно быстро нашёл nuget-пакет с необходимым функционалом для подключения к API (ссылка на GitHub). Этот пакет позволит нам сэкономить время на формировании HTTP-запросов, предоставляя готовый функционал.
Первым делом создаем пустой проект для приложения на платформе .NET Core.
Далее задаем имя проекта и решения, выбираем фреймворк (я выбрал .NET 8.0, так как ранее не работал с этим фреймворком, и рассматриваю свои пет-проекты как возможность для самообразования).
После этого в Solution Explorer добавляем еще один проект типа Class Library и называем его SharedData. В этом проекте мы будем описывать модели данных, чтобы разные части нашего бота могли совместно их использовать, избегая дублирования кода.
В итоге у нас должно получиться что-то вроде этого.
Теперь нам нужно ознакомиться с менеджером пакетов и установить Bybit.Net, о котором я упоминал ранее. В IDE, которую я использую (Visual Studio 2022), это делается следующим образом:
В открывшемся окне менеджера пакетов на вкладке Browse находим нужный нам пакет, выбираем проекты, в которые его необходимо импортировать, и нажимаем Install.
(Сейчас мы добавили пакет только в проект бота, но в дальнейшем, возможно, он понадобится и в других проектах решения.) В проекте бота создаем файлы BotCore — основной сервис нашего бота и точку входа в его логику, а также BybitApiSettings — класс, в который мы будем считывать из файла настроек данные для подключения к бирже.
BybitApiSettings
BotCore (наследуем от BackgroundService)
Теперь нам нужно добавить в Program.cs логику для запуска наших сервисов.
Этот код представляет собой простое веб-приложение на платформе ASP.NET Core. Вначале импортируются необходимые зависимости: Services и Settings, которые содержат пользовательские сервисы и настройки приложения. Затем создается и настраивается веб-приложение с помощью WebApplication.CreateBuilder(args), где инициализируются коллекции сервисов и объект конфигурации для дальнейшего использования.
Далее настраиваются сервисы. Настройки BybitApiSettings конфигурируются на основе секции, указанной в конфигурационном файле, и добавляется фоновая служба BotCore, которая будет выполняться при старте приложения. Также добавляется поддержка контроллеров MVC и механизма проверки состояния здоровья приложения.
После этого создается объект приложения с помощью builder.Build(), и если приложение не находится в режиме разработки, подключается страница исключений для отображения детальной информации об ошибках.
Затем настраивается маршрутизация и определяются конечные точки приложения. По корневому пути / создается HTTP GET-запрос, который возвращает простую HTML-страницу с ссылками на /Status и /health, а проверка состояния здоровья маппится на маршрут /health.
В заключение, приложение запускается с помощью вызова app.Run(), что инициирует работу веб-сервера и всех настроенных сервисов.
В файл конфигурации приложения appsettings.json нужно добавить блок, откуда будут считываться доступы к API биржи.
(Сами доступы можно без особого труда получить в личном кабинете своего аккаунта на бирже.)
Далее мы будем писать код для подключения к API биржи. Сначала внедрим необходимые зависимости, логгер и настройки подключения к API, а также создадим поле для клиента, который будет отправлять запросы на биржу.
В методе ExecuteAsync, который запускается при старте нашего сервиса, создадим экземпляр клиента для отправки запросов.
Здесь же, в ExecuteAsync, запустим бесконечный цикл, в котором начнем отправлять на биржу тестовые запросы для проверки работоспособности нашего подключения.
(В данном случае мы запрашиваем котировку цены ETH и наш баланс.) Если все сделано правильно, в консоли должны появиться ответы от биржи.
Подключение к API можно считать успешным. В следующей статье мы начнем разработку системы торговых стратегий и попробуем выставить наши первые заявки на бирже.
До встречи, ботоводы 🙃