Ejemplo n.º 1
0
        public void CheckSubscription()
        {
            foreach (var stock in _mainModel.Stocks.Values)
            {
                if (stock.LastUpdate.Elapsed().TotalMinutes > 1 && Instruments[stock.Ticker].IsActive)
                {
                    if (_subscribedFigi.Contains(stock.Figi))
                    {
                        var request = new CandleUnsubscribeRequest(stock.Figi, CandleInterval.Day);
                        QueueBrokerAction(b => b.SendStreamingRequestAsync(request),
                                          $"Отписка от дневной свечи {stock.Ticker} ({stock.Figi})");

                        var request2 = new OrderbookUnsubscribeRequest(stock.Figi, 5);
                        QueueBrokerAction(b => CandleConnection.SendStreamingRequestAsync(request2),
                                          $"Отписка от стакана {stock.Ticker} ({stock.Figi}");

                        var request3 = new InstrumentInfoUnsubscribeRequest(stock.Figi);
                        QueueBrokerAction(b => InstrumentInfoConnection.SendStreamingRequestAsync(request3),
                                          $"Отписка от статуса {stock.Ticker} ({stock.Figi}");

                        _subscribedFigi.Remove(stock.Figi);
                    }
                    if (_subscribedMinuteFigi.Contains(stock.Figi))
                    {
                        QueueBrokerAction(b => b.SendStreamingRequestAsync(
                                              UnsubscribeCandle(stock.Figi, CandleInterval.Minute)),
                                          $"Отписка от минутной свечи {stock.Ticker} ({stock.Figi})");

                        _subscribedMinuteFigi.Remove(stock.Figi);
                    }
                }
            }
            SubscribeToStockEvents();
        }
Ejemplo n.º 2
0
        private void PrepareConnection()
        {
            if (CommonConnection != null)
            {
                _stockProcessingQueue.Clear();
                CommonConnection.StreamingEventReceived -= Broker_StreamingEventReceived;
                CommonConnection.Dispose();
            }
            if (InstrumentInfoConnection != null)
            {
                InstrumentInfoConnection.StreamingEventReceived -= Broker_StreamingEventReceived;
                InstrumentInfoConnection.Dispose();
            }

            if (CandleConnection != null)
            {
                CandleConnection.StreamingEventReceived -= Broker_StreamingEventReceived;
                CandleConnection.Dispose();
            }

            CommonConnection = ConnectionFactory.GetConnection(TiApiToken);
            CandleConnection = ConnectionFactory.GetConnection(TiApiToken);
            if (Settings.SubscribeInstrumentStatus)
            {
                InstrumentInfoConnection = ConnectionFactory.GetConnection(TiApiToken);
                InstrumentInfoConnection.StreamingEventReceived += Broker_StreamingEventReceived;
            }
            CandleConnection.StreamingEventReceived += Broker_StreamingEventReceived;
            CommonConnection.StreamingEventReceived += Broker_StreamingEventReceived;

            RunMonthUpdateTaskIfNotRunning();
            _lastRestartTime = DateTime.Now;
        }
Ejemplo n.º 3
0
        public void SubscribeToStockEvents()
        {
            //var toSubscribeInstr = new HashSet<IStockModel>();
            foreach (var stock in _mainModel.Stocks.Values)
            {
                if (stock.IsDead)
                {
                    continue;
                }

                if (!_subscribedFigi.Contains(stock.Figi) && Instruments[stock.Ticker].IsActive)
                {
                    var request = new CandleSubscribeRequest(stock.Figi, CandleInterval.Day);
                    QueueBrokerAction(b => b.SendStreamingRequestAsync(request),
                                      $"Подписка на дневную свечу {stock.Ticker} ({stock.Figi})");

                    var request2 = new OrderbookSubscribeRequest(stock.Figi, 5);
                    QueueBrokerAction(b => CandleConnection.SendStreamingRequestAsync(request2),
                                      $"Подписка на стакан {stock.Ticker} ({stock.Figi}");

                    if (Settings.SubscribeInstrumentStatus)
                    {
                        var request3 = new InstrumentInfoSubscribeRequest(stock.Figi);
                        QueueBrokerAction(b => InstrumentInfoConnection.SendStreamingRequestAsync(request3),
                                          $"Подписка на статус {stock.Ticker} ({stock.Figi}");
                    }

                    //toSubscribeInstr.Add(stock);
                    _subscribedFigi.Add(stock.Figi);
                }
            }
            //int n = 0;
            //foreach ( var stock in toSubscribeInstr )
            //{
            //    var request3 = new InstrumentInfoSubscribeRequest( stock.Figi );
            //    QueueBrokerAction( b => InstrumentInfoConnection.SendStreamingRequestAsync( request3 ),
            //        $"Подписка на статус {stock.Ticker} ({stock.Figi}" );

            //    if ( ++n % 100 == 0 )
            //        await Task.Delay( 1000 );
            //}
        }