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(); }
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; }
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 ); //} }