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

Пример работы с MicexTrader

Пример работы с MicexTrader демонстрирует приложение SampleMicex, показанное на рисунке ниже. Исходные коды примера лежат в дистрибутиве в папке Samples/Micex.

Micex Sample
  1. Создаем экземпляр класса шлюза MicexTrader, задаем адрес сервера и идентификатор доступа (Trader.Server), логин, пароль, уровень сжатия данных, интерфейс торговой системы ММВБ, а также число котировок в стакане:

    C#
    // создаем подключение
    Trader.Addresses = new[] { Address.Text.To<EndPoint>() };
    Trader.Server = Server.Text;
    Trader.Login = Login.Text;
    Trader.CompressionLevel = (CompressionLevels)Compression.SelectedValue;
    Trader.Interface = Interface.Text;
    Trader.OrderBookDepth = Depth.Text.To<int>();
    
    if (!Password.Password.IsEmpty())
        Trader.Password = Password.Password;
  2. Устанавливаем обработчики событий IConnector. В обработчике события Connected подписываемся на получение новостей при помощи метода RegisterNews, а в обработчике события NewSecurity запускаем экспорт тиковых сделок методом RegisterTrades, если "взведен" сооветствующий флаг:

    C#
    // подписываемся на событие успешного соединения
    Trader.Connected += () =>
    {
        this.GuiAsync(() => ChangeConnectStatus(true));
    
        // запускаем подписку на новости
        Trader.RegisterNews();
    };
    
    // подписываемся на событие разрыва соединения
    Trader.ConnectionError += error => this.GuiAsync(() =>
    {
        ChangeConnectStatus(false);
        MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
    });
    
    // подписываемся на событие успешного отключения
    Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));
    
    // подписываемся на ошибку обработки данных (транзакций и маркет)
    Trader.Error += error =>
        this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2955));
    
    // подписываемся на ошибку подписки маркет-данных
    Trader.MarketDataSubscriptionFailed += (security, msg, error) =>
        this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(msg.DataType, security)));
    
    var ticksSubscribed = false;
    
    Trader.NewSecurity += security =>
    {
        // запускаем экспорт всех тиков
        if (!ticksSubscribed)
        {
            Trader.RegisterTrades(security);
            ticksSubscribed = true;
        }
    
        _securitiesWindow.SecurityPicker.Securities.Add(security);
    };
    
    Trader.NewTrade += trade => _tradesWindow.TradeGrid.Trades.Add(trade);
    Trader.NewOrder += order => _ordersWindow.OrderGrid.Orders.Add(order);
    Trader.NewMyTrade += trade => _myTradesWindow.TradeGrid.Trades.Add(trade);
    
    Trader.NewPortfolio += portfolio => _portfoliosWindow.PortfolioGrid.Portfolios.Add(portfolio);
    Trader.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);
    
    // подписываемся на событие о неудачной регистрации заявок
    Trader.OrderRegisterFailed += _ordersWindow.OrderGrid.AddRegistrationFail;
    // подписываемся на событие о неудачном снятии заявок
    Trader.OrderCancelFailed += OrderFailed;
    
    Trader.MassOrderCancelFailed += (transId, error) =>
        this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str716));
    
    Trader.NewNews += news => _newsWindow.NewsPanel.NewsGrid.News.Add(news);
    
    // устанавливаем поставщик маркет-данных
    _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;
    
    // устанавливаем поставщик новостей
    _newsWindow.NewsPanel.NewsProvider = Trader;
  3. Выполняем подключение:

    C#
    Trader.Connect();
  4. При успешном подключении можно ожидать поступления событий:

  5. Так выглядит окно инструментов, в котором можно открыть стакан и окно выставления заявки при помощи соответствующих кнопок.

    Micex Sample Secirities
  6. Для запроса обновлений по стаканам необходимо воспользоваться методом RegisterMarketDepth(Security):

    C#
    // начинаем получать котировки стакана
    trader.RegisterMarketDepth(security);
  7. Для регистрации заявок предусмотрена кнопка «Новая заявка». Метод RegisterOrder(Order) отправляет заявку на сервер:

    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);
    }