﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Создание торгового робота на Plaza2</title>
  <id>~/topic/338/sozdanie-torgovogo-robota-na-plaza2/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-10T14:36:37Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=338" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/161/</id>
    <title type="text">Введение. В последнее время широкую популярность приобретает разработка торговых роботов с использов...</title>
    <published>2013-03-13T10:36:09Z</published>
    <updated>2016-09-14T01:46:57Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;b&gt;&lt;span style="font-size:120%"&gt;Введение.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;	В последнее время широкую популярность приобретает разработка торговых роботов с использованием платформы &lt;em&gt;Plaza2&lt;/em&gt;. Основной причиной популярности этой платформы является минимальное количество звеньев между торговым роботом и серверами биржи, что позволяет добиться более высокой надежности системы, высокой скорости передачи рыночных данных и обработки транзакций. Таким образом, робот, использующий протокол &lt;em&gt;Plaza2&lt;/em&gt;, имеет более реальную картинку торгов и может оценивать рынок более точно, чем роботы, подключенные через &lt;em&gt;Quik&lt;/em&gt;, &lt;em&gt;SmartCom&lt;/em&gt; и т.д. Описание протокола и набора транслируемых данных можно найти на сайте Московской биржи, а так же по следующим ссылкам &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADjhr-KWbN5USQ3AatReLfvq7cgbT1B1_AaL8j4cA0yRQMxtMK6f6GeyaqtnwTjWF8Lrm3N65682yuQ7iYdIqxs" title="http://ftp.rts.ru/pub/FORTS/Plaza2/P2ClientGate.doc"&gt;здесь&lt;/a&gt; и &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADjhr-KWbN5USQ3AatReLfvq7cgbT1B1_AaL8j4cA0yRX5fYt5nDSc-wQ5t9GSf9GXhFho6q4DYTxjL4UthveVA" title="http://ftp.rts.ru/pub/FORTS/Plaza2/p2gate_ru.pdf"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;	&lt;b&gt;&lt;span style="font-size:120%"&gt;Роутер.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;	При использовании торгового терминала &lt;em&gt;Quik&lt;/em&gt; подключение производится непосредственно к терминалу на локальной машине. Когда используется Plaza2, то подключение происходит к клиентскому роутеру, который может находить как на локальной машине, так и на удаленной. Роутер позволяется подключаться к нему из нескольких приложений одновременно, что является большим преимуществом. Например, можно упростить инфраструктуру торгового робота и запускать каждую стратегию в виде отдельного приложения, это так же позволит повысить устойчивость каждого отдельного робота.&lt;br /&gt;&lt;br /&gt;Из недостатков можно выделить отсутствие, какого бы то ни было, пользовательского интерфейса, т.е. невозможность ручного управления позициями при работе робота. Для этих целей можно использовать простой &amp;#171;самописный терминал&amp;#187;, с помощью которого можно будет просматривать стаканы, списки заявок и сделок, портфели и лимиты, а так же выставлять заявки в случае необходимости. В качестве каркаса подобного терминала может служить S# пример &lt;em&gt;Plaza\SampleGUI&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Роутер представляет собой самостоятельное приложение, единственной функцией которого является передача данных от биржи клиенту и наоборот. Есть два варианта запуска локального роутера: в виде службы и консольного приложения. Способ запуска роутера выбирается при его установке. При использовании консольного приложения, пользователь может сделать несколько конфигурационных файлов и запускать роутеры для разных логинов или серверов с помощью простых командных файлов. Полное детальное описание процесса установки и настройки роутера вы можете найти в файлах документации &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADjhr-KWbN5USQ3AatReLfvq7cgbT1B1_AaL8j4cA0yRQMxtMK6f6GeyaqtnwTjWF8Lrm3N65682yuQ7iYdIqxs" title="http://ftp.rts.ru/pub/FORTS/Plaza2/P2ClientGate.doc"&gt;здесь&lt;/a&gt; и &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADjhr-KWbN5USQ3AatReLfvq7cgbT1B1_AaL8j4cA0yRX5fYt5nDSc-wQ5t9GSf9GXhFho6q4DYTxjL4UthveVA" title="http://ftp.rts.ru/pub/FORTS/Plaza2/p2gate_ru.pdf"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;	&lt;b&gt;&lt;span style="font-size:120%"&gt;Подключение к роутеру.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;	В настоящее время роутером поддерживаются два вида соединений:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Соединение посредством протокола &lt;em&gt;TCP/IP&lt;/em&gt;. Медленнее, удобно для отладки, может связываться с роутером, установленным на другой машине&lt;br /&gt;&lt;li&gt;Соединение посредством разделяемой памяти (&lt;em&gt;lrpcq&lt;/em&gt;). Быстрее, оптимально для боевых систем, работает исключительно в рамках одной машины.&lt;/ol&gt;&lt;br /&gt;Платформа S# поддерживает оба типа соединение и по умолчанию используется &lt;em&gt;TCP/IP&lt;/em&gt; соединение. Для использования &lt;em&gt;lrpcq&lt;/em&gt; подключения необходимо до подключения к роутеру выставить флаг:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
Trader.UseLocalProtocol = true;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Следует отметить, что использование &lt;em&gt;lrpcq&lt;/em&gt; подключения в некоторых случаях сопряжено с определенными трудностями, например, при обрыве связи с роутером и переподключении может возникнуть ситуация, когда переподключиться не получится, т.к. роутер будет считать, что подключение с таким именем приложения еще установлено. Связано это с довольно большим таймаутом для данного типа подключения на стороне роутера и возможно будет исправлено в новых версиях роутера.&lt;br /&gt;&lt;br /&gt;Для подключения к роутеру, установленному на другой машине, необходимо внести дополнительные изменения в конфигурацию роутера. По умолчанию, конфигурация роутера хранится в файле &lt;em&gt;client_router.ini&lt;/em&gt; в директории, куда был установлен роутер. Чтобы иметь возможность подключаться к роутеру удаленно, необходимо указать имена приложений, с помощью которых будет выполняться удаленное подключение и пароль для каждого из имен, для этого в файл конфигурации необходимо добавить следующие строки:&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;[AS:Local]&lt;br /&gt;префикс_0=пароль&lt;br /&gt;префикс_1=пароль&lt;br /&gt;префикс_2=пароль&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Т.к. одно приложение может одновременно использовать несколько подключений к роутеру, то к имени, указанному в &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_AppName.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_AppName.htm"&gt;AppName&lt;/a&gt; добавляется его номер, таким образом, соединения именуются как &lt;em&gt;{префикс_номер}&lt;/em&gt;, поэтому в конфигурации роутера необходимо указать все названия имен с учетом их номеров.&lt;br /&gt;После настройки роутера, необходимо дополнительно указать пароль для S# коннектора, который был сохранен в файле конфигурации роутера. Для указания сетевого пароля используется поле &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Password.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Password.htm"&gt;Password&lt;/a&gt;, которое может использоваться в двух вариациях:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;в случае если было задано поле &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Login.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Login.htm"&gt;Login&lt;/a&gt;, то поле &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Password.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Password.htm"&gt;Password&lt;/a&gt; используется для указания пароля для подключения серверам биржи или брокера;&lt;br /&gt;&lt;li&gt;если поле &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Login.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Login.htm"&gt;Login&lt;/a&gt; задано не было, тогда &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Password.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Password.htm"&gt;Password&lt;/a&gt; будет использоваться как пароль для локального соединения.&lt;/ol&gt;&lt;br /&gt;При необходимости подключения к роутеру нескольких торговых роботов, для каждого робота необходимо задать уникальный префикс приложения с помощью поля &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_AppName.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_AppName.htm"&gt;AppName&lt;/a&gt;. Имя приложения используется в сети для идентификации конечного отправителя-получателя сообщения. Не рекомендуется использовать слишком длинные имена – при работе размеры пакетов данных невелики, и служебная информация, частью которой является AppName, может превысить полезную нагрузку в пакете.&lt;br /&gt;&lt;br /&gt;	&lt;b&gt;&lt;span style="font-size:120%"&gt;Схемы данных.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;	В платформе &lt;em&gt;Plaza2&lt;/em&gt; все данные транслируются сервером на клиентов в push-режиме, клиент постоянно получает последовательность изменений данных в соответствующих таблицах. Все данные, получаемые роутером, группируются в таблицы, которые в свою очередь сгруппированы в потоки.&lt;br /&gt;&lt;br /&gt;Для определения набора полей, которые будут транслироваться в каждой таблице, используются схемы данных. Протокол &lt;em&gt;Plaza2&lt;/em&gt; позволяет использовать два варианта схем данных:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Серверная схема данных&lt;/b&gt;&lt;br /&gt;При открытии потока пользователю не требуется задавать какое-либо описание получаемых данных, в момент подключения роутер получит схему данных с сервера, и все данные будут приходить согласно полученной схеме. Таким образом, перед пользователем не стоит задача поддержания схемы в валидном состоянии, т.к. набор доступных полей для каждой таблицы может меняться с течением времени.&lt;br /&gt;&lt;li&gt;&lt;b&gt;Пользовательская схема данных&lt;/b&gt;&lt;br /&gt;В случае, когда стандартный набор полей в таблицах содержит лишние или не содержит необходимых полей, пользователь может задать свои схемы данных для каждого потока и таблицы отдельно. Пользовательские схемы описываются с помощью &lt;em&gt;ini-файлов&lt;/em&gt;, в которых указывается название схемы данных, названия таблиц и список полей для каждой таблицы. Далее, при открытии потока данных, передается путь к соответствующему файлу с настройками схемы и ее название, и роутер отправляет схему на сервер для согласования. В случае если схема была принята на серверной стороне, все данные будут приходить с указанным набором полей. Если в схеме есть недопустимые поля или типы полей, то с сервера придет соответствующее сообщение, поток данных при этом открыт не будет, более детальное описание ошибки будет записано в клиентский лог-файл, который располагается в папке &lt;em&gt;\StockSharp_Plaza\Logs\&lt;/em&gt;.&lt;br /&gt;Полное описание формата данных для всех транслируемых таблиц можно найти в файле документации &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADjhr-KWbN5USQ3AatReLfvq7cgbT1B1_AaL8j4cA0yRX5fYt5nDSc-wQ5t9GSf9GXhFho6q4DYTxjL4UthveVA" title="http://ftp.rts.ru/pub/FORTS/Plaza2/p2gate_ru.pdf"&gt;2&lt;/a&gt;, а так же в описании схем данных, которое устанавливается вместе с роутером.&lt;/ol&gt;&lt;br /&gt;Для того чтобы исключить необходимость постоянного обращения к документации &lt;em&gt;Plaza2&lt;/em&gt;, возможные опечатки при задании схем данных, не оперировать непонятными сокращениями в названиях полей и их типами, в S# было введено &lt;a href="http://stocksharp.com/doc/html/838b1f44-ad42-4bf6-b862-0b0bff550482.htm" title="http://stocksharp.com/doc/html/838b1f44-ad42-4bf6-b862-0b0bff550482.htm"&gt;понятие метаданных&lt;/a&gt;, которые содержат описания всех доступных таблиц и полей, которые могут быть в этих таблицах. Описание метаданных находится в пространстве имен &lt;a href="http://stocksharp.com/doc/html/N_StockSharp_Plaza_Metadata.htm" title="http://stocksharp.com/doc/html/N_StockSharp_Plaza_Metadata.htm"&gt;StockSharp.Plaza.Metadata&lt;/a&gt;. Например, все доступные таблицы представлены полями класса &lt;a href="http://stocksharp.com/doc/html/T_StockSharp_Plaza_Metadata_PlazaTableRegistry.htm" title="http://stocksharp.com/doc/html/T_StockSharp_Plaza_Metadata_PlazaTableRegistry.htm"&gt;PlazaTableRegistry&lt;/a&gt;, а все доступные поля для таблицы сделок по фьючерсам - &lt;a href="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaColumnRegistry_TradeFuture.htm" title="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaColumnRegistry_TradeFuture.htm"&gt;ColumnRegistry.TradeFuture&lt;/a&gt;.&lt;br /&gt;Набор таблиц, данные из которых необходимо будет получать при подключении к серверу, задается с помощью свойства &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Tables.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Tables.htm"&gt;PlazaTrader.Tables&lt;/a&gt;, куда необходимо добавить нужные таблицы и удалить ненужные. Для ручного добавления и удаления таблиц можно необходимо вызвать соответствующую функцию у &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Tables.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_Tables.htm"&gt;PlazaTrader.Tables&lt;/a&gt; и передать в качестве параметра одно из полей &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_TableRegistry.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaTrader_TableRegistry.htm"&gt;PlazaTrader.TableRegistry&lt;/a&gt;, например, для добавления полного ордерлога необходимо выполнить:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
PlazaTrader.Tables.Add(PlazaTrader.TableRegistry. AnonymousOrdersLog);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В определенных ситуациях, выбор необходимого набора таблиц для получения данных можно оставить конечному пользователю, для этого в S# присутствует специальный графический компонент &lt;a href="http://stocksharp.com/doc/html/T_StockSharp_Plaza_Xaml_PlazaTableListComboBox.htm" title="http://stocksharp.com/doc/html/T_StockSharp_Plaza_Xaml_PlazaTableListComboBox.htm"&gt;PlazaTableListComboBox&lt;/a&gt;, который представляет собой выпадающий список с набором всех доступных таблиц (рис. 1). Каждая строка представлена в виде трех столбцов: описания таблицы, названия потока репликации, в котором транслируется таблица и названия самой таблицы, последние два столбца соответствуют названиям потока и таблицы в документации по &lt;em&gt;Plaza2&lt;/em&gt;.&lt;br /&gt;&lt;div align="center"&gt;&lt;a href='https://stocksharp.com/file/102251/Clipboard01.jpg' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="https://stocksharp.com/file/102251/Clipboard01.jpg?size=800x800" alt="Рис. 1 - Выбор таблиц репликации данных." title="Рис. 1 - Выбор таблиц репликации данных." /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Для того чтобы передать список выбранных таблиц в &lt;a href="http://stocksharp.com/doc/html/T_StockSharp_Plaza_PlazaTrader.htm" title="http://stocksharp.com/doc/html/T_StockSharp_Plaza_PlazaTrader.htm"&gt;PlazaTrader&lt;/a&gt;, в библиотеке S# присутствует специальный метод расширения &lt;a href="http://stocksharp.com/doc/html/M_StockSharp_Plaza_PlazaTraderHelper_SyncTables.htm" title="http://stocksharp.com/doc/html/M_StockSharp_Plaza_PlazaTraderHelper_SyncTables.htm"&gt;SyncTables&lt;/a&gt;, который можно использовать следующим образом:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
PlazaTrader.SyncTables(Tables.SelectedTables);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;при этом нет необходимости в очистке списка таблиц, т.к. все лишние таблицы будут удалены автоматически.&lt;br /&gt;Для всех таблиц можно указать набор полей, которые должны транслироваться в них. Описание полей для таблиц так же находятся в метаданных, в классе &lt;a href="http://stocksharp.com/doc/html/Fields_T_StockSharp_Plaza_Metadata_PlazaColumnRegistry.htm" title="http://stocksharp.com/doc/html/Fields_T_StockSharp_Plaza_Metadata_PlazaColumnRegistry.htm"&gt;PlazaColumnRegistry&lt;/a&gt; для каждой из таблиц есть соответствующее поле, например, все доступные поля для таблицы сделок по фьючерсам описаны в &lt;a href="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaColumnRegistry_TradeFuture.htm" title="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaColumnRegistry_TradeFuture.htm"&gt;PlazaColumnRegistry.TradeFuture&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Поля таблицы, для которых нет соответствующих полей у объектов S#, будут записываться в специальный словарь &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_BusinessEntities_IExtendableEntity_ExtensionInfo.htm" title="http://stocksharp.com/doc/html/P_StockSharp_BusinessEntities_IExtendableEntity_ExtensionInfo.htm"&gt;ExtensionInfo&lt;/a&gt; объекта S#. Например, если нам необходимо получать данные по сбору по сделке продавца, то в таблицу &lt;a href="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaColumnRegistry_TradeFuture.htm" title="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaColumnRegistry_TradeFuture.htm"&gt;TradeFuture&lt;/a&gt; необходимо добавить столбец &lt;a href="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTradeDerivativeColumns_SellFee.htm" title="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTradeDerivativeColumns_SellFee.htm"&gt;SellFee&lt;/a&gt;:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
PlazaTrader.TableRegistry.TradeFuture.Columns.Add(PlazaTrader.TableRegistry.ColumnRegistry.TradeFuture.SellFee);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;далее, в момент обработки данных по сделке, данное поле можно будет получить следующим образом:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
var fee = trade.ExtensionInfo[PlazaTrader.TableRegistry.ColumnRegistry.TradeFuture.SellFee];&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Подробное описание работы с дополнительными полями и произвольными таблицами можно найти в &lt;a href="http://stocksharp.com/doc/html/7eda6d74-d3b8-4fe5-b6a3-fab60e441daf.htm" title="http://stocksharp.com/doc/html/7eda6d74-d3b8-4fe5-b6a3-fab60e441daf.htm"&gt;документации&lt;/a&gt; по S# в разделе Российские коннекторы - Plaza2.&lt;br /&gt;&lt;br /&gt;После того как были выбраны все необходимые таблицы и их поля, в момент подключения к серверу будут сгенерированы соответствующие файлы схем данных, которые будут записаны в &lt;em&gt;.\StockSharp_Plaza\Configs\&lt;/em&gt; и будут использоваться при открытии соответствующих потоков. Нет необходимости в ручном изменении этих файлов, т.к. при следующем подключении они снова будут перезаписаны данными, сгенерированными по набору таблиц и их полей. Но эти файлы могут быть использованы в случае ошибки при открытии потока, чтобы понять, где была допущена ошибка.&lt;br /&gt;&lt;br /&gt;При подключении к роутеру, все выбранные таблицы группируются по потокам, которые, в свою очередь, группируются по разным соединениям. Каждое подключение к роутеру может использоваться для передачи данных по одному и более потоку репликации. Разделение потоков по разным соединениям необходимо для уменьшения влияния процесса обработки одних данных на другие, например, разделение потоков с таблицами сделок и агрегированных заявок по разным подключениям, позволяется обрабатывать стаканы, не дожидаясь пока будут обработаны все пришедшие сделки. В библиотеке S#, все получаемые потоки изначально сгруппированы таким образом, что наиболее нагруженные потоки репликации обрабатываются в различных подключениях. Если, по каким-либо причинам, стандартная группировка потоков не подходит для решения поставленных задач, ее можно изменить с помощью &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaStreamManager_ConnectionGroupping.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaStreamManager_ConnectionGroupping.htm"&gt;ConnectionGroupping&lt;/a&gt;. Например, если необходимо получать все потоки репликации в одном подключении, то необходимо для каждого потока указать одинаковый индекс подключения:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
var streamRegistry = PlazaTrader.TableRegistry.StreamRegistry;
var groupping = PlazaTrader.StreamManager.ConnectionGroupping;

groupping[streamRegistry.Aggregation5Future] = 0;
groupping[streamRegistry.Aggregation5Option] = 0;
groupping[streamRegistry.Aggregation20Future] = 0;
groupping[streamRegistry.Aggregation20Option] = 0;
groupping[streamRegistry.Aggregation50Future] = 0;
groupping[streamRegistry.Aggregation50Option] = 0;
...
groupping[streamRegistry.TradeFuture] = 0;
groupping[streamRegistry.TradeOption] = 0;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Посмотреть сколько открывается соединений, и с какими названиями, можно в логе PlazaTrader-а в момент подключения:&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;PlazaTrader     | 30.01.2013 15:10:21.761 |         | Attempted to connect Webinar_0.&lt;br /&gt;PlazaTrader     | 30.01.2013 15:10:21.819 |         | Attempted to connect Webinar_1.&lt;br /&gt;PlazaTrader     | 30.01.2013 15:10:21.820 |         | Attempted to connect Webinar_2.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;	&lt;b&gt;&lt;span style="font-size:120%"&gt;Управление ревизиями.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;	Каждая реплицируемая таблица имеет в своей структуре несколько служебных полей, предназначенных для обеспечения механизма репликации. Одним из полей является уникальный номер изменения в таблице. При любом изменении в таблице (вставке, редактировании, удалении записи) затронутая запись получает значение &lt;em&gt;replRev&lt;/em&gt;, равное максимальному &lt;em&gt;replRev&lt;/em&gt; в таблице до изменения +1. После согласования схем данных, клиент отсылает на сервер максимальные значения номера ревизии для каждой таблицы. Начальная синхронизация заключается в том, что сервер присылает клиенту все данные с номерами, большими, чем те, что указал клиент. Если клиент не указал номер ревизии для таблицы, то данные по этой таблице будут приходить в полном объеме.&lt;br /&gt;&lt;br /&gt;Для того чтобы получение данных начиналось с последних сохраненных ревизий, необходимо добавить нужные таблицы в &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaRevisionManager_Tables.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaRevisionManager_Tables.htm"&gt;PlazaRevisionManager.Tables&lt;/a&gt;:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
var revisionManager = PlazaTrader.StreamManager.RevisionManager;

revisionManager.Tables.Add(Trader.TableRegistry.TradeFuture);
revisionManager.Tables.Add(Trader.TableRegistry.TradeOption);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;При первом подключении, после добавления таблиц в &lt;a href="http://stocksharp.com/doc/html/T_StockSharp_Plaza_PlazaRevisionManager.htm" title="http://stocksharp.com/doc/html/T_StockSharp_Plaza_PlazaRevisionManager.htm"&gt;RevisionManager&lt;/a&gt;, данные так же будут получены в полном объеме, т.к. информация о сохраненных номерах ревизий еще отсутствует. После переподключения, данные будут скачиваться с номера последней сохраненной ревизии.&lt;br /&gt;Интервал, через который сохраняется номер последней ревизии, доступен через &lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaRevisionManager_Interval.htm" title="http://stocksharp.com/doc/html/P_StockSharp_Plaza_PlazaRevisionManager_Interval.htm"&gt;PlazaRevisionManager.Interval&lt;/a&gt;. По умолчанию файл с номером последней ревизии по выбранной таблице сохраняется в папку &lt;em&gt;\StockSharp_Plaza\Revisions&lt;/em&gt;. Для того чтобы перезакачать все данные, достаточно удалить файлы из папки &lt;em&gt;Revisions&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;	&lt;b&gt;&lt;span style="font-size:120%"&gt;Полный ордерлог.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;	Полный журнал заявок – сервис Московской биржи, который позволяет получать список всех торговых транзакций, принятых торговой системой в текущую торговую сессию с указанием текущего статуса заявок (поставлена/удалена) и изменений параметров транзакции (частичных исполнений, передвижений заявки). Также в журнале отображается запись о сделке, с указанием номера сведенной в данную сделку заявки. Ордерлог - самый глубокий и детальный уровень биржевых данных, который доступен трейдеру. По данным ордерлога можно построить стаканы, получить тики и многое другое.&lt;br /&gt;&lt;br /&gt;Для получения и обработки всех данных по ордерлогу необходимо добавить таблицу &lt;a href="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTableRegistry_AnonymousOrdersLog.htm" title="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTableRegistry_AnonymousOrdersLog.htm"&gt;AnonymousOrdersLog&lt;/a&gt;:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
PlazaTrader.Tables.Add(PlazaTrader.TableRegistry. AnonymousOrdersLog);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;и подписаться на обработку события &lt;a href="http://stocksharp.com/doc/html/E_StockSharp_Algo_BaseTrader_NewOrderLogItems.htm" title="http://stocksharp.com/doc/html/E_StockSharp_Algo_BaseTrader_NewOrderLogItems.htm"&gt;NewOrderLogItems&lt;/a&gt;.&lt;br /&gt;Ордерлог, в отличие от потока агрегированных заявок, содержит информацию по всем заявкам, таким образом, по ордерлогу может быть построен стакан полной глубины. Библиотека S# предоставляет функционал, позволяющий автоматически строить стаканы и тики по данным ордерлога. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Для построения стаканов по журналу заявок необходимо выставить соответствующий флаг &lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
PlazaTrader.CreateDepthFromOrdersLog = true;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;при установке этого флага автоматически отключается обработка потоков агрегированных заявок и для получения данных добавляется таблица &lt;a href="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTableRegistry_AnonymousOrdersLog.htm" title="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTableRegistry_AnonymousOrdersLog.htm"&gt;AnonymousOrdersLog&lt;/a&gt;.&lt;br /&gt;&lt;li&gt;Для построения тиков по журналу заявок необходимо выставить флаг &lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
PlazaTrader.CreateTradesFromOrdersLog = true;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;при установке этого флага отключается обработка потоков журнала сделок по фьючерсам и опционам и для получения данных добавляется таблица &lt;a href="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTableRegistry_AnonymousOrdersLog.htm" title="http://stocksharp.com/doc/html/F_StockSharp_Plaza_Metadata_PlazaTableRegistry_AnonymousOrdersLog.htm"&gt;AnonymousOrdersLog&lt;/a&gt;.&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;	&lt;b&gt;&lt;span style="font-size:120%"&gt;Сохранение и восстановление настроек.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;	S# &lt;em&gt;Plaza2&lt;/em&gt; коннектор предоставляет широкие возможности для управления настройками подключения, списком выбранных таблиц, группировкой потоков по соединениям и другими настройками. В одних случаях, эти настройки могут быть зашиты в торговом роботе, в других, может возникнуть необходимость предоставить возможность редактировать эти настройки конечному пользователю. Для удобства, все коннекторы S# содержат встроенные механизмы сохранения и загрузки настроек с помощью методов Save и Load.&lt;br /&gt;&lt;br /&gt;Для сохранения и загрузки настроек из внешнего файла можно воспользоваться соответственно сериализацией и десериализацией, реализованной в S#:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Загрузка&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
var trader = new PlazaTrader();
if (File.Exists(&amp;quot;trader.xml&amp;quot;))
{
//Загрузка настроек из существующего конфигурационного файла
var settingsStorage = new XmlSerializer&amp;lt;SettingsStorage&amp;gt;().Deserialize(&amp;quot;trader.xml&amp;quot;);
trader.Load(settingsStorage);
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;li&gt;Сохранение&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
//Сохраняем настройки в файл
var settings = new SettingsStorage();
trader.Save(settings);
new XmlSerializer&amp;lt; SettingsStorage &amp;gt;().Serialize(settings, &amp;quot; trader.xml&amp;quot;);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div align="right"&gt;Белич Александр &amp;#169; 2013&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24515/</id>
    <title type="text">Классная статья. Все четко и по теме. И без лишней воды.</title>
    <published>2013-03-13T05:55:41Z</published>
    <updated>2013-03-13T05:55:41Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Классная статья.[thumbup] Все четко и по теме. И без лишней воды.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>