Экспорт дополнительных колонок

Экспорт дополнительных колонок
Atom
08.05.2013
UsilaDobry


Вопрос по экспорту дополнительных колонок. Сейчас у меня в настройках таблицы Инструменты в Quik имеются следующие колонки

Полное название Код бумаги Код класса Статус Размер лота Мин. шаг цены Макс. цена Мин. цена

В окне пользователя я создал таблицу и сделал привязки

<ListView x:Name="TabMyTools" Height="100" Margin="5,27,10,0" VerticalAlignment="Top" Width="Auto" Background="#FFF58B8B">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Название" Width="160" DisplayMemberBinding="{Binding Name}"/>
                            <GridViewColumn Header="Код" Width="80" DisplayMemberBinding="{Binding Code}"/>
                            <GridViewColumn Header="Класс" Width="80" DisplayMemberBinding="{Binding Class}"/>
                            <GridViewColumn Header="Последняя сделка" Width="130" DisplayMemberBinding="{Binding LastTrade.Time, FallbackValue=NULL}"/>
                            <GridViewColumn Header="Посл. цена" Width="100" DisplayMemberBinding="{Binding LastTrade.Price, FallbackValue=NULL}"/>
                            <GridViewColumn Header="Лот" Width="80" DisplayMemberBinding="{Binding MinLotSize}"/>
                            <GridViewColumn Header="Шаг" Width="60" DisplayMemberBinding="{Binding MinStepSize}"/>
                            <GridViewColumn Header="Максимальная цена" Width="120" DisplayMemberBinding="{Binding MaxPrice}"/>
                            <GridViewColumn Header="Минимальная цена" Width="120" DisplayMemberBinding="{Binding MinPrice}"/>
                        </GridView>
                    </ListView.View>
                </ListView>

Почему поля "последняя сделка","последняя цена" по инструменту выводятся корректно, при этом в таблице Quik этих полей нет? При этом поле MaxPrice показывает набор цифр, поле MinPrice показывает значения поля MinStepSize, но они есть в Quik? Я так понимаю надо прописать экспорт дополнительных колонок?

Этот код прописываем в библиотечном коннекторе WpfConnectionIntarface в виде

SafeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
SafeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

или можно прямо в основном коде проекта после выбора Quik?

ConnectionInterface.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()));
ConnectionInterface.SafeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
ConnectionInterface.SafeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

Или же вообще данный код надо прописать в SafeConnection в виде

Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

Куда бы я не вносил этот код, везде ошибка Не определены SecuritiesTable и DdeSecurityColumns///


Теги:


Спасибо:


IvanB

Фотография
Дата: 08.05.2013
Ответить


UsilaDobry: Вопрос по экспорту дополнительных колонок. ... Об экспорте дополнительных колонок из Quik написано в документации http://stocksharp.com/doc/html/4261879e-9bb3-482c-9fc5-27ecb07bdf5e.htm , есть демонстрационный проект, который называется SampleDdeExtendedInfo.

Спасибо:

UsilaDobry

Фотография
Дата: 08.05.2013
Ответить


IvanB:

UsilaDobry: Вопрос по экспорту дополнительных колонок. ... Об экспорте дополнительных колонок из Quik написано в документации http://stocksharp.com/doc/html/4261879e-9bb3-482c-9fc5-27ecb07bdf5e.htm , есть демонстрационный проект, который называется SampleDdeExtendedInfo.

Я читаю документацию, но к моему сожалению, не всё там понятно... Например, в документации сказано: "Через QuikTrader.SecuritiesTable добавляются требуемые колонки в том порядке, в которым они были добавлены в Quik: // добавляем на экспорт необходимые колонки this.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.Volatility); this.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.TheorPrice);"

А в указанном Вами примере, данный код внедрен в обработчик события кнопки Connect.

	:::spoiler
private void ConnectClick(object sender, RoutedEventArgs e)
		{
			if (!_isConnected)
			{
				if (Path.Text.IsEmpty())
					MessageBox.Show(this, "Путь к Quik не выбран");
				else
				{
					if (Trader == null)
					{
						// создаем шлюз
						Trader = new QuikTrader(Path.Text);

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

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

						Trader.NewSecurities += securities => this.GuiAsync(() => _securitiesWindow.Securities.AddRange(securities));

						Trader.ProcessDataError += error => System.Diagnostics.Debug.WriteLine(error);

						// добавляем на экспорт необходимые колонки
						Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.ImpliedVolatility);
						Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.TheorPrice);
						Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.UnderlyingSecurity);
						Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinStepPrice);

						// добавляем экспорт дополнительных колонок из стакана (своя продажа и покупка)
						Trader.QuotesTable.Columns.Add(DdeQuoteColumns.OwnAskVolume);
						Trader.QuotesTable.Columns.Add(DdeQuoteColumns.OwnBidVolume);

						Trader.Connected += () => this.GuiAsync(() =>
						{
							ShowSecurities.IsEnabled = true;
							ExportDde.IsEnabled = true;

							_isConnected = true;
							ConnectBtn.Content = "Отключиться";
						});

						Trader.Disconnected += () => this.GuiAsync(() =>
						{
							_isConnected = false;
							ConnectBtn.Content = "Подключиться";
						});
					}
					
					Trader.Connect();
				}
			}
			else
				Trader.Disconnect();
		}

