Пример #1
0
        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();
                    }
                }
            }
        }
Пример #2
0
        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);
                        }
                    }
                }
            }
        }