Это полный перечень пунктов программы лояльности для тех, кто зарегистрировался в ALOR как участник нашего сообщества и торгует через ALOR.
Камрады. Это то, что у меня получилось для Вас сделать в рамках нашего сотрудничества с АЛОР. Что-то далось легко, а что-то очень нелегко. Старался, как мог. Надеюсь Вы довольны. Я ДОВОЛЕН:
Мы открыли для Вас чат поддержки с прямым выходом на ТОП менеджеров АЛОР брокера.
В данной статье построчно разберём метод, который занимается подпиской на конкретную реализацию сервера. Что там происходит и зачем это нужно?
Идём и открываем CandleConnector. Сам класс находится в проекте вот здесь:
Поздравляю, товарищи обнаглевшие трейдеры. Не знаю, кто из Вас ему написал с требованием выдать нам скидку. Но человек оказался с чувством юмора и, почитав наш бложик на СмартЛабе, и вправду дал нам скидку.
Т.ч. СПАСИБО! И Иосифу, и камраду, который ему написал.
Напомню, в рамках становления программистом СиШарп, я в своей серии постов «Коннекторы к OsEngine» рекомендую ТРИ курса от Иосифа, которые проходят мои сотрудники.
Это:
1. Основы программирования: https://stepik.org/course/5482/promo
2. Алгоритмы поиска и сортировки: https://stepik.org/course/23981/promo
3. C# для продвинутых: https://stepik.org/course/84983/promo
В большинстве коннекторов OsEngine используется конвертация потоковых данных из JSON объектов. Поговорим о том, как правильно и не правильно поступать при их использовании.
Newtonsoft.Json
Именно эту библиотеку желательно использовать. Никакого смысла плодить в проекте множество преобразователей сообщений в JSON классы нет.
И на сегодняшний день можно говорить о том, что было бы не плохо, если бы она в итоге осталась единственной в нашем проекте для этих целей.
Камрады! Коннектор к ALOR OPEN API добавлен к OsEngine около трёх недель назад. Бета тесты завершены. Пора торговать!
1) Это очень классный коннектор в плане стека. Как крипта. Rest + web sockets. Это современно, это общепринятые стандарты, которые на сотнях бирж существуют. Короче — огонь.
2) Быстрый. Пока в глюках не замечен, только если палкой не тыкаешь.
3) Единственный пока в своём роде на MOEX. Лучшее, что есть из бесплатного. Им мог стать Тиньков Апи первой версии. Но там камрады стек трейдинговый не знали, кто его делал. А вторая команда разработчиков стек технологический изменила в худшую сторону.
4) Сообщения об ошибках при запросах прекрасны. И цифры, и текст. Очень редко, где такое. Спасибо. Это ускорило разработку. Отдельный привет команде за это. Красавчики.
Три различных типа времени приходит из шлюзов. Это супер странно. Вообще нигде такого не видел. Поэтому ставим на ПК МОСКОВСКОЕ ВРЕМЯ, иначе могут быть различные странности.
Продолжаем разговаривать про класс, предоставляющий данные для источников в OsEngine. А именно про класс ConnectorCandles. И в данной статье поговорим о его коде. Что там есть.
Сам класс находится в проекте вот здесь:
В данной статье поговорим об использовании циклов. Какие нужны, а какие смогут уронить наш замечательный терминал. Кроме того, поговорим о синтаксическом сахаре из библиотеки LINQ, которая, как не сложно догадаться по динамике этих записей, тоже под запретом. Почему и как?
Один из самых быстрых циклов, которые существуют. Это основная боевая единица, которую нужно использовать.
Данный цикл не создаёт дополнительных методов в памяти и не является потоконебезопасным. Практически любую ситуацию внутри него можно обработать. Также он позволяет ставить внутри себя точки останова.
Бесконечный цикл с условием продолжения.
Также разрешён к использованию. Имеет все плюсы цикла for.
Этот цикл создаёт метод внутри памяти и не даёт контролировать выбор объекта. В случае, если есть какие-то проблемы с перечислением или листом, выбрасывается неконтролируемое исключение.
Данный цикл нельзя использовать в многопоточном окружении при работе с листами.
Продолжаем разбираться со слоями в OsEngine. И впереди у нас три статьи про класс ConnectorCandles.
Смотрим на картинку:
Класс, предоставляющий данные для источников в роботе. Хранит в себе информацию по подключению. Содержит внутри процедуры для переподключения к серверам в случае разрыва соединений и изменении настроек со стороны пользователя.
Находится в проекте вот здесь:
OsEngine невозможно ускорить многопоточностью в коннекторе. 98% всех задержек находятся в самих роботах. И от того, как их пишут пользователи, зависит скорость работы программы.
Так было не всегда… Были времена, когда казалось, что это не так. Но годы шли, OsEngine шлифовался и ускорялся. С модификацией Aserver, журналов и прочего всё больше становилось очевидно, что задержки именно в роботах.
На сегодняшний момент, даже подписка на 200 или 400 бумаг не ложат стандартную поточную архитектуру сервера, предложенную ниже.
Поэтому делаем, как тут написано. Время экспериментов закончено.
Полный и достаточный список потоков, которые могут и должны быть в любом сервере:
Никакие другие потоки создавать не нужно. Только если этого требует само АПИ. Плюс, это должен быть THREAD, а не Task.
Проблема, о которой поговорим сегодня – генерация хитрых архитектур для коннектора. Сразу же скажу, что коннектор в рамках OsEngine, насколько бы он для вас сложным не был, — очень простая штука, если пользоваться моими советами и вести тесты. Настолько простая, как складной нож. Он очень прост и не нуждается ни в каких дополнениях.
Складной нож не нужно прикручивать к палке, чтобы им управлять.
Складной нож не требует постоянного отмачивания в машинном масле.
И конечно же, складной нож не нуждается в перевязывании изолентой с другими предметами — топорами или вилками. В этом нет смысла.
Самое худшее, что можно сделать, – придумать класс, который будет использоваться разными коннекторами для парсинга данных. Сколько бы я этого не видел, это почти неизбежно приводит к неработоспособности коннектора.
Всё это заканчивалось переделыванием с нуля.
Поэтому:
Совместные классы-парсеры, вёбСокет-обёртки и рест-оболочки для коннекторов запрещены.