Вступление Краткое вступление о том, что такое прямой доступ к торгам для робота. Это значит, что ваш робот начинает слать торговые сигналы на биржу, минуя всех посредников (брокера, промежуточное программное обеспечение и т.д.). Часто подобный доступ ассоциируют с 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 =\u003e { // если RIH2 еще не появился, то пытаемся его найти if (rih2 == null) rih2 = securities.FirstOrDefault(s =\u003e 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(() =\u003e _canProcess = true); // отправляем на регистрацию RegisterOrder(_order); } } Сухов Михаил StockSharp Торговые роботы