Привет, друзья!
Раз никто не хочет писать про Плаза-протокол без рекламной воды, я решил взять на себя смелость. Готовьтесь к техно-экскурсии с юмором и без занудства. Давайте разберем, что это за штуковина такая – Плаза-протокол, как он работает, и почему его стоит заменить на что-то более современное.
Что такое Плаза-протокол?Плаза-протокол (Plaza II) — это коммуникационный протокол, разработанный Московской биржей для обеспечения высокоскоростной и надежной передачи торговой и рыночной информации между участниками торгов. Он состоит из нескольких компонентов, каждый из которых выполняет свою важную роль.
Для начала работы с Плаза-протоколом необходимо установить соответствующие компоненты. Вот пример установки и настройки на Linux:
<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>
Для работы с Плаза-протоколом вам потребуются разные виды логинов:
FOL (Full Order Log) — это важная функция Плаза-протокола, которая обеспечивает полное логирование всех торговых приказов. Эта функция является критически важной для обеспечения прозрачности и возможности аудита торговой деятельности. Вот основные характеристики и преимущества FOL:
Полное логирование:
Точность и надежность:
Доступность данных:
Поддержка регуляторных требований:
Как и всё хорошее, Плаза-протокол потихоньку уходит на покой. На смену ему приходят современные решения, такие как TWIME и SIMBA, которые обеспечивают более высокую производительность, гибкость и надёжность. Так что, если вы ещё пользуетесь Плаза-протоколом, самое время задуматься о переходе на что-то новое и более эффективное.
Вот так, без лишней воды и занудства, мы разобрали основы работы с Плаза-протоколом. Теперь у вас есть базовое понимание, как это работает и почему стоит задуматься о переходе на более современные решения. Надеюсь, было весело и полезно!
Если у вас остались вопросы или вы хотите больше примеров и деталей, не стесняйтесь обращаться. Удачи в разработке!
Оригинал размещен на моем сайте osaengine.ru
Нахрена тогда он хетайцу?
Они этот протокол еще и обновлять постоянно собираются.
Если скорость не важна — выбор подключение от брокера.
Если скорость важна — выбор в пользу SBE-based протоколов.
Я не вижу настоящего кейса для CGate и Plaza на текущий день, когда они требуются в торговле.
Может быть для проф участников, может каких-то компаний. Поддержка легаси софта. Что-то в этом духе.
Что за небылицы? Откуда Вы это берёте? В коллокации разница между плазой, твазой, симбой, фастом микросекунды или нано. Основная задержка это путь.
Симба самый быстрый т.к. у него трафик меньше и новые лучшие цены в начале транзакции т.е. Вы можете отправить ордер до того как разберёте пакет данных который к Вам пожаловал. Но если Вам нужны не только лучшие цены но и ещё что-нибудь то будете разбирать. В любом случае это микросекунды или нано. Что не влияет на хфт/не хфт хфт это запросто секунды или минуты могут быть. Здесь нужно разделять что имеется ввиду когда пишется не хфт(чтобы особо впечатлительных коллег с района не шокировать тем более небылицами всякими). Может для какого нибудь жёсткого арбитража это существенно, для многих (очень)хфт стратегий(тысячи сделок в день) это не критично(плаза не плаза и т.п.). Плаза удобная тема. Но согласен что надо переходить на что-то более свежее но опять же здесь не идёт разговора о том что плазу надо менять на симбу т.к. плаза это не хфт(это бред полный).
??????????????????????
Скорость это лишь 1 из компонентов, он никак не является определяющим, алгоритм важней, 3000(100 логинов) транзакций в секунду важней, Ваша реализация и т.п. Из-за того что рынок стал менее активным даже с квика можно кое-что подбирать иногда.
А в целом ситуация примерно такая: плаза проигрывает фасту примерно 250-300мксек. Симба, за счет того, что посылка биржей делается не после матчинга, как у фаста, снимает еще 10-30 микро.
но самое интересное начинается дальше. когда сигейт получает пакет, который зашифрован одним средненьким алго, он потом еще тратит время на расшифровку и передачу уже готовой инфы в приложение. Здесь конечно счет идет уже на сотни микро.
поэтому только на получение биржевой даты, уходит сотни, микросек если сильно заморочиться и милиссека, если не заморачиваться
хренова гора логинов конечно решает, но в самом идельаном варианте снимет 80-100мксек. А в среднем 25мксек.
внутри этой милиссеки могут лежать хорошие деньги, правда не знаю, стоит ли за ними идти и остается ли вообще остальным на постоянной основе, тем кто стоит дальше миллисеки
Я рассматривал ответ с призмы текущего дня. Руководство ставит задачу — сделать подключение. Технари отвечают — есть!
Далее ситуация примерно такая. Есть cgate, которые совсем не стандарт и совсем не популярный в опен сорсе (на это есть свои причина, да?). А есть SBE, для которого даже GPT может написать код почти работающий с ходу.
Далее ситуация еще чуть глубже. Есть cgate, который будет заведомо медленнее SBE, не зависимо от нашей прямости рук. А есть SBE, который с ходу ноги будет быстрее.
Что предложит программист в качестве идеи? Какой путь?
Изучение ровно как и внедрение Plaza на текущий день — это потратить ресурсы впустую. Это подключение будет и дороже, и медленнее.
просто в этом случае же стакан будет другой. И смысл присылать бид аск в начале пачки если на бирже сразу после отправки он уже другой(достаточно часто)? И ещё нескромный вопрос если можно(если нет то не отвечайте я так для саморазвития), у Вас долго ордера живут(секунда, млс., мкс., или ~0)? Андрей приглядитесь к полному логу(там Ваша скорость не поможет так как за пределами спреда всё относительно медленно но там есть свои нюансы которые можно использовать и не сильно беспокоиться что Вас начнут обгонять(всякое ведь может быть)))).