Gambler
Gambler личный блог
Вчера в 18:15

Плаза-протокол: что это и зачем он нужен

Привет, друзья!

Раз никто не хочет писать про Плаза-протокол без рекламной воды, я решил взять на себя смелость. Готовьтесь к техно-экскурсии с юмором и без занудства. Давайте разберем, что это за штуковина такая – Плаза-протокол, как он работает, и почему его стоит заменить на что-то более современное.

Плаза-протокол: что это и зачем он нужен

Что такое Плаза-протокол?

Плаза-протокол (Plaza II) — это коммуникационный протокол, разработанный Московской биржей для обеспечения высокоскоростной и надежной передачи торговой и рыночной информации между участниками торгов. Он состоит из нескольких компонентов, каждый из которых выполняет свою важную роль.

Основные компоненты Плаза-протокола

  1. Системные библиотеки Plaza-2
  2. Маршрутизатор сообщений P2MQRouter
  3. Шлюзовая библиотека cgate

Как установить и настроить Плаза-протокол

Для начала работы с Плаза-протоколом необходимо установить соответствующие компоненты. Вот пример установки и настройки на Linux:

Установка из zip-архива

<code>chmod 755 ./install.sh
./install.sh ./cgate_linux_amd64-7.12.0.103.zip
</code>

Затем укажите логин и пароль для подключения к системе:

<code>[AS:NS]
USERNAME=<your login>
PASSWORD=<your password>
</code>

Создание и управление соединениями

Пример создания соединения:

<code>cg_conn_t* conn;
cg_err_t result = cg_conn_new("p2tcp://127.0.0.1:4001;app_name=test", &conn);
if (result != CG_ERR_OK) {
    printf("Error creating connection: %d
", result);
    return -1;
}

result = cg_conn_open(conn, 0);
if (result != CG_ERR_OK) {
    printf("Error opening connection: %d
", result);
    cg_conn_destroy(conn);
    return -1;
}

// Обработка соединения
cg_conn_process(conn, CG_TIMEOUT_INFINITE);

// Закрытие и уничтожение соединения
cg_conn_close(conn);
cg_conn_destroy(conn);
</code>

Работа с подписчиками и публикаторами

Подписчики и публикаторы играют ключевую роль в Плаза-протоколе. Они привязаны к конкретному соединению и обрабатываются из того же потока, что и соединение.

Пример создания подписчика:

<code>cg_listener_t* listener;
result = cg_lsn_new(conn, "p2repl://FORTS_FUTAGGR50_REPL", &listener);
if (result != CG_ERR_OK) {
    printf("Error creating listener: %d
", result);
    cg_conn_close(conn);
    cg_conn_destroy(conn);
    return -1;
}

result = cg_lsn_open(listener, 0);
if (result != CG_ERR_OK) {
    printf("Error opening listener: %d
", result);
    cg_lsn_destroy(listener);
    cg_conn_close(conn);
    cg_conn_destroy(conn);
    return -1;
}

// Обработка сообщений подписчика
while (1) {
    result = cg_conn_process(conn, CG_TIMEOUT_INFINITE);
    if (result != CG_ERR_OK) {
        printf("Error processing connection: %d
", result);
        break;
    }
}

// Закрытие и уничтожение подписчика
cg_lsn_close(listener);
cg_lsn_destroy(listener);
cg_conn_close(conn);
cg_conn_destroy(conn);
</code>

Работа с данными и схемами

Обработка данных в Плаза-протоколе ведётся через схемы данных. Вот основные моменты:

Сборка и настройка схем

Для управления схемами данных используется утилита schemetool. Вот пример использования:

<code>schemetool makesrc --input scheme.xml --output output_dir
</code>

Получение потоков репликации

Пример получения реплики данных и вывода их в лог:

<code>cg_listener_t* repl_listener;
result = cg_lsn_new(conn, "p2repl://FORTS_FUTCOMMON_REPL", &repl_listener);
if (result != CG_ERR_OK) {
    printf("Error creating replication listener: %d
", result);
    cg_conn_close(conn);
    cg_conn_destroy(conn);
    return -1;
}

result = cg_lsn_open(repl_listener, 0);
if (result != CG_ERR_OK) {
    printf("Error opening replication listener: %d
", result);
    cg_lsn_destroy(repl_listener);
    cg_conn_close(conn);
    cg_conn_destroy(conn);
    return -1;
}

// Обработка сообщений репликации
while (1) {
    result = cg_conn_process(conn, CG_TIMEOUT_INFINITE);
    if (result != CG_ERR_OK) {
        printf("Error processing connection: %d
", result);
        break;
    }
}

// Закрытие и уничтожение репликационного подписчика
cg_lsn_close(repl_listener);
cg_lsn_destroy(repl_listener);
cg_conn_close(conn);
cg_conn_destroy(conn);
</code>

Логины и их виды

Для работы с Плаза-протоколом вам потребуются разные виды логинов:

  • Тестовые логины: используются для разработки и тестирования.
  • Production-логины: получаются после сертификации и используются в реальной среде.

FOL (Full Order Log)

FOL (Full Order Log) — это важная функция Плаза-протокола, которая обеспечивает полное логирование всех торговых приказов. Эта функция является критически важной для обеспечения прозрачности и возможности аудита торговой деятельности. Вот основные характеристики и преимущества FOL:

  1. Полное логирование:

    • FOL записывает все детали каждого торгового приказа, включая время, цену, объем и другие параметры.
    • Это позволяет иметь полную картину всех торговых операций, что особенно важно для анализа и аудита.
  2. Точность и надежность:

    • Логи FOL включают временные метки с высокой точностью, что позволяет точно отслеживать последовательность и время исполнения приказов.
    • В случае возникновения споров или необходимости расследования, логи FOL предоставляют достоверную информацию обо всех действиях на рынке.
  3. Доступность данных:

    • FOL обеспечивает доступ к историческим данным, что важно для различных аналитических и исследовательских задач.
    • Аналитики и трейдеры могут использовать эти данные для оптимизации торговых стратегий и улучшения их эффективности.
  4. Поддержка регуляторных требований:

    • Во многих юрисдикциях регуляторы требуют наличие полных логов торговых операций для обеспечения прозрачности и возможности мониторинга.
    • FOL помогает соответствовать этим требованиям, обеспечивая полный и точный учет всех торговых действий.

Почему Плаза-протокол устарел?

Как и всё хорошее, Плаза-протокол потихоньку уходит на покой. На смену ему приходят современные решения, такие как TWIME и SIMBA, которые обеспечивают более высокую производительность, гибкость и надёжность. Так что, если вы ещё пользуетесь Плаза-протоколом, самое время задуматься о переходе на что-то новое и более эффективное.

Заключение

Вот так, без лишней воды и занудства, мы разобрали основы работы с Плаза-протоколом. Теперь у вас есть базовое понимание, как это работает и почему стоит задуматься о переходе на более современные решения. Надеюсь, было весело и полезно!

Если у вас остались вопросы или вы хотите больше примеров и деталей, не стесняйтесь обращаться. Удачи в разработке!

Оригинал размещен на моем сайте osaengine.ru

12 Комментариев
  • Beach Bunny
    Вчера в 19:04
    Пример есть хоть одной стратегии которой позарез нужна эта Plaza и т.п.
      • Beach Bunny
        Вчера в 19:31
        Gambler, если так то это пи##ец.
        Нахрена тогда он хетайцу?
        Они этот протокол еще и обновлять постоянно собираются.

        • Андрей К
          Вчера в 19:49
          Beach Bunny, чтобы когда hft торгуешь, получать инфу по своим позам и по своим лимитам ) больше никто ее не даст
      • __rtx
        Вчера в 22:55
        Gambler, 
        А на фоне других DMA протоколов Plaza совсем не HFT

        Что за небылицы? Откуда Вы это берёте? В коллокации разница между плазой, твазой, симбой, фастом микросекунды или нано. Основная задержка это путь.

        Симба самый быстрый т.к. у него трафик меньше и новые лучшие цены в начале транзакции т.е. Вы можете отправить ордер до того как разберёте пакет данных который к Вам пожаловал. Но если Вам нужны не только лучшие цены но и ещё что-нибудь то будете разбирать. В любом случае это микросекунды или нано. Что не влияет на хфт/не хфт хфт это запросто секунды или минуты могут быть. Здесь нужно разделять что имеется ввиду когда пишется не хфт(чтобы особо впечатлительных коллег с района не шокировать тем более небылицами всякими). Может для какого нибудь жёсткого арбитража это существенно, для многих (очень)хфт стратегий(тысячи сделок в день) это не критично(плаза не плаза и т.п.). Плаза удобная тема. Но согласен что надо переходить на что-то более свежее но опять же здесь не идёт разговора о том что плазу надо менять на симбу т.к. плаза это не хфт(это бред полный).
        Я не вижу настоящего кейса для CGate и Plaza на текущий день, когда они требуются в торговле.

        ??????????????????????

        Скорость это лишь 1 из компонентов, он никак не является определяющим, алгоритм важней, 3000(100 логинов) транзакций в секунду важней, Ваша реализация и т.п. Из-за того что рынок стал менее активным даже с квика можно кое-что подбирать иногда.

        • Андрей К
          Вчера в 23:00
          __rtx, в hft рыночек стал шибко сжиматься, как бы весы в сторону скорости не стали склоняться.Но это пока домыслы мои.

          А в целом ситуация примерно такая: плаза проигрывает фасту примерно 250-300мксек. Симба, за счет того, что посылка биржей делается не после матчинга, как у фаста, снимает еще 10-30 микро.

          но самое интересное начинается дальше. когда сигейт получает пакет, который зашифрован одним средненьким алго, он потом еще тратит время на расшифровку и передачу уже готовой инфы в приложение. Здесь конечно счет идет уже на сотни микро.

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

          хренова гора логинов конечно решает, но в самом идельаном варианте снимет 80-100мксек. А в среднем 25мксек.

          внутри этой милиссеки могут лежать хорошие деньги, правда не знаю, стоит ли за ними идти и остается ли вообще остальным на постоянной основе, тем кто стоит дальше миллисеки
          • __rtx
            Вчера в 23:15
            Андрей К, никто не спорит что плаза медленней но я про формулировку не хфт. Так же куча логинов это тоже не панацея как по мне важней алгоритм и всё это в целом. Если Вы используете крупный капитал(относительно) для физкультурных упражнений около топовых ордеров то Вам ещё менее важна скорость. Да если охотиться на всем очевидные штуки то тут кто успел тот и забрал но я же говорю хитрить можно и всё такое. Вот например полный лог даёт много информации для размышлений которая актуальна относительно длительное время и если сильно не жестить(логинами(активностью), объёмами)) чтобы не влиять на рынок то довольно стабильно получается уносить примерно одинаково каждый день ничего не меняя.
              • __rtx
                Вчера в 23:51
                Gambler, Вы абсолютно правы, я просто внёс ясность про то что плаза это вполне хфт, а то коллеги потом будут писать что на плазе это не возможно. По секрету могу сказать что даже сотни миллисекунд(пока моргает глаз) не дают какой-то критической темы для моих стратегий(к примеру). Возможно потому что я не наглею с активностью и объёмами и по зёрнышку собираю так сказать. А если бы начал ставить хорошие ордера то Андрей К(со своими железяками) начал бы меня фронтранить.) Может нет хрен знает даже узнавать не хочу и не буду(будем масштабироваться горизонтально(инструменты, биржи, 1 контракт) чтобы коллеги не атаковали).
          • __rtx
            Сегодня в 00:27
            Андрей К, а это точно верная информация
            Симба, за счет того, что посылка биржей делается не после матчинга

            просто в этом случае же стакан будет другой. И смысл присылать бид аск в начале пачки если на бирже сразу после отправки он уже другой(достаточно часто)? И ещё нескромный вопрос если можно(если нет то не отвечайте я так для саморазвития), у Вас долго ордера живут(секунда, млс., мкс., или ~0)? Андрей приглядитесь к полному логу(там Ваша скорость не поможет так как за пределами спреда всё относительно медленно но там есть свои нюансы которые можно использовать и не сильно беспокоиться что Вас начнут обгонять(всякое ведь может быть)))).

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн