Для изменения размера нажмите или перетащите

Пример использования SampleGUI

Для демонстрации возможностей платформы Plaza II написан пример под названием SamplePlaza (находится в папке Samples/Plaza). В нем показано, как подключаться к шлюзу Plaza II, получать инструменты и размещать заявки.

Пример робота под Plaza II

  1. В самом начале необходимо создать шлюз PlazaTrader:

    C#
    // создаем шлюз к Плазе
    var Trader = new PlazaTrader();
    Trader.Address = Address.Text.To<EndPoint>();
    Примечание Примечание
    При соединении между клиентским приложением и роутером в платформе Plaza II возможно использование протокола TCP или LRPCQ. Последний является простым транспортом, основанным на использовании shared-memory в ОС Windows. Использование LRPCQ возможно только при запуске приложения-клиента и роутера на одном компьютере. Протокол LRPCQ имеет меньшие накладные расходы, чем TCP, передача сообщений между приложением и роутером с использованием LRPCQ происходит быстрее. Чтобы использовать протокол LRPCQ, нужно присвоить свойству PlazaTraderUseLocalProtocol значение true. По умолчанию оно равно false, то есть используется протокол TCP.
  2. Если для подключения требуется указать логин и пароль, то их необходимо передать в PlazaTraderLogin и PlazaTraderPassword:

    Внимание Внимание
    Если при установке роутера был введен логин и пароль, то в коде их указывать не надо.
    C#
    this.Trader.Login = this.Login.Text;
    this.Trader.Password = this.Password.Password;
  3. После создания шлюза необходимо подключиться к торговой системе. В случае с PlazaTrader такой системой выступает P2MQRouter.exe.

    После подключения начнут вызываться события IConnectorNewSecurity, IConnectorNewOrder и т.д. Для тех данных, которые изменяются, вызывается другое событие. Например, для заявок, у которых изменяются значения Состояние, Остаток и т.д. будет вызвано событие IConnectorOrdersChanged.

    C#
    // подписываемся на событие успешного соединения
    Trader.Connected += () =>
    {
        this.GuiAsync(() => ChangeConnectStatus(true));
    };
        ...
    trader.Connect();
  4. Для просмотра списка инструментов используется окно Инструменты (SecuritiesWindow.xaml). Чтобы в нем отображались ценные бумаги, необходимо внутри метода Connect_Click класса MainWindow подписаться на событие NewSecurity.

    C#
    Trader.NewSecurity += security => _securitiesWindow.SecurityPicker.Securities.Add(security);
  5. Для просмотра стаканов нужно в окне Инструменты щелкнуть на кнопке Стакан:

    C#
    private void DepthClick(object sender, RoutedEventArgs e)
    {
        var trader = MainWindow.Instance.Trader;
    
        var window = _quotesWindows.SafeAdd(SecurityPicker.SelectedSecurity, security =>
        {
            // начинаем получать котировки стакана
            trader.RegisterMarketDepth(security);
    
            // создаем окно со стаканом
            var wnd = new QuotesWindow { Title = security.Id + " " + LocalizedStrings.MarketDepth };
            wnd.MakeHideable();
            return wnd;
        });
    
        if (window.Visibility == Visibility.Visible)
            window.Hide();
        else
            window.Show();
    
        if (!_initialized)
        {
            TraderOnMarketDepthChanged(trader.GetMarketDepth(SecurityPicker.SelectedSecurity));
            trader.MarketDepthChanged += TraderOnMarketDepthChanged;
            _initialized = true;
        }
    }
  6. Создание заявок (используется класс OrdersWindow):

    C#
    private void NewOrderClick(object sender, RoutedEventArgs e)
    {
        var newOrder = new OrderWindow
        {
            Order = new Order { Security = SecurityPicker.SelectedSecurity },
            SecurityProvider = MainWindow.Instance.Trader,
            MarketDataProvider = MainWindow.Instance.Trader,
            Portfolios = new PortfolioDataSource(MainWindow.Instance.Trader),
        };
    
        if (newOrder.ShowModal(this))
            MainWindow.Instance.Trader.RegisterOrder(newOrder.Order);
    }
  7. Освобождение занятых ресурсов:

    C#
    Trader.Dispose();