rss

Профиль компании

Финансовые компании

Блог компании Os_Engine | Разное #7. Последовательность создания коннектора в разработке. #69

Сегодня поговорим об этапах разработки непосредственно исходного кода коннектора. Большими мазками. Как это делаю я, со стороны программирования. Вопросы подготовки и сдачи коннектора пока здесь не рассмотрены. Об этом у нас в других статьях.

Итак, Вы уже начинающий программист:

  1. Закончили пару курсов Дзеранова, почитали книг, наделали пару тысяч строк кода примеров.
  2. Понимаете, что такое Rest, WebSocket.
  3. Немного (или много) разбираетесь в многопоточности.
  4. Почитали все мои статьи по архитектуре и понимаете, что такое IServer, AServer, IServerRealization и прочее.
  5. Посмотрели в OsEngine примеры, разобрались как они работают.
  6. Выбрали себе биржу в работу…
  7. Что делать!!!???

Разное #7. Последовательность создания коннектора в разработке. #69

1. Ищем документацию.

Как это не смешно, но первое, что надо сделать, это определиться с документацией и убедиться, что все нужные документы есть под рукой.

Обычно, если дело касается криптобирж, бывает по две или три одновременно поддерживаемых API для одной площадки. Нужно выбирать крайнее и новое.

В конце этапа должно быть:

  1. Ссылки на документацию в браузере. На ту, что Вы будете применять.

 

2. Искать на ГитХаб рабочие примеры на языке C#.

Примера может и не быть, но стоит попробовать.

Для этого я иду на ГитХаб и в поиске вбиваю интересующую меня биржу.

BitGet есть:

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа (если повезло) должно быть:

  1. Работающая консолька, которая уже подключается к бирже и что-то делает.

 

3. Создаём папку и заготовки классов.

Создаём внутри OsEngine папку для своего коннектора. И делаем заготовки классов. Пока пустые. Пустые конструкторы, пустые реализации.

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа должно быть:

  1. Папка с названием Вашего коннектора.
  2. Подпапка под переменные. Entity или Json.
  3. Файл <Название биржи>Server.cs
  4. Класс реализации сервера: <Название биржи>ServerRealization в том же файле, что и сервер.
  5. Файл <Название биржи>ServerPermission.cs

Полезные ссылки:

  1. Сколько нужно файлов и папок: https://smart-lab.ru/company/os_engine/blog/969978.php

 

4. Прописываем новый сервер в системе.

Для этого идём в ServerMaster и прописываем его там.

В конце этапа должно быть:

  1. Перечисление ServerType с новым названием коннектора.
  2. Новый тип сервера должен быть добавлен в ServerMaster.ServerTypes().
  3. Новый тип сервера должен быть добавлен в ServerMaster.ServerTypesOsData().
  4. Создана процедура создания экземпляра сервера в ServerMaster.CreateServer().
  5. Создана процедура создания разрешений сервера в ServerMaster.GetServerPermission().
  6. Коннектор должен быть виден в меню создания подключений. Вот здесь:

Разное #7. Последовательность создания коннектора в разработке. #69

Полезные ссылки:

  1. Обзор ServerMaster: https://smart-lab.ru/company/os_engine/blog/976035.php
  2. Разрешения коннекторов: https://smart-lab.ru/company/os_engine/blog/975730.php

 

5. Реализуем метод Connect и создаём параметры нужные для этого.

Этот метод у коннектора вызывается первым при попытке запуска сервера.

В конце этапа должно быть:

  1. Мы должны уметь авторизоваться на бирже.
  2. Коннектор должен переводить себя в состояние Connect.

Полезные ссылки:

  1. Поток 1. Как он вызывает Connect: https://smart-lab.ru/company/os_engine/blog/978425.php
  2. Json стандарты: https://smart-lab.ru/company/os_engine/blog/972551.php
  3. Rest стандарты: https://smart-lab.ru/company/os_engine/blog/972792.php
  4. Параметры коннектора: https://smart-lab.ru/company/os_engine/blog/977801.php

 

6. Реализуем метод GetSecurities  и GetPortfolios.

Напоминаю. Когда статус сервера переходит в режим Connect, AServer начинает запрашивать оба этих метода. Поэтому на данном этапе нужно сначала уметь запросить бумаги, а далее научить сервер запрашивать портфели.

В конце этапа должно быть:

  1. Должен быть список бумаг.
  2. Должен быть список портфелей.

Полезные ссылки:

  1. Поток 1. Как он вызывает бумаги и портфели: https://smart-lab.ru/company/os_engine/blog/978425.php
  2. Как делать Rest запросы: https://smart-lab.ru/company/os_engine/blog/972792.php

 

7. Реализуем методы доступа к данным OsData.

Если работа с OsData вообще предполагается. Вот эти методы:

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа должно быть:

  1. OsData качает все возможные данные по свечкам какие есть в коннекторе.
  2. OsData качает ленту сделок.
  3. В разрешениях коннектора должно быть прописано всё, что касается доступных данных для OsData.

Полезные ссылки:

  1. Как вызываются эти методы: https://smart-lab.ru/company/os_engine/blog/979627.php

 

8. Реализуем метод активации серий свечек CandleManager.

Напоминаю. На данном этапе уже можно создать робота с данным коннектором в подключении, и CandleManager начнёт стучаться с тем, чтобы мы выдали ему стартовые свечи, вот сюда:

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа должно быть:

  1. Робот на старте должен получать свечи по доступным таймфреймам.
  2.  В разрешениях коннектора должно быть прописано всё, что касается доступных таймфреймов в боевом подключении.

Полезные ссылки:

  1. Как вызываются эти методы: https://smart-lab.ru/company/os_engine/blog/979627.php

 

9. WebSocket. Реализуем подписку на стаканы и ленту сделок.

Напоминаю. На данном этапе уже можно создать робота с данным коннектором в подключении и CandleConnector начнёт стучаться в подписку на данные, вот сюда:

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа должно быть:

  1. В реализации сервера должен быть создан отдельный поток для разбора очереди стаканов и ленты сделок из API.
  2. Робот на старте должен полностью подписываться на данные.
  3. Свечи у робота должны перерисовываться в интерфейсе.
  4. Стаканы должны обновляться у робота.

Полезные ссылки:

  1. Как делать сокеты: https://smart-lab.ru/company/os_engine/blog/973202.php
  2. О многопоточности: https://smart-lab.ru/company/os_engine/blog/970542.php

 

10. Реализуем обновление статуса портфеля и подписку на изменение моих ордеров и моих сделок.

Реализуем для WebSocket методы подписки на соответствующие события.

В конце этапа должно быть:

  1. Портфели должны быть синхронизированы с тем, что есть на бирже.
  2. Должны существовать заготовки для приёма MyTrades и Order.
  3. Модернизированный и полный метод Connect. Все сокеты и поточные данные должны к этому моменту быть реализованы. И можно наконец-то сделать нормальную процедуру создания коннектора. Он переходит в статус Connect только тогда, когда все объекты созданы.

 

11. Реализуем подачу заявок в систему.

Три первые с картинки точно. Остальные два, если есть…

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа должно быть:

  1. Ордера должны выставляться / отзываться.
  2. Ордера должны менять цену ордеров, если это есть.
  3. Вы должны реализовать логику Market / Limit отдельно.
  4. В разрешениях коннектора должно быть прописано всё, что касается реальной торговли. Есть ли Маркеты в наличии, можно ли переставлять ордера…

Полезные ссылки:

  1. Как вызываются эти методы: https://smart-lab.ru/company/os_engine/blog/979262.php

 

12. Реализуем экстренную остановку торгов по бумаге.

Идём в ServerPermission своего коннектора и прописываем процедуру экстренного закрытия позиции. Если это не спот крипты. На споте крипты не получится.

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа должно быть:

  1. Должен быть реализован функционал экстренной остановки торгов по бумаге.

Полезные ссылки:

  1. Как это работает: https://smart-lab.ru/company/os_engine/blog/976312.php

 

13. Реализуем метод Dispose.

На данный момент в целом уже всё готово должно быть, и можно адекватно реализовать процедуру очищения за собой памяти в методе Dispose. Вот так:

Разное #7. Последовательность создания коннектора в разработке. #69

В конце этапа должно быть:

  1. Коннектор должен адекватно подчищать за собой данные и обнулять массивы.

Полезные ссылки:

  1. Об очистке памяти: https://smart-lab.ru/company/os_engine/blog/975564.php

 

14. Разбиваем код по регионам и занимаемся комментариями.

На данном этапе нам предстоит сделать код читаемым и разбить класс на регионы. Сделать аккуратные отступы ровные между членами класса.

Полезные ссылки:

  1. О регионах внутри коннектора: https://smart-lab.ru/company/os_engine/blog/969184.php

 

15. Тестируем всё вместе автотестами и переписываем половину методов)

На данном этапе пора начинать автотесты и править за собой баги.

Это не очень приятно, но это может занять ещё 10 – 30 % от того времени, что уже было на коннектор потрачено.

В конце этапа должно быть:

  1. Коннектор должен быть полностью готов к использованию с точки зрения кода.

Полезные ссылки:

  1. https://smart-lab.ru/company/os_engine/blog/959953.php Смотри главу «Слой автоматических тестов коннектора»

 

БОНУС!!! Хороший пример. ALOR Open API. 99 % кошерности.

Последний из написанных мной лично коннекторов в конце 2023 года. Уже когда я начал писать инструкции по тому, как надо их делать. Удачно совпало, что стек у АЛОР ровно как у любой биржи криптовалют. Поэтому, ориентируемся сначала на него.

В проекте:

Разное #7. Последовательность создания коннектора в разработке. #69

Что в нём отключено:

  1. Не работает скачка трейдов для OsData.
  2. В целом, наверно и всё.

Прекрасный. Лучший пример из того, что есть.

БОНУС!!! Хороший пример. GateIO. 95% кошерности.

Это делалось чуть раньше на пару месяцев. И всё ещё содержит некоторые недопустимые штуки. Вроде Linq. Напомню, в текущей редакции эта библиотека полностью запрещена.

Плюс активизация свечных данных для серий сделана по-старому. Но в целом, можно и тут что-то подсмотреть.

В проекте:

Разное #7. Последовательность создания коннектора в разработке. #69

А на этом всё!

На данный момент уже 12 человек заняли за собой коннекторы и либо уже их делают, либо начнут с февраля.

Присоединяйся и ты!

Разное #7. Последовательность создания коннектора в разработке. #69

Удачных алгоритмов!

Пост из серии «Коннекторы к OsEngine»

Серия о том, как стать настоящим программистом и изменить свою профессию.

Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php

Комментарии открыты для друзей, добавляйтесь!

OsEngine: https://github.com/AlexWan/OsEngine
FAQ: https://o-s-a.net/os-engine-faq
Поддержка 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

Разное #7. Последовательность создания коннектора в разработке. #69

★2
1 комментарий
Лучший пост из серии
avatar

теги блога Алексей Ван <o-s-a.net>

....все тэги



UPDONW
Новый дизайн