Из чего я делаю вывод, что в библиотеке StockSharp.WpfConnectionInterface, в обработчике события кнопки Сonnect необходимо добавить этот код, но здесь ошибка, SecuritiesTable не существует у Trader. Поэтому и задаю вопрос...

private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (_safeConnection == null)
                return;

            if (_safeConnection.IsConnected)
            {
                BtnConnect.Content = "Подключиться";
                BtnConnect.IsEnabled = false;
                
                //Отписаться от события появления новых инструментов
                _safeConnection.Trader.NewSecurities -= Trader_NewSecurities;
                //Отписаться от события появления новых портфелей
                _safeConnection.Trader.NewPortfolios -= Trader_NewPortfolios;

                //Объявляем действие, которое нужно выполнить при отключении от торговой платформы
                Action disconnected = null;
                disconnected = () =>
                    {
                        _safeConnection.Trader.Disconnected -= disconnected;
                        this.GuiAsync(() =>
                            {
                                BtnConnect.IsEnabled = true;
                            });
                    };
                _safeConnection.Trader.Disconnected += disconnected;
                
                //Разорвать соединение
                _safeConnection.DisConnectSafe();
            }
            else
            {
                BtnConnect.Content = "Отключиться";
                //BtnConnect.IsEnabled = false;

                //Подписаться на событие появления новых инструментов
                _safeConnection.Trader.NewSecurities += Trader_NewSecurities;
                //Подписаться на событие появления новых портфелей
                _safeConnection.Trader.NewPortfolios += Trader_NewPortfolios;

                // Добавляем экспорт дополнительных колонок в таблицу
                _safeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
                _safeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

                //Объявляем действие, которое нужно выполнить при подключении к торговой платформе
                Action connected = null;
                connected = () =>
                {
                    _safeConnection.Trader.Connected -= connected;
                    this.GuiAsync(() => { BtnConnect.IsEnabled = true; });
                };
                _safeConnection.Trader.Connected += connected;

                //Подключиться безопасно
                _safeConnection.ConnectSafe();
            }
        }                
Спасибо:

IvanB

Фотография
Дата: 08.05.2013
Ответить


UsilaDobry, вышлите (iv_qul@list.ru) Ваш проект, с кодом импорта дополнительных столбцов. И укажите, какой столбец Вы добавили в Quik.

Спасибо:

UsilaDobry

Фотография
Дата: 08.05.2013
Ответить


IvanB: UsilaDobry, вышлите (iv_qul@list.ru) Ваш проект, с кодом импорта дополнительных столбцов. И укажите, какой столбец Вы добавили в Quik.

Мой проект будет бесполезен, ведь я вношу код ниже

_safeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
_safeConnection.Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

в класс библиотеки StockSharp.WpfConnectionInterface. См. код выше в посте в нижнем спойлере.

А в Quik я добавил две колонки "Максимальная цена" и "Минимальная цена".

Спасибо:

Moadip

Фотография
Дата: 08.05.2013
Ответить


ConnectionInterface.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()));

Конструктор SafeConnection какого типа принимает параметр? Не думаю что он заточен только под QuikTrader, поэтому или ITrader или BaseTrader.

Соответственно _safeConnection.Trader будет или ITrader или BaseTrader.

SecuritiesTable есть только у QuikTrader, поэтому студия и матерится, что не может найти это свойство у _safeConnection.Trader. Надо привести _safeConnection.Trader к соответствующему типу. Так должно работать:


((QuikTrader)_safeConnection.Trader).SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
((QuikTrader)_safeConnection.Trader).SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

Доп. столбцы можно добавлять хоть где, главное до коннекта и начала экспорта данных.

Спасибо: UsilaDobry

UsilaDobry

Фотография
Дата: 09.05.2013
Ответить


Moadip: Так должно работать:

((QuikTrader)_safeConnection.Trader).SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice); ((QuikTrader)_safeConnection.Trader).SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);


Работает! Ёлы-палы, благодарю [biggrin] 
С праздником Победы! [biggrin]
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy