Этот пост часть из серии статей посвящённых Plaza2 CGate. Начало здесь
Сегодня посмотрим примеры, которые распространяется биржей. Что там за примеры, как их запустить и с чего лучше начать.
Для того чтобы найти примеры, откроем директорию скачанных ранее примеров, и перейдём в папку SDK:
далее в папку samples:
здесь у нас примеры на разных языках. Я выбрал СиШарп:
И попадаем в папку с примером. Рассмотрим состав:
Общие сведения
1) Все примеры были когда-то написаны для консоли, однако полных проектов нет. Для запуска примеров, создаём консольные проекты в Visual Studio с точными названиями как в примере. Затем копипастим содержимое примеров себе в код.
2) Абсолютно всем примерам нужно чтобы роутер был подключен к серверу биржи. Для этого смотрим часть 2 из этой серии постов. Проверяем логи и делаем так чтобы роутер был готов.
3) Кроме самого кода, в папку проекта нужно добавить
a. файлы инициализации приложения. Это те что начинаются как название нашего проекта, а заканчиваются на .ini
b. схемы репликации. Это то, в каком формате нам Плаза будет пересылать данные. Это я объяснить не смогу и на два листа, читайте мануал.
c. нужно добавить в ссылки проекта: cgate_net. Находиться эта библиотека тоже в папке с дистрибутивами плазы: SpectraCGate/ bin/ cgate_net.dll
Примеры 1 и 2 - сборка стаканов
Начну издалека.
В плазе, нельзя просто взять и подписаться на стаканы, как в СмартКом. Так же нельзя получить стакан в виде таблицы, как из Квик по ДДЕ. В плазе 2 такого типа данных как стакан - НЕТ. Из самого близкого - есть Срез стакана. Кроме среза стакана, можно собрать его самому, из ордерЛога. Но за ордер лог потом надо будет доплачивать ещё. Т.ч. выбирайте кошельком. Я себе выбрал вариант собирать стаканы из среза.
1 пример - получение стакана из "среза" стакана.
2 пример - получение стакана из ордерЛога.
Как мне показалось, собирать в Плазе 2 стаканы - самое сложное, что там есть. Потратил на это больше всего времени, чем на всё остальное. 500 строк класс агрегирующий стаканы из сообщений. Дня три - четыре вычитывал инструкцию, разбирался, почему ничего не работает или работает не так как надо. Затем, обрезал ненужные стаканы, ибо подписываясь на "срезы" - получаем их по ВСЕМУ РЫНКУ, без возможности выбора бумаг!
В общем, эти примеры смотрим в последнюю очередь и если всё остальное получается.
Пример 3 - пример авторизации роутера из CGate
Ничего интересного, в общем. Можно это вообще не использовать в своей программе.
БОльшая часть логики расположена в событиях от объектов Cgate. К этому надо привыкать и прочитать уже к просмотру примеров мануал от биржи номбер 1.
Есть основной поток, который работает в методе Main. Сначала мы создаём объекты CGate и далее уходим в цикл. Внутри этого цикла мы следим за подключением объектов CGate и всё. Этот же поток периодически запрашивает новые сообщения из системы. Метод: conn.Process(1); В этот момент у нас происходит опрос объектов CGate и если у них есть сообщения, нас выносит в коллбеки: ClientMessageCallback в данном случае.
По такому принципу работает в Плазе ВСЁ.
один поток:
1) создаёт подключение
2) создаёт необходимые листнеры и паблишеры
3) следит чтобы все из них были в состоянии Connect
4) заходит в conn.Process(1); и уходит в коллбеки.
5) Усё!
Можно это делать в многопоточном режиме, если озаботиться синхронизацией. Но я не рекомендую. Сделайте сначала с одним.
Пример 4 - неудачный пример получения данных
Это самый важный пример из всех. По идее, он нам должен показать, как нужно получать данные из Плазы. Но - он без колдовства не запускается.
Кто учил Си Шарп исключительно, будет приятно удивлён подачей строк инициализации в Main. После чего происходит дополнительная магия с выбором строки инициализации уже Listnerа, который мы будем открывать.
В общем, чтобы это всё заработало как надо, я себе вырезал в коде строку инициализации в Main и назначал idx - в коде.
Расширяя этот пример новыми листнерами, можно разобраться с тем как вывести из Плазы множество потоков данных одновременно.
Пример 5 - отправка транзакций
Комментарии излишни, если получилось запустить всё остальное, и с этим проблем не должно быть.
Нюансы:
1) название бумаги. Чтобы заработала отправка транзакции, впишите в isin реальную бумагу.
2) Код брокера и код клиента. Эти значения берутся из номера счёта клиента.
Вот так:
Первые четыре char - код брокера, последние три - код клиента.
Итого
Сегодня мы поближе рассмотрели примеры биржи. Надеюсь этого небольшого обзора хватит для того чтобы вы поняли как запустить примеры. А когда это получиться - остальное дело техники.
Здесь и далее в серии, сам код я рассматривать не буду - это сделано в мануалах от биржи и на форуме биржи прекрасно.
Конечный вид самого коннектора у Вас будет зависеть исключительно от объектной модели Вашего робота. Но в этой серии статей мы это обсуждать не будем. Запланировал нечто похожее в серии "Си Шарп Алго". По времени не сориентирую. Надеюсь получиться в ближайшие несколько месяцев.
В следующей статье серии опишу процесс прохождения сертификации Вашего ПО на бирже. Это гораздо легче чем кажется!
Удачных алгоритмов!
P.S.
Обсуждаем в телеграмме: https://t.me/o_s_a_chat
Канал проекта: https://t.me/bad_quant
1 комментарий