public void Subscribe(IDataProvider provider, InstrumentList instruments)
        {
            if (provider.Status != ProviderStatus.Connected)
            {
                provider.Connect();
            }

            var newInstruments = new InstrumentList();

            for (int i = 0; i < instruments.Count; i++)
            {
                var instrument = instruments.GetByIndex(i);
                if (!this._submap.ContainsKey(provider.Id))
                {
                    this._submap[provider.Id] = new Dictionary <Instrument, int>();
                }
                if (!this._submap[provider.Id].ContainsKey(instrument) || this._submap[provider.Id][instrument] == 0)
                {
                    this._submap[provider.Id][instrument] = 0;
                    newInstruments.Add(instrument);
                }
                this._submap[provider.Id][instrument] += 1;
            }
            if (newInstruments.Count > 0)
            {
                provider.Subscribe(newInstruments);
            }
        }
        public void Unsubscribe(IDataProvider provider, InstrumentList instruments)
        {
            var list = new InstrumentList();

            for (int i = 0; i < instruments.Count; i++)
            {
                var instrument = instruments.GetByIndex(i);
                if (this._submap.ContainsKey(provider.Id) && this._submap[provider.Id][instrument] != 0)
                {
                    this._submap[provider.Id][instrument] -= 1;
                    if (this._submap[provider.Id][instrument] == 0)
                    {
                        list.Add(instrument);
                    }
                }
                else
                {
                    Console.WriteLine($"SubscriptionManager::Unsubscribe Error. Instrument has no subscriptions {instrument.Symbol} on data provider {provider.Name}");
                }
            }
            provider.Unsubscribe(list);
        }