Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
		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();
		}
Beispiel #3
0
        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();
            }
        }