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

Выбор инструмента

Компонент SecurityPicker предназначен для поиска и выбора инструментов. Поддерживается как одиночный, так и множественный выбор. Компонент позволяет фильтровать список инструментов по их типу. Также этот компонент может использоваться для отображения финансовой информации (полей level1), как показано в разделе SecurityGrid.

GUI Security Picker 2

SecurityPicker состоит из:

  1. Текстового поля, для ввода кода (или Id) инструмента. При вводе выполняется фильтрация списка по введенной подстроке.

  2. Специального комбинированного списка SecurityTypeComboBox для фильтрации инструментов по их типу.

  3. Таблицы SecurityGrid для отображения списка инструментов.

Основные свойства

  • SelectionMode - режим выбора инструмента: одиночный, множественный.

  • ShowCommonStatColumns - отображать основные колонки.

  • ShowCommonOptionColumns - отображать основные колонки для опционов.

  • Title - заголовок, который отображается в верхней части компонента.

  • Securities - список инструментов.

  • SelectedSecurity - выбранный инструмент.

  • SelectedSecurities - список выбранных инструментов.

  • FilteredSecurities - список отфильтрованных инструментов.

  • ExcludeSecurities - список скрытых в списке инструментов.

  • SelectedType - выбранный тип инструмента.

  • SecurityProvider - провайдер информации об инструментах.

  • MarketDataProvider - провайдер рыночных данных.

Ниже показан фрагмент кода с его использованием, взятый из примера Samples/Quik/Sample .

XAML
<Window x:Class="Sample.SecuritiesWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:loc="clr-namespace:StockSharp.Localization;assembly=StockSharp.Localization"
    xmlns:xaml="http://schemas.stocksharp.com/xaml"
    Title="{x:Static loc:LocalizedStrings.Securities}" Height="415" Width="1081">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="*" />
      <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <xaml:SecurityPicker x:Name="SecurityPicker" x:FieldModifier="public" SecuritySelected="SecurityPicker_OnSecuritySelected" ShowCommonStatColumns="True" />

    <StackPanel Grid.Row="1" HorizontalAlignment="Right" Orientation="Horizontal">
      <Button x:Name="Find" Width="100" Click="FindClick">
        <TextBlock><Run Text="{x:Static loc:LocalizedStrings.Find}" />...</TextBlock>
      </Button>
            <Button x:Name="Level1" Content="Level1..." Width="100" IsEnabled="False" Click="Level1Click" />
      <Button x:Name="Depth" Width="100" IsEnabled="False" Click="DepthClick">
        <TextBlock><Run Text="{x:Static loc:LocalizedStrings.MarketDepth}" />...</TextBlock>
      </Button>
      <Button x:Name="NewOrder" Width="100" IsEnabled="False" Click="NewOrderClick">
        <TextBlock><Run Text="{x:Static loc:LocalizedStrings.NewOrder}" />...</TextBlock>
      </Button>
      <Button x:Name="NewStopOrder" Width="120" IsEnabled="False" Click="NewStopOrderClick">
        <TextBlock><Run Text="{x:Static loc:LocalizedStrings.NewStopOrder}" />...</TextBlock>
      </Button>
    </StackPanel>
  </Grid>
</Window>
C#
private void ConnectClick(object sender, RoutedEventArgs e)
{
    if (!_isConnected)
    {
       ......................................

        if (Trader == null)
        {
            // создаем подключение
            Trader = new QuikTrader
            {
                LuaFixServerAddress = Address.Text.To<EndPoint>(),
                LuaLogin = Login.Text,
                LuaPassword = Password.Password.To<SecureString>(),
                LogLevel = LogLevels.Debug
            };


            _logManager.Sources.Add(Trader);

            // отключение автоматического запроса всех инструментов.
            Trader.RequestAllSecurities = AllSecurities.IsChecked == true;

            // возводим флаг, что соединение установлено
            _isConnected = true;

            // переподключение будет работать только во время работы биржи РТС
            // (чтобы отключить переподключение когда торгов нет штатно, например, ночью)
            Trader.ReConnectionSettings.WorkingTime = ExchangeBoard.Forts.WorkingTime;

            // подписываемся на событие об успешном восстановлении соединения
            Trader.Restored += () => this.GuiAsync(() => MessageBox.Show(this, LocalizedStrings.Str2958));

            // подписываемся на событие разрыва соединения
            Trader.ConnectionError += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString()));

            // подписываемся на ошибку обработки данных (транзакций и маркет)
            Trader.Error += error =>this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибка обработки данных"));

            // подписываемся на ошибку подписки маркет-данных
            Trader.MarketDataSubscriptionFailed += (security, msg, error) =>
                this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(msg.DataType, security)));

            Trader.NewSecurity += security => _securitiesWindow.SecurityPicker.Securities.Add(security);
            Trader.NewMyTrade += trade => _myTradesWindow.TradeGrid.Trades.Add(trade);
            Trader.NewTrade += trade => _tradesWindow.TradeGrid.Trades.Add(trade);
            Trader.NewOrder += order => _ordersWindow.OrderGrid.Orders.Add(order);
            Trader.NewStopOrder += order => _stopOrdersWindow.OrderGrid.Orders.Add(order);
            Trader.OrderRegisterFailed += _ordersWindow.OrderGrid.AddRegistrationFail;
            Trader.OrderCancelFailed += fail => this.GuiAsync(() => MessageBox.Show(this, fail.Error.Message, "Ошибка отмены заявки"));
            Trader.StopOrderRegisterFailed += _stopOrdersWindow.OrderGrid.AddRegistrationFail;
            Trader.StopOrderCancelFailed += fail => this.GuiAsync(() => MessageBox.Show(this, fail.Error.Message, "Ошибка отмены стоп заявки"));
            Trader.NewPortfolio += portfolio => _portfoliosWindow.PortfolioGrid.Portfolios.Add(portfolio);
            Trader.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);

            Trader.MassOrderCancelFailed += (transId, error) =>
                this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str716));

            // устанавливаем поставщик маркет-данных
            _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;

            ShowSecurities.IsEnabled = ShowTrades.IsEnabled =
                ShowMyTrades.IsEnabled = ShowOrders.IsEnabled =
                    ShowPortfolios.IsEnabled = ShowStopOrders.IsEnabled = true;
        }

        Trader.Connect();

        _isConnected = true;
        ConnectBtn.Content = LocalizedStrings.Disconnect;
    }
    else
    {
        Trader.Disconnect();

        _isConnected = false;
        ConnectBtn.Content = LocalizedStrings.Connect;
    }
}

private void SecurityPicker_OnSecuritySelected(Security security)
{
    NewStopOrder.IsEnabled = NewOrder.IsEnabled =
    Level1.IsEnabled = Depth.IsEnabled = security != null;
}