Plaza 2. Торговые роботы с прямым доступом.
Atom Ответить
13.03.2012


Вступление
Краткое вступление о том, что такое прямой доступ к торгам для робота. Это значит, что ваш робот начинает слать торговые сигналы на биржу, минуя всех посредников (брокера, промежуточное программное обеспечение и т.д.). Часто подобный доступ ассоциируют с High Frequency Trading (далее, просто HFT) роботами, или, попросту говоря, высокочастотниками. Но HFT это не единственные “клиенты”, кому может быть удобен такой способ. Ниже ряд преимуществ и для обычного робота:
  • Отсутствие прослоек уменьшает технические риски.

  • Прямой доступ гарантирует торговлю только по правилам биржи, без накладывания дополнительных ограничений. Например, дополнительное ГО (гарантийному обеспечению), как правило.

  • Робот не привязан к какой-либо технологии доступа, кроме как к Plaza2.

  • Самая полная информация о маркет-данных. Например, order log (журнал заявок, поступающих от всех участников торгов).

Модель доступа
Естественно, создание роботов под шлюз биржи – это только их программирование. На языке C#, С++, Delphi и т.д. – на чем больше опыт. Биржа дает свой программный интерфейс (далее, API), с помощью которого роботы и подключаются к торгам. Бывают 2 версии этого API, под 32 и 64 битные компьютеры. Лучше использовать под 64 бита, так как тогда робот не будет ограничен потреблением памяти. Для роботов, которые используют Plaza2 как один из источников данных, а так же сложные математические расчеты, проблема с доступной памятью наиболее актуальна.
Plaza2 API так же бывает однопоточной и многопоточной (STA, MTA). Лучше использовать MTA, так как в этом случае робот будет работать без временных зависаний (особенно проявляется при сильном движении на рынке), да и просто быстрее получать и отправлять данные. Написание робота под Plaza2 API требует глубоких познаний в программировании и специфике работы биржевых данных. Поэтому, для упрощения создания роботов можно использовать бесплатную библиотеку StockSharp. У нее есть ряд преимуществ перед обычным Plaza2 API:

  • Существенно упрощает и ускоряет процесс обучения написания роботов под Plaza2.

  • Позволяет включать режим эмуляции на реальных торгах (с реальной ликвидностью в стаканах).

  • Тестирование робота на исторических данных (единая среда как для написания робота, так и для тестирования).

  • Сертифицирована, что позволяет не проходить сертификацию у биржи, и получать сертификат автоматически.

  • Наличие стопов.

  • Не вносит никаких задержек, тоесть скорость работы точно такая же, как если писать робота напрямую под Plaza2 API (критично для HFT).

  • Открытый код.

  • Возможность подключать западные площадки.


plaza2

Пример
Вместо заключения небольшой пример того, как выглядит робот, торгующий через Plaza2.

Подключение к торгам:

Код
var trader = new PlazaTrader();

Security rih2 = null;

trader.NewSecurities += securities =>
{
    // если RIH2 еще не появился, то пытаемся его найти
    if (rih2 == null)
        rih2 = securities.FirstOrDefault(s => s.Id == "RIH2@RTS");
};

// после успешного подключения запускаем экспорт
trader.Connected += trader.StartExport;

// подключаемся к торгам
trader.Connect();


Небольшая стратегия, торгующая спредом фьючерса на индекс РТС:


Код

class SpreadStrategy : Strategy
{
    private Order _order;
    private bool _canProcess;
    private OrderDirections _dir;

    protected override void OnStarting()
    {
        // подписываемся на правило изменения стакана
        this
            .When(Security.MarketDepthChanged())
            .Do(ProcessDepth);

        // добавляем автозащитную стратегию (автоматически выставляет тейк + стоп)
        ChildStrategies.Add(new AutoProtectiveStrategy());

        base.OnStarting();
    }

    private void ProcessDepth(MarketDepth depth)
    {
        // заявка пока еще не исполнена
        if (!_canProcess)
            return;

        // заявка исполнилась, но не исполнились стопы
        if (PositionManager.Position != 0)
            return;

        // создаем рыночную заявку (так как на FORTS нет такого понятия как рыночная заявка, то будет использована встречная цена в стакане)
        _order = this.CreateOrder(_dir, depth.GetMarketPrice(_dir));

        // в следующий раз будем открываться в другую сторону
        _dir = _dir.Invert();

        // запретить обработу стакана до тех пор, пока заявка не исполниться
        _canProcess = false;

        this
            .When(_order.Matched())
            .Do(() => _canProcess = true);

        // отправляем на регистрацию
        RegisterOrder(_order);
    }
}


Сухов Михаил
StockSharp Торговые роботы



Поздравляем именинников: Станислав Гайворонский

6 Ответов
dvoris

Фотография
Дата: 12.03.2012
Ответить


Alen, Хорошая статья, на смартлаб выкладывал? :)
Спасибо:

StockSharp

Фотография
Дата: 12.03.2012
Ответить


dvoris Перейти
Alen, Хорошая статья, на смартлаб выкладывал? :)

Статья не моя, Миша написал. Все хорошие статьи о торговых роботах у нас на форуме будем выкладывать, смартлаб не подходящее место для этого.
Автор топика
Спасибо:

kot99

Фотография
Дата: 13.03.2012
Ответить


Это действительно так ? Когда сертифицировались ?

Сертифицирована, что позволяет не проходить сертификацию у биржи, и получать сертификат автоматически.
Спасибо:

Alexander

Фотография
Дата: 13.03.2012
Ответить


kot99 Перейти
Это действительно так ? Когда сертифицировались ?

Сертифицирована, что позволяет не проходить сертификацию у биржи, и получать сертификат автоматически.


дадим новость в ближайшие дни
Спасибо:

Maksim Chertkov

Фотография
Дата: 15.03.2012
Ответить


Последняя версия клиента Плазы (P2_ClientGate1.14.1) при установке у меня уже не предлагала выбора STA/MTA, видимо оставили только MTA версию.
Спасибо:

AlexLan73

Фотография
Дата: 28.04.2012
Ответить


Спасибо.
Хорошая статья. По больше бы примеров )))
Легче было бы для начинающих.))))
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy