/// <summary> /// Event fired each time the we add/remove securities from the data feed /// </summary> /// <param name="algorithm">The algorithm instance that experienced the change in securities</param> /// <param name="changes">The security additions and removals from the algorithm</param> public override void OnSecuritiesChanged(QCAlgorithmFramework algorithm, SecurityChanges changes) { // added foreach (var added in changes.AddedSecurities) { SymbolData symbolData; if (!_symbolDataBySymbol.TryGetValue(added.Symbol, out symbolData)) { // add symbol/symbolData pair to collection symbolData = new SymbolData(_rangePeriod, _consolidatorTimeSpan) { Symbol = added.Symbol, K1 = _k1, K2 = _k2 }; _symbolDataBySymbol[added.Symbol] = symbolData; //register consolidator algorithm.SubscriptionManager.AddConsolidator(added.Symbol, symbolData.GetConsolidator()); } } // removed foreach (var removed in changes.RemovedSecurities) { SymbolData symbolData; if (_symbolDataBySymbol.TryGetValue(removed.Symbol, out symbolData)) { // unsibscribe consolidator from data updates algorithm.SubscriptionManager.RemoveConsolidator(removed.Symbol, symbolData.GetConsolidator()); // remove item from dictionary collection if (!_symbolDataBySymbol.Remove(removed.Symbol)) { algorithm.Error("Unable to remove data from collection: DualThrustAlphaModel"); } } } }