public StrategyConnector()
        {
            EntityFactory = _entityFactory = new StrategyEntityFactory();

            SessionHolder = BasketSessionHolder = new BasketSessionHolder(TransactionIdGenerator);

            TransactionAdapter = new BasketMessageAdapter(MessageAdapterTypes.Transaction, BasketSessionHolder);
            MarketDataAdapter  = new BasketMessageAdapter(MessageAdapterTypes.MarketData, BasketSessionHolder);

            ApplyMessageProcessor(MessageDirections.In, true, true);
            ApplyMessageProcessor(MessageDirections.Out, true, true);
        }
        public StudioConnector()
        {
            EntityFactory = new StudioEntityFactory(this);

            SessionHolder = _sessionHolder = new BasketSessionHolder(TransactionIdGenerator);

            MarketDataAdapter  = _marketDataAdapter = new StudioMarketDataAdapter(_sessionHolder);
            TransactionAdapter = _transactionAdapter = new BasketMessageAdapter(MessageAdapterTypes.Transaction, _sessionHolder);

            ApplyMessageProcessor(MessageDirections.In, true, false);
            ApplyMessageProcessor(MessageDirections.In, false, true);
            ApplyMessageProcessor(MessageDirections.Out, true, true);

            _transactionAdapter.NewOutMessage += TransactionAdapterNewOutMessage;

            CreateEmulationSessionHolder();

            var cmdSvc = ConfigManager.GetService <IStudioCommandService>();

            cmdSvc.Register <LookupSecuritiesCommand>(this, false, cmd => LookupSecurities(cmd.Criteria));
            cmdSvc.Register <RequestTradesCommand>(this, false, cmd => new NewTradesCommand(Trades).Process(this));
            //cmdSvc.Register<RequestPortfoliosCommand>(this, cmd => Portfolios.ForEach(pf => new PortfolioCommand(pf, true).Process(this)));
            cmdSvc.Register <RequestPositionsCommand>(this, false, cmd => Positions.ForEach(pos => new PositionCommand(CurrentTime, pos, true).Process(this)));
            cmdSvc.Register <RequestMarketDataCommand>(this, false, cmd => AddExport(cmd.Security, cmd.Type));
            cmdSvc.Register <RefuseMarketDataCommand>(this, false, cmd => RemoveExport(cmd.Security, cmd.Type));

            //NewPortfolios += portfolios => portfolios.ForEach(pf => new PortfolioCommand(pf, true).Process(this));
            PortfoliosChanged      += portfolios => portfolios.ForEach(pf => new PortfolioCommand(pf, false).Process(this));
            NewPositions           += positions => positions.ForEach(pos => new PositionCommand(CurrentTime, pos, true).Process(this));
            PositionsChanged       += positions => positions.ForEach(pos => new PositionCommand(CurrentTime, pos, false).Process(this));
            NewTrades              += trades => new NewTradesCommand(trades).Process(this);
            NewNews                += news => new NewNewsCommand(news).Process(this);
            LookupSecuritiesResult += securities => new LookupSecuritiesResultCommand(securities).Process(this);
            //LookupPortfoliosResult += portfolios => new LookupPortfoliosResultCommand(portfolios).Process(this);

            UpdateSecurityLastQuotes = false;
            UpdateSecurityByLevel1   = false;
        }
        private void QuikConnectionMouseDoubleClick(object sender, RoutedEventArgs e)
        {
            if (_connector == null)
            {
                _connector            = new Connector();
                _connector.Connected += _connector.StartExport;

                var session = new BasketSessionHolder(_connector.TransactionIdGenerator);

                _connector.MarketDataAdapter  = new BasketMessageAdapter(MessageAdapterTypes.MarketData, session);
                _connector.TransactionAdapter = new BasketMessageAdapter(MessageAdapterTypes.Transaction, session);

                _connector.ApplyMessageProcessor(MessageDirections.In, true, false);
                _connector.ApplyMessageProcessor(MessageDirections.In, false, true);
                _connector.ApplyMessageProcessor(MessageDirections.Out, true, true);

                if (QuikCheckBox.IsChecked == true)
                {
                    session.InnerSessions.Add(new QuikSessionHolder(_connector.TransactionIdGenerator)
                    {
                        IsTransactionEnabled = true,
                        IsMarketDataEnabled  = true,
                    }, 1);
                }

                if (SmartComCheckBox.IsChecked == true)
                {
                    session.InnerSessions.Add(new SmartComSessionHolder(_connector.TransactionIdGenerator)
                    {
                        Login                = Login.Text,
                        Password             = Password.Password.To <SecureString>(),
                        Address              = Address.SelectedAddress,
                        IsTransactionEnabled = true,
                        IsMarketDataEnabled  = true,
                    }, 0);
                }

                if (PlazaCheckBox.IsChecked == true)
                {
                    session.InnerSessions.Add(new PlazaSessionHolder(_connector.TransactionIdGenerator)
                    {
                        IsCGate = true,
                        IsTransactionEnabled = true,
                        IsMarketDataEnabled  = true,
                    }, 0);
                }

                if (session.InnerSessions.Count == 0)
                {
                    MessageBox.Show(LocalizedStrings.Str2971);
                    return;
                }

                _securityProvider = new FilterableSecurityProvider(_connector);

                _connector.ConnectionError += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959));
                _connector.Connect();
            }
            else
            {
                Disconnect();
            }
        }
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (!_isConnected)
            {
                if (Connector == null)
                {
                    var isDde = IsDde.IsChecked == true;

                    if (SmartLogin.Text.IsEmpty())
                    {
                        MessageBox.Show(this, LocalizedStrings.Str2965);
                        return;
                    }
                    if (SmartPassword.Password.IsEmpty())
                    {
                        MessageBox.Show(this, LocalizedStrings.Str2966);
                        return;
                    }
                    if (isDde && QuikPath.Text.IsEmpty())
                    {
                        MessageBox.Show(this, LocalizedStrings.Str2967);
                        return;
                    }

                    // создаем агрегирующее подключение (+ сразу инициализируем настройки переподключения)
                    Connector = InitReconnectionSettings(new Connector());

                    var session = new BasketSessionHolder(Connector.TransactionIdGenerator);

                    Connector.MarketDataAdapter  = new BasketMessageAdapter(MessageAdapterTypes.MarketData, session);
                    Connector.TransactionAdapter = new BasketMessageAdapter(MessageAdapterTypes.Transaction, session);

                    Connector.ApplyMessageProcessor(MessageDirections.In, true, false);
                    Connector.ApplyMessageProcessor(MessageDirections.In, false, true);
                    Connector.ApplyMessageProcessor(MessageDirections.Out, true, true);

                    // добавляем подключения к SmartCOM и Quik
                    session.InnerSessions.Add(new QuikSessionHolder(Connector.TransactionIdGenerator)
                    {
                        IsDde = isDde,
                        Path  = QuikPath.Text,
                        IsTransactionEnabled = true,
                        IsMarketDataEnabled  = true,
                    }, 1);
                    //session.InnerSessions.Add(new PlazaSessionHolder(Connector.TransactionIdGenerator)
                    //{
                    //	IsCGate = true,
                    //	IsTransactionEnabled = true,
                    //	IsMarketDataEnabled = true,
                    //}, 0);
                    session.InnerSessions.Add(new SmartComSessionHolder(Connector.TransactionIdGenerator)
                    {
                        Login                = SmartLogin.Text,
                        Password             = SmartPassword.Password.To <SecureString>(),
                        Address              = SmartAddress.SelectedAddress,
                        IsTransactionEnabled = true,
                        IsMarketDataEnabled  = true,
                    }, 0);

                    // очищаем из текстового поля в целях безопасности
                    //SmartPassword.Clear();

                    var logManager = new LogManager();
                    logManager.Listeners.Add(new FileLogListener("sample.log"));
                    logManager.Sources.Add(Connector);

                    // подписываемся на событие успешного соединения
                    Connector.Connected += () =>
                    {
                        // возводим флаг, что соединение установлено
                        _isConnected = true;

                        // разблокируем кнопку Экспорт
                        this.GuiAsync(() => ChangeConnectStatus(true));
                    };

                    // подписываемся на событие разрыва соединения
                    Connector.ConnectionError += error => this.GuiAsync(() =>
                    {
                        // заблокируем кнопку Экспорт (так как соединение было потеряно)
                        ChangeConnectStatus(false);

                        MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
                    });

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

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

                    Connector.NewSecurities += securities => _securitiesWindow.SecurityPicker.Securities.AddRange(securities);
                    Connector.NewOrders     += orders => _ordersWindow.OrderGrid.Orders.AddRange(orders);

                    // подписываемся на событие о неудачной регистрации заявок
                    Connector.OrdersRegisterFailed += OrdersFailed;
                    // подписываемся на событие о неудачном снятии заявок
                    Connector.OrdersCancelFailed += OrdersFailed;

                    // подписываемся на событие о неудачной регистрации стоп-заявок
                    Connector.StopOrdersRegisterFailed += OrdersFailed;
                    // подписываемся на событие о неудачном снятии стоп-заявок
                    Connector.StopOrdersCancelFailed += OrdersFailed;

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

                    ShowSecurities.IsEnabled = ShowOrders.IsEnabled = true;
                }

                Connector.Connect();
            }
            else
            {
                Connector.Disconnect();
            }
        }
Beispiel #5
0
 public BasketEmulationAdapter(BasketSessionHolder sessionHolder, EmulationSettings settings)
     : base(MessageAdapterTypes.Transaction, sessionHolder)
 {
     _settings = settings;
 }
 public StudioMarketDataAdapter(BasketSessionHolder sessionHolder)
     : base(MessageAdapterTypes.MarketData, sessionHolder)
 {
 }