В нескольких предыдущих постах серии мы разговаривали про IServer, свойства и методы, которые в нём есть. Их много и довольно разных. При этом каждое отдельно взятое API что-то поддерживает, а что-то нет. О том, что конкретно коннектор поддерживает, OsEngine должен знать ДО того, как начнёт запрашивать неработающий функционал. Для этого ServerPermission и существует.
Например, данные могут быть только свечные, или может не быть 15 минутных свечек. Или API может вообще не поддерживать скачку глубоких исторических данных. Или API не поддерживает какие-то торговые операции: нет Market ордеров, не работает перестановка цены ордера.
1. Разрешения для OsData. Какие данные доступны для скачивания.
2. Разрешения для торговли. Если это торговый сервер.
1. Доступны ли свечки с таймфреймом ниже минуты. Именно для скачивания в качестве исторических данных. На данный момент это реализовано только для FINAM.
2. Доступны ли свечки таймфреймом выше минуты.
3. Доступна ли для скачивания лента сделок.
4. Доступны ли для скачивания и сохранения стаканы котировок.
5.1. MarketOrderIsSupport
Поддерживает ли коннектор заявки типа Market. Это запрашивает CandleConnector, когда пересылает через себя ордера.
Иными словами, реализована ли разница между Limit и Market ордерами в IServerRealization, вот здесь:
5.2. IsCanChangeOrderPrice
Может ли данный коннектор изменять цену ордера без его отзыва, через спец методы.
Иными словами, реализован ли метод смены цены ордера в IServerRealization, вот здесь:
5.3. IsUseLotToCalculationProfit
Нужно ли для расчёта прибыли по позициям использовать лотность бумаги. Нужно для MOEX пока что. Возможно ещё где-то, но это не точно.
Используется в классе Position:
5.4. TradeTimeFramePermission
Таймфреймы доступные для торговли.
5.5. WaitTimeAfterFirstStartToSendOrders
Каждый коннектор имеет своё собственное время на полный запуск. Например коннектор Плаза 2 нуждается во времени на загрузку ленты сделок, которую они зачем-то качает сразу по всем инструментам и всему рынку. При этом формально он уже подключен и готов работе, но всё ещё занят. У каждого сервера по идее это время может быть разным. Ориентируйтесь на минимум в 10 секунд.
Используется в AServer, не давая ордерам уходить в очереди на исполнение, если положенное время ещё не прошло:
5.6. UseStandartCandlesStarter
Серии свечей нуждаются в базовой активации. Про это будет отдельная статья. Не у всех коннекторов активация свечей стандартна, но у 95% всех в итоге этот параметр должен стоять в TRUE.
Используется в CandleManager, во время стандартного запуска серии свечек:
5.7. ManuallyClosePositionOnBoard
Во время просмотра позиций по какому-то коннектору, есть возможность их закрыть руками. Вот из этого интерфейса:
Про это будет отдельная статья. Чтобы эти кнопки появились, придётся попотеть.
5.8. AServerOrderHub. Разрешения для запроса ордеров у АПИ по экстренным каналам
Под коннектором есть отдельный объект, который следит за тем чтобы ордера не терялись. Запрашивает активные ордера после перезагрузки и запрашивает статусы ордеров когда о них не пришёл стандартный ответ.
Про этот пункт будет отдельная статья.
Каждый коннектор сделанный с 2023 года должен содержать реализацию данного класса с разрешениями. Посмотрим на реализацию разрешений сервера на примере Аlor.
Расположение:
Идём в место создание всех разрешений для серверов. Это класс ServerMaster. Этот класс является статичным и виден из всего приложения:
Внутри класса ServerMaster создание, хранение и доступ к разрешениям серверов хранятся в регионе «Access to servers permissions»:
1. Ранее созданные разрешения.
2. Типы серверов для которых запрашивали разрешения, но их реализации нет. Добавлено для оптимизации, чтобы каждый запрос не искать разрешение, если его нет.
3. Блокировка многопоточного доступа к функциям создания разрешений.
4. Метод запроса разрешений для коннектора.
Внутри метода «GetServerPermission» расположено создание разрешений для Аlor (И других разрешений) коннектора:
Данный класс в будущем будет и дальше расширяться. Это будет позволять уменьшать связанность проекта и ускорять производство коннекторов. Было бы замечательно, если бы вы умели и знали как посмотреть все места его использования.
Жмём на методе GetServerPermission правой кнопкой мыши и в меню нажимаем на «Find All References»:
Всплывёт окно, на 06.01.2024 выглядит это так:
0. Автотесты в счёт не берём. Про них говорить будем отдельно.
Удачных алгоритмов!
Серия о том, как стать настоящим программистом и изменить свою профессию.
Оглавление и смыслы здесь: 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