protected override void ApplySettings(HydraTaskSettings settings) { _settings = new PlazaSettings(settings); if (!settings.IsDefault) { return; } using (var connector = new PlazaTrader()) { _settings.AppName = "HYD"; _settings.Address = connector.Address; _settings.Login = string.Empty; _settings.Password = new SecureString(); _settings.CGateKey = new SecureString(); _settings.IsCGate = false; _settings.OnlySystemTrades = true; _settings.IsFastRepl = false; _settings.OverrideDll = true; var registry = connector.TableRegistry; _settings.Tables = new[] { registry.CommonFuture, registry.CommonOption, registry.SessionContentsFuture, registry.SessionContentsOption, registry.TradeFuture, registry.TradeOption, registry.Session, registry.Index, registry.Volatility, registry.Aggregation5Future, registry.Aggregation5Option, registry.AnonymousDeal }.Select(t => t.Id); } }
private void ConnectClick(object sender, RoutedEventArgs e) { if (_connector == null) { if (IsQuik.IsChecked == true) { var isDde = IsDde.IsChecked == true; if (isDde && Path.Text.IsEmpty()) { MessageBox.Show(this, LocalizedStrings.Str2969); return; } // создаем подключение var trader = new QuikTrader(Path.Text) { IsDde = isDde }; if (isDde) { // изменяем метаданные так, чтобы начали обрабатывать дополнительные колонки опционов var columns = trader.SecuritiesTable.Columns; columns.Add(DdeSecurityColumns.Strike); columns.Add(DdeSecurityColumns.ImpliedVolatility); columns.Add(DdeSecurityColumns.UnderlyingSecurity); columns.Add(DdeSecurityColumns.TheorPrice); columns.Add(DdeSecurityColumns.OptionType); columns.Add(DdeSecurityColumns.ExpiryDate); trader.DdeTables = new[] { trader.SecuritiesTable, trader.TradesTable }; } _connector = trader; } else { var trader = new PlazaTrader { Address = Address.Text.To<EndPoint>(), IsCGate = IsCGate.IsChecked == true }; trader.Tables.Add(trader.TableRegistry.Volatility); if (IsAutorization.IsChecked == true) { trader.Login = Login.Text; trader.Password = Password.Password; } _connector = trader; } Desk.MarketDataProvider = _connector; Desk.SecurityProvider = _connector; Desk.CurrentTime = null; // добавляем в выпадающий список только фьючерсы _connector.NewSecurities += securities => this.GuiAsync(() => { _assets.AddRange(securities.Where(s => s.Type == SecurityTypes.Future)); if (SelectedAsset == null && _assets.Count > 0) SelectedAsset = _assets.First(); if (SelectedAsset != null) { var newStrikes = securities .Where(s => s.Type == SecurityTypes.Option && s.UnderlyingSecurityId.CompareIgnoreCase(SelectedAsset.Id)) .ToArray(); if (newStrikes.Length > 0) { _options.AddRange(newStrikes); Desk.Options = _options; Desk.RefreshOptions(); } } }); _connector.SecuritiesChanged += securities => { this.GuiAsync(() => { if (SelectedAsset == null) return; var newStrikes = securities .Where(s => s.Type == SecurityTypes.Option && s.UnderlyingSecurityId.CompareIgnoreCase(SelectedAsset.Id)) .Where(s => !_options.Contains(s)) .ToArray(); if (newStrikes.Length > 0) { _options.AddRange(newStrikes); Desk.Options = _options; Desk.RefreshOptions(); } if (Desk.Options.Intersect(securities).Any()) Desk.RefreshOptions(); }); }; // подписываемся на событие новых сделок чтобы обновить текущую цену фьючерса _connector.NewTrades += trades => this.GuiAsync(() => { var asset = SelectedAsset; if (asset == null) return; if (asset.LastTrade != null) LastPrice.Text = asset.LastTrade.Price.To<string>(); }); } if (_connector.ConnectionState == ConnectionStates.Connected) _connector.Disconnect(); else _connector.Connect(); }
private void ConnectClick(object sender, RoutedEventArgs e) { if (_connector == null) { if (IsQuik.IsChecked == true) { var isDde = IsDde.IsChecked == true; if (isDde && Path.Text.IsEmpty()) { MessageBox.Show(this, LocalizedStrings.Str2969); return; } // создаем подключение var trader = new QuikTrader(Path.Text) { IsDde = isDde }; if (isDde) { // изменяем метаданные так, чтобы начали обрабатывать дополнительные колонки опционов var columns = trader.SecuritiesTable.Columns; columns.Add(DdeSecurityColumns.Strike); columns.Add(DdeSecurityColumns.ImpliedVolatility); columns.Add(DdeSecurityColumns.UnderlyingSecurity); columns.Add(DdeSecurityColumns.TheorPrice); columns.Add(DdeSecurityColumns.OptionType); columns.Add(DdeSecurityColumns.ExpiryDate); } _connector = trader; } else { var trader = new PlazaTrader { Address = Address.Text.To <EndPoint>(), IsCGate = IsCGate.IsChecked == true }; trader.Tables.Add(trader.TableRegistry.Volatility); if (IsAutorization.IsChecked == true) { trader.Login = Login.Text; trader.Password = Password.Password; } _connector = trader; } Desk.MarketDataProvider = _connector; Desk.SecurityProvider = _connector; Desk.CurrentTime = null; // добавляем в выпадающий список только фьючерсы _connector.NewSecurities += securities => this.GuiAsync(() => { _assets.AddRange(securities.Where(s => s.Type == SecurityTypes.Future)); if (SelectedAsset == null && _assets.Count > 0) { SelectedAsset = _assets.First(); } if (SelectedAsset != null) { var newStrikes = securities .Where(s => s.Type == SecurityTypes.Option && s.UnderlyingSecurityId.CompareIgnoreCase(SelectedAsset.Id)) .ToArray(); if (newStrikes.Length > 0) { _options.AddRange(newStrikes); Desk.Options = _options; Desk.RefreshOptions(); } } }); _connector.SecuritiesChanged += securities => { this.GuiAsync(() => { if (SelectedAsset == null) { return; } var newStrikes = securities .Where(s => s.Type == SecurityTypes.Option && s.UnderlyingSecurityId.CompareIgnoreCase(SelectedAsset.Id)) .Where(s => !_options.Contains(s)) .ToArray(); if (newStrikes.Length > 0) { _options.AddRange(newStrikes); Desk.Options = _options; Desk.RefreshOptions(); } if (Desk.Options.Intersect(securities).Any()) { Desk.RefreshOptions(); } }); }; // подписываемся на событие новых сделок чтобы обновить текущую цену фьючерса _connector.NewTrades += trades => this.GuiAsync(() => { var asset = SelectedAsset; if (asset == null) { return; } if (asset.LastTrade != null) { LastPrice.Text = asset.LastTrade.Price.To <string>(); } }); _connector.Connected += () => { var trader = _connector as QuikTrader; if (trader != null && trader.IsDde) { var quikTrader = trader; quikTrader.StartExport(new[] { quikTrader.SecuritiesTable, quikTrader.TradesTable }); } else { _connector.StartExport(); } }; } if (_connector.ConnectionState == ConnectionStates.Connected) { _connector.Disconnect(); } else { _connector.Connect(); } }