private void RemoveSecurityFromUniverse( List <PendingRemovalsManager.RemovedMember> removedMembers, DateTime dateTimeUtc, DateTime algorithmEndDateUtc) { if (removedMembers == null) { return; } foreach (var removedMember in removedMembers) { var universe = removedMember.Universe; var member = removedMember.Security; // safe to remove the member from the universe universe.RemoveMember(dateTimeUtc, member); foreach (var subscription in universe.GetSubscriptionRequests(member, dateTimeUtc, algorithmEndDateUtc, _algorithm.SubscriptionManager.SubscriptionDataConfigService)) { if (_dataManager.RemoveSubscription(subscription.Configuration, universe)) { _internalSubscriptionManager.RemovedSubscriptionRequest(subscription); member.IsTradable = false; // We need to mark this security as untradeable while it has no data subscription // it is expected that this function is called while in sync with the algo thread, // so we can make direct edits to the security here. // We only clear the cache once the subscription is removed from the data stack member.Cache.Reset(); } } } }
private void RemoveSecurityFromUniverse( List <PendingRemovalsManager.RemovedMember> removedMembers, List <Security> removals, DateTime dateTimeUtc, DateTime algorithmEndDateUtc) { if (removedMembers == null) { return; } foreach (var removedMember in removedMembers) { var universe = removedMember.Universe; var member = removedMember.Security; // safe to remove the member from the universe universe.RemoveMember(dateTimeUtc, member); // we need to mark this security as untradeable while it has no data subscription // it is expected that this function is called while in sync with the algo thread, // so we can make direct edits to the security here member.Cache.Reset(); foreach (var subscription in universe.GetSubscriptionRequests(member, dateTimeUtc, algorithmEndDateUtc, _algorithm.SubscriptionManager.SubscriptionDataConfigService)) { if (subscription.IsUniverseSubscription) { removals.Remove(member); } else { if (_dataManager.RemoveSubscription(subscription.Configuration, universe)) { _internalSubscriptionManager.RemovedSubscriptionRequest(subscription); member.IsTradable = false; // remove symbol mappings for symbols removed from universes // TODO : THIS IS BAD! // only remove from cache if there is no universe using this data configuration SymbolCache.TryRemove(member.Symbol); } } } } }