​Plaza 2 CGate. Инструкция к применению. Часть 4

​Plaza 2 CGate. Инструкция к применению. Часть 4

Этот пост часть из серии статей посвящённых 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

 

18:21
4370

1 комментарий

13:31
Посмотрите так же как устроен наш открытый и бесплатный коннектор в рамках OsEngine: github.com/AlexWan/OsEngine