Plaza2

Решил открыть новую рубрику “Plaza2 и МТС” на ttools.ru и написать серию постов на эту тему. Тема в последнее время очень популярна, и, надеюсь, найдет интерес. Речь о Plaza2 пойдет в контексте разработки фронт-систем алгоритмического трейдинга

Основные причины, по которым применение Plaza2 в торговых автоматах популярно (на мой взгляд) две: это относительное преимущество в скорости обработки транзакций и получения рыночных данных, а также повышение надежности за счет сокращения цепочки обмена данными от “биржа-сервер брокера-терминал клиента – торговый алгоритм клиента” до “биржа-торговый алгоритм клиента”

Одним из распространенных случаев применения Plaza2 является высокочастотный алгоритмический трейдинг (High Frequency Trading – HFT). Регулярно проводимый биржей конкурс ЛЧИ ненавязчиво подталкивает трейдеров к мысли, что высокочастотный алготрейдинг – это способ быстро заработать много денег. На самом деле HFT-это много, очень много работы без гарантии результата. Бесконечный поиск прибыльного (или временно прибыльного) алгоритма среди огромного числа убыточных. Я не агитирую за HFT, даже скорее наоборот, предостерегаю: если вы решили заняться разработкой HFT автомата, подумайте, есть ли у вас время (полгода, год, может больше), которое вы бы могли потратить на упорный труд и остаться в итоге без результата? Возможно, кому-то везет и успех приходит быстро, но что, если это будете не вы? Одно точно- скучно не будет.

Итак, Plaza2. С чего начать?

Прежде всего, ознакомиться с документацией, которая состоит из 2х документов, найти их можно здесь:
ftp.rts.ru/pub/FORTS/Plaza2/P2ClientGate.doc и
ftp.rts.ru/pub/FORTS/Plaza2/p2gate_ru.pdf

По большей части, клиентский API Плазы организован очень адекватно, гибко и логично структурирован. Кроме документации, на все вопросы, связанные с разработкой Plaza2-приложений оперативно и профессионально отвечают специалисты биржи на форуме технической поддержки: http://forum.rts.ru/viewforum.asp?f=12

Библиотека COM-объектов, которая обеспечивает интерфейс связи со шлюзом биржи по протоколу Plaza2, называется P2ClientGate скачать текущий дистрибутив библиотеки можно здесь: ftp.rts.ru/pub/FORTS/Plaza2/

Прежде, чем приступить к разработке клиента Plaza2 (робота) , необходимо определиться с такими вещами как:

  1. Язык программирования
    Как сказано в документации, для разработки ПО может использоваться любой язык программирования с поддержкой технологии COM. Т.е. клиент будет работать на операционной системе Windows, соответственно, выбранный язык программирования должен иметь возможность компилировать Windows-приложения.
  2. Базовый или безбазовый клиент репликации
    Базовый – это значит, что в клиенте будет использоваться локальная база данных. Данные соответствующие таблицы в таблицы будут сохраняться автоматически. При использовании базового клиента множество необходимых процедур, которые лежат на плечах разработчика клиента, осуществляются прозрачно, без участия клиента. Реализовать базовый клиент проще, но это будет означать, что конечное ПО будет нуждаться в базе данных.
  3. 32х или 64х разрядный клиент.
    Библиотека P2ClientGate реализована в 2х вариантах, для использования в 32х- и 64х-битном приложении. Плюсы и минусы: В настоящий момент 32 бита – это для любой современной версии Windows, 64x- для Windows 7 и выше. 32 бита – это адресация до 4 Гб оперативной памяти (2^32), 64 бита – это адресация 2^64 байт памяти. 64 бита – это, безусловно будущее, но 32 бита – это еще не прошлое. В настоящий момент практически весь софт, на котором работают брокерские системы (сотни клиентов) выполнен в 32х битном варианте.
  4. STA или MTA клиент
    Это связано с COM-технологией. Вот как написано в документации про STA и MTA:

    • Файл P2ClientGate.dll содержит объекты, поддерживающие STA-модель COM (до сборки 173 – единственный вариант).
    • Файл P2ClientGateMTA.dll содержит объекты, поддерживающие MTA-модель COM.
    Упрощенно, разница между STA и MTA – моделями состоит в том, что при доступе к STA-объекту из потока управления, отличного от того, где этот объект был создан, вызов метода и его параметры маршаллируются и передаются подсистемой поддержки COM в тот поток, где был создан объект, реальный вызов исполняется в этом потоке. Таким образом, вызовы STA-объекта всегда происходят из одного потока и они всегда сериализованы.
    При вызове же MTA-объекта, COM-подсистемой не производится никаких предположений о «внутренностях» вызываемого объекта, вызов делается непосредственно из того потока, где его инициировал код пользователя. Синхронизация доступа к объекту из разных потоков возлагается на сам объект. То есть при прочих равных условиях MTA-объекты при работе в многопоточной программе эффективнее их STA-собратьев, поскольку при их использовании не задействуется тяжелая подсистема синхронизации COM.

Конечно, сразу заказывать платный логин Плазы и отлаживать свой торговый алгоритм на живых деньгах, мягко говоря, не рационально. Для того, чтобы отладить свою фронт-систему, лучше воспользоваться услугами тестового полигона, доступ к которому предоставляется по запросу на адрес help(@)rts.ru.

Для того, чтобы начать разработку очень полезны примеры простейших клиентов на разных языках. Скачать исходники можно отсюда: ftp://ftp.rts.ru/pub/FORTS/test/Plaza2/P2Samples/

В примерах есть небольшой консольный терминал, для отправки заявок, примеры базового клиента, пример асинхронной отправки заявок, программа для просмотра заявок в стакане и даже небольшой скальперский привод, который позволяет отправлять заявки одним кликом – убийца QuikOrdersDOM :)

Сколько потребуется времени, чтобы написать клиента?

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