Сегодня поговорим об этапах разработки непосредственно исходного кода коннектора. Большими мазками. Как это делаю я, со стороны программирования. Вопросы подготовки и сдачи коннектора пока здесь не рассмотрены. Об этом у нас в других статьях.
Итак, Вы уже начинающий программист:
- Закончили пару курсов Дзеранова, почитали книг, наделали пару тысяч строк кода примеров.
- Понимаете, что такое Rest, WebSocket.
- Немного (или много) разбираетесь в многопоточности.
- Почитали все мои статьи по архитектуре и понимаете, что такое IServer, AServer, IServerRealization и прочее.
- Посмотрели в OsEngine примеры, разобрались как они работают.
- Выбрали себе биржу в работу…
- Что делать!!!???
1. Ищем документацию.
Как это не смешно, но первое, что надо сделать, это определиться с документацией и убедиться, что все нужные документы есть под рукой.
Обычно, если дело касается криптобирж, бывает по две или три одновременно поддерживаемых API для одной площадки. Нужно выбирать крайнее и новое.
В конце этапа должно быть:
- Ссылки на документацию в браузере. На ту, что Вы будете применять.
2. Искать на ГитХаб рабочие примеры на языке C#.
Примера может и не быть, но стоит попробовать.
Для этого я иду на ГитХаб и в поиске вбиваю интересующую меня биржу.
BitGet есть:
В конце этапа (если повезло) должно быть:
- Работающая консолька, которая уже подключается к бирже и что-то делает.
3. Создаём папку и заготовки классов.
Создаём внутри OsEngine папку для своего коннектора. И делаем заготовки классов. Пока пустые. Пустые конструкторы, пустые реализации.
В конце этапа должно быть:
- Папка с названием Вашего коннектора.
- Подпапка под переменные. Entity или Json.
- Файл <Название биржи>Server.cs
- Класс реализации сервера: <Название биржи>ServerRealization в том же файле, что и сервер.
- Файл <Название биржи>ServerPermission.cs
Полезные ссылки:
- Сколько нужно файлов и папок: https://smart-lab.ru/company/os_engine/blog/969978.php
4. Прописываем новый сервер в системе.
Для этого идём в ServerMaster и прописываем его там.
В конце этапа должно быть:
- Перечисление ServerType с новым названием коннектора.
- Новый тип сервера должен быть добавлен в ServerMaster.ServerTypes().
- Новый тип сервера должен быть добавлен в ServerMaster.ServerTypesOsData().
- Создана процедура создания экземпляра сервера в ServerMaster.CreateServer().
- Создана процедура создания разрешений сервера в ServerMaster.GetServerPermission().
- Коннектор должен быть виден в меню создания подключений. Вот здесь:
Полезные ссылки:
- Обзор ServerMaster: https://smart-lab.ru/company/os_engine/blog/976035.php
- Разрешения коннекторов: https://smart-lab.ru/company/os_engine/blog/975730.php
5. Реализуем метод Connect и создаём параметры нужные для этого.
Этот метод у коннектора вызывается первым при попытке запуска сервера.
В конце этапа должно быть:
- Мы должны уметь авторизоваться на бирже.
- Коннектор должен переводить себя в состояние Connect.
Полезные ссылки:
- Поток 1. Как он вызывает Connect: https://smart-lab.ru/company/os_engine/blog/978425.php
- Json стандарты: https://smart-lab.ru/company/os_engine/blog/972551.php
- Rest стандарты: https://smart-lab.ru/company/os_engine/blog/972792.php
- Параметры коннектора: https://smart-lab.ru/company/os_engine/blog/977801.php
6. Реализуем метод GetSecurities и GetPortfolios.
Напоминаю. Когда статус сервера переходит в режим Connect, AServer начинает запрашивать оба этих метода. Поэтому на данном этапе нужно сначала уметь запросить бумаги, а далее научить сервер запрашивать портфели.
В конце этапа должно быть:
- Должен быть список бумаг.
- Должен быть список портфелей.
Полезные ссылки:
- Поток 1. Как он вызывает бумаги и портфели: https://smart-lab.ru/company/os_engine/blog/978425.php
- Как делать Rest запросы: https://smart-lab.ru/company/os_engine/blog/972792.php
7. Реализуем методы доступа к данным OsData.
Если работа с OsData вообще предполагается. Вот эти методы:
В конце этапа должно быть:
- OsData качает все возможные данные по свечкам какие есть в коннекторе.
- OsData качает ленту сделок.
- В разрешениях коннектора должно быть прописано всё, что касается доступных данных для OsData.
Полезные ссылки:
- Как вызываются эти методы: https://smart-lab.ru/company/os_engine/blog/979627.php
8. Реализуем метод активации серий свечек CandleManager.
Напоминаю. На данном этапе уже можно создать робота с данным коннектором в подключении, и CandleManager начнёт стучаться с тем, чтобы мы выдали ему стартовые свечи, вот сюда:
В конце этапа должно быть:
- Робот на старте должен получать свечи по доступным таймфреймам.
- В разрешениях коннектора должно быть прописано всё, что касается доступных таймфреймов в боевом подключении.
Полезные ссылки:
- Как вызываются эти методы: https://smart-lab.ru/company/os_engine/blog/979627.php
9. WebSocket. Реализуем подписку на стаканы и ленту сделок.
Напоминаю. На данном этапе уже можно создать робота с данным коннектором в подключении и CandleConnector начнёт стучаться в подписку на данные, вот сюда:
В конце этапа должно быть:
- В реализации сервера должен быть создан отдельный поток для разбора очереди стаканов и ленты сделок из API.
- Робот на старте должен полностью подписываться на данные.
- Свечи у робота должны перерисовываться в интерфейсе.
- Стаканы должны обновляться у робота.
Полезные ссылки:
- Как делать сокеты: https://smart-lab.ru/company/os_engine/blog/973202.php
- О многопоточности: https://smart-lab.ru/company/os_engine/blog/970542.php
10. Реализуем обновление статуса портфеля и подписку на изменение моих ордеров и моих сделок.
Реализуем для WebSocket методы подписки на соответствующие события.
В конце этапа должно быть:
- Портфели должны быть синхронизированы с тем, что есть на бирже.
- Должны существовать заготовки для приёма MyTrades и Order.
- Модернизированный и полный метод Connect. Все сокеты и поточные данные должны к этому моменту быть реализованы. И можно наконец-то сделать нормальную процедуру создания коннектора. Он переходит в статус Connect только тогда, когда все объекты созданы.
11. Реализуем подачу заявок в систему.
Три первые с картинки точно. Остальные два, если есть…
В конце этапа должно быть:
- Ордера должны выставляться / отзываться.
- Ордера должны менять цену ордеров, если это есть.
- Вы должны реализовать логику Market / Limit отдельно.
- В разрешениях коннектора должно быть прописано всё, что касается реальной торговли. Есть ли Маркеты в наличии, можно ли переставлять ордера…
Полезные ссылки:
- Как вызываются эти методы: https://smart-lab.ru/company/os_engine/blog/979262.php
12. Реализуем экстренную остановку торгов по бумаге.
Идём в ServerPermission своего коннектора и прописываем процедуру экстренного закрытия позиции. Если это не спот крипты. На споте крипты не получится.
В конце этапа должно быть:
- Должен быть реализован функционал экстренной остановки торгов по бумаге.
Полезные ссылки:
- Как это работает: https://smart-lab.ru/company/os_engine/blog/976312.php
13. Реализуем метод Dispose.
На данный момент в целом уже всё готово должно быть, и можно адекватно реализовать процедуру очищения за собой памяти в методе Dispose. Вот так:
В конце этапа должно быть:
- Коннектор должен адекватно подчищать за собой данные и обнулять массивы.
Полезные ссылки:
- Об очистке памяти: https://smart-lab.ru/company/os_engine/blog/975564.php
14. Разбиваем код по регионам и занимаемся комментариями.
На данном этапе нам предстоит сделать код читаемым и разбить класс на регионы. Сделать аккуратные отступы ровные между членами класса.
Полезные ссылки:
- О регионах внутри коннектора: https://smart-lab.ru/company/os_engine/blog/969184.php
15. Тестируем всё вместе автотестами и переписываем половину методов)
На данном этапе пора начинать автотесты и править за собой баги.
Это не очень приятно, но это может занять ещё 10 – 30 % от того времени, что уже было на коннектор потрачено.
В конце этапа должно быть:
- Коннектор должен быть полностью готов к использованию с точки зрения кода.
Полезные ссылки:
- https://smart-lab.ru/company/os_engine/blog/959953.php Смотри главу «Слой автоматических тестов коннектора»
БОНУС!!! Хороший пример. ALOR Open API. 99 % кошерности.
Последний из написанных мной лично коннекторов в конце 2023 года. Уже когда я начал писать инструкции по тому, как надо их делать. Удачно совпало, что стек у АЛОР ровно как у любой биржи криптовалют. Поэтому, ориентируемся сначала на него.
В проекте:
Что в нём отключено:
- Не работает скачка трейдов для OsData.
- В целом, наверно и всё.
Прекрасный. Лучший пример из того, что есть.
БОНУС!!! Хороший пример. GateIO. 95% кошерности.
Это делалось чуть раньше на пару месяцев. И всё ещё содержит некоторые недопустимые штуки. Вроде Linq. Напомню, в текущей редакции эта библиотека полностью запрещена.
Плюс активизация свечных данных для серий сделана по-старому. Но в целом, можно и тут что-то подсмотреть.
В проекте:
А на этом всё!
На данный момент уже 12 человек заняли за собой коннекторы и либо уже их делают, либо начнут с февраля.
Присоединяйся и ты!
Удачных алгоритмов!
Пост из серии «Коннекторы к OsEngine»
Серия о том, как стать настоящим программистом и изменить свою профессию.
Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php
Комментарии открыты для друзей, добавляйтесь!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php