Exemplo n.º 1
0
 /// <summary>
 /// Construct the Equity Object
 /// </summary>
 public Equity(Symbol symbol,
               SecurityExchangeHours exchangeHours,
               Cash quoteCurrency,
               SymbolProperties symbolProperties,
               ICurrencyConverter currencyConverter,
               IRegisteredSecurityDataTypesProvider registeredTypes,
               SecurityCache securityCache,
               Exchange primaryExchange = QuantConnect.Exchange.UNKNOWN)
     : base(symbol,
            quoteCurrency,
            symbolProperties,
            new EquityExchange(exchangeHours),
            securityCache,
            new SecurityPortfolioModel(),
            new EquityFillModel(),
            new InteractiveBrokersFeeModel(),
            new ConstantSlippageModel(0m),
            new ImmediateSettlementModel(),
            Securities.VolatilityModel.Null,
            new SecurityMarginModel(2m),
            new EquityDataFilter(),
            new AdjustedPriceVariationModel(),
            currencyConverter,
            registeredTypes
            )
 {
     Holdings        = new EquityHolding(this, currencyConverter);
     PrimaryExchange = primaryExchange;
 }
Exemplo n.º 2
0
 /// <summary>
 /// Construct a new security vehicle based on the user options.
 /// </summary>
 public Security(Symbol symbol,
                 SecurityExchangeHours exchangeHours,
                 Cash quoteCurrency,
                 SymbolProperties symbolProperties,
                 ICurrencyConverter currencyConverter,
                 IRegisteredSecurityDataTypesProvider registeredTypesProvider
                 )
     : this(symbol,
            quoteCurrency,
            symbolProperties,
            new SecurityExchange(exchangeHours),
            new SecurityCache(),
            new SecurityPortfolioModel(),
            new ImmediateFillModel(),
            new InteractiveBrokersFeeModel(),
            new ConstantSlippageModel(0),
            new ImmediateSettlementModel(),
            Securities.VolatilityModel.Null,
            new SecurityMarginModel(),
            new SecurityDataFilter(),
            new SecurityPriceVariationModel(),
            currencyConverter,
            registeredTypesProvider
            )
 {
 }
Exemplo n.º 3
0
 /// <summary>
 /// Constructor for the Future security
 /// </summary>
 /// <param name="symbol">The subscription security symbol</param>
 /// <param name="exchangeHours">Defines the hours this exchange is open</param>
 /// <param name="quoteCurrency">The cash object that represent the quote currency</param>
 /// <param name="symbolProperties">The symbol properties for this security</param>
 /// <param name="currencyConverter">Currency converter used to convert <see cref="CashAmount"/>
 ///     instances into units of the account currency</param>
 /// <param name="registeredTypes">Provides all data types registered in the algorithm</param>
 public Future(Symbol symbol,
               SecurityExchangeHours exchangeHours,
               Cash quoteCurrency,
               SymbolProperties symbolProperties,
               ICurrencyConverter currencyConverter,
               IRegisteredSecurityDataTypesProvider registeredTypes,
               SecurityCache securityCache
               )
     : base(symbol,
            quoteCurrency,
            symbolProperties,
            new FutureExchange(exchangeHours),
            securityCache,
            new SecurityPortfolioModel(),
            new ImmediateFillModel(),
            new InteractiveBrokersFeeModel(),
            new ConstantSlippageModel(0),
            new ImmediateSettlementModel(),
            Securities.VolatilityModel.Null,
            new FutureMarginModel(),
            new SecurityDataFilter(),
            new SecurityPriceVariationModel(),
            currencyConverter,
            registeredTypes
            )
 {
     // for now all futures are cash settled as we don't allow underlying (Live Cattle?) to be posted on the account
     SettlementType    = SettlementType.Cash;
     Holdings          = new FutureHolding(this, currencyConverter);
     _symbolProperties = symbolProperties;
     SetFilter(TimeSpan.Zero, TimeSpan.FromDays(35));
 }
Exemplo n.º 4
0
 /// <summary>
 /// Constructor for the option security
 /// </summary>
 /// <param name="symbol">The symbol of the security</param>
 /// <param name="exchangeHours">Defines the hours this exchange is open</param>
 /// <param name="quoteCurrency">The cash object that represent the quote currency</param>
 /// <param name="symbolProperties">The symbol properties for this security</param>
 /// <param name="currencyConverter">Currency converter used to convert <see cref="CashAmount"/>
 /// instances into units of the account currency</param>
 /// <param name="registeredTypes">Provides all data types registered in the algorithm</param>
 public Option(Symbol symbol,
               SecurityExchangeHours exchangeHours,
               Cash quoteCurrency,
               OptionSymbolProperties symbolProperties,
               ICurrencyConverter currencyConverter,
               IRegisteredSecurityDataTypesProvider registeredTypes,
               SecurityCache securityCache)
     : base(symbol,
            quoteCurrency,
            symbolProperties,
            new OptionExchange(exchangeHours),
            securityCache,
            new OptionPortfolioModel(),
            new ImmediateFillModel(),
            new InteractiveBrokersFeeModel(),
            new ConstantSlippageModel(0),
            new ImmediateSettlementModel(),
            Securities.VolatilityModel.Null,
            new OptionMarginModel(),
            new OptionDataFilter(),
            new SecurityPriceVariationModel(),
            currencyConverter,
            registeredTypes
            )
 {
     ExerciseSettlement = SettlementType.PhysicalDelivery;
     SetDataNormalizationMode(DataNormalizationMode.Raw);
     OptionExerciseModel = new DefaultExerciseModel();
     PriceModel          = new CurrentPriceOptionPriceModel();
     Holdings            = new OptionHolding(this, currencyConverter);
     _symbolProperties   = symbolProperties;
     SetFilter(-1, 1, TimeSpan.Zero, TimeSpan.FromDays(35));
 }
Exemplo n.º 5
0
 /// <summary>
 /// Construct the Equity Object
 /// </summary>
 public Equity(SecurityExchangeHours exchangeHours,
               SubscriptionDataConfig config,
               Cash quoteCurrency,
               SymbolProperties symbolProperties,
               ICurrencyConverter currencyConverter,
               IRegisteredSecurityDataTypesProvider registeredTypes)
     : base(
         config,
         quoteCurrency,
         symbolProperties,
         new EquityExchange(exchangeHours),
         new EquityCache(),
         new SecurityPortfolioModel(),
         new ImmediateFillModel(),
         new InteractiveBrokersFeeModel(),
         new ConstantSlippageModel(0m),
         new ImmediateSettlementModel(),
         Securities.VolatilityModel.Null,
         new SecurityMarginModel(2m),
         new EquityDataFilter(),
         new AdjustedPriceVariationModel(),
         currencyConverter,
         registeredTypes
         )
 {
     Holdings = new EquityHolding(this, currencyConverter);
 }
Exemplo n.º 6
0
        /// <summary>
        /// Constructor for the Crypto security
        /// </summary>
        /// <param name="symbol">The security's symbol</param>
        /// <param name="exchangeHours">Defines the hours this exchange is open</param>
        /// <param name="quoteCurrency">The cash object that represent the quote currency</param>
        /// <param name="symbolProperties">The symbol properties for this security</param>
        /// <param name="currencyConverter">Currency converter used to convert <see cref="CashAmount"/>
        /// instances into units of the account currency</param>
        /// <param name="registeredTypes">Provides all data types registered in the algorithm</param>
        /// <param name="securityCache">Cache to store <see cref="Security"/> data</param>
        public Crypto(Symbol symbol,
                      SecurityExchangeHours exchangeHours,
                      Cash quoteCurrency,
                      SymbolProperties symbolProperties,
                      ICurrencyConverter currencyConverter,
                      IRegisteredSecurityDataTypesProvider registeredTypes,
                      SecurityCache securityCache)
            : base(symbol,
                   quoteCurrency,
                   symbolProperties,
                   new CryptoExchange(exchangeHours),
                   securityCache,
                   new SecurityPortfolioModel(),
                   new ImmediateFillModel(),
                   new GDAXFeeModel(),
                   new ConstantSlippageModel(0),
                   new ImmediateSettlementModel(),
                   Securities.VolatilityModel.Null,
                   new CashBuyingPowerModel(),
                   new ForexDataFilter(),
                   new SecurityPriceVariationModel(),
                   currencyConverter,
                   registeredTypes
                   )
        {
            Holdings = new CryptoHolding(this, currencyConverter);

            // decompose the symbol into each currency pair
            string quoteCurrencySymbol, baseCurrencySymbol;

            DecomposeCurrencyPair(symbol, symbolProperties, out baseCurrencySymbol, out quoteCurrencySymbol);
            BaseCurrencySymbol = baseCurrencySymbol;
        }
Exemplo n.º 7
0
        /// <summary>
        /// Constructor for the forex security
        /// </summary>
        /// <param name="symbol">The security's symbol</param>
        /// <param name="exchangeHours">Defines the hours this exchange is open</param>
        /// <param name="quoteCurrency">The cash object that represent the quote currency</param>
        /// <param name="symbolProperties">The symbol properties for this security</param>
        /// <param name="currencyConverter">Currency converter used to convert <see cref="CashAmount"/>
        /// instances into units of the account currency</param>
        /// <param name="registeredTypes">Provides all data types registered in the algorithm</param>
        public Forex(Symbol symbol,
                     SecurityExchangeHours exchangeHours,
                     Cash quoteCurrency,
                     SymbolProperties symbolProperties,
                     ICurrencyConverter currencyConverter,
                     IRegisteredSecurityDataTypesProvider registeredTypes)
            : base(symbol,
                   quoteCurrency,
                   symbolProperties,
                   new ForexExchange(exchangeHours),
                   new ForexCache(),
                   new SecurityPortfolioModel(),
                   new ImmediateFillModel(),
                   new InteractiveBrokersFeeModel(),
                   new ConstantSlippageModel(0),
                   new ImmediateSettlementModel(),
                   Securities.VolatilityModel.Null,
                   new SecurityMarginModel(50m),
                   new ForexDataFilter(),
                   new SecurityPriceVariationModel(),
                   currencyConverter,
                   registeredTypes
                   )
        {
            Holdings = new ForexHolding(this, currencyConverter);

            // decompose the symbol into each currency pair
            string baseCurrencySymbol, quoteCurrencySymbol;

            DecomposeCurrencyPair(symbol.Value, out baseCurrencySymbol, out quoteCurrencySymbol);
            BaseCurrencySymbol = baseCurrencySymbol;
        }
Exemplo n.º 8
0
 /// <summary>
 /// Constructor for the future option security
 /// </summary>
 /// <param name="symbol">Symbol of the future option</param>
 /// <param name="exchangeHours">Exchange hours of the future option</param>
 /// <param name="quoteCurrency">Quoted currency of the future option</param>
 /// <param name="symbolProperties">Symbol properties of the future option</param>
 /// <param name="currencyConverter">Currency converter</param>
 /// <param name="registeredTypes">Provides all data types registered to the algorithm</param>
 /// <param name="securityCache">Cache of security objects</param>
 /// <param name="underlying">Future underlying security</param>
 public FutureOption(Symbol symbol,
                     SecurityExchangeHours exchangeHours,
                     Cash quoteCurrency,
                     OptionSymbolProperties symbolProperties,
                     ICurrencyConverter currencyConverter,
                     IRegisteredSecurityDataTypesProvider registeredTypes,
                     SecurityCache securityCache,
                     Security underlying)
     : base(symbol,
            quoteCurrency,
            symbolProperties,
            new OptionExchange(exchangeHours),
            securityCache,
            new OptionPortfolioModel(),
            new ImmediateFillModel(),
            new InteractiveBrokersFeeModel(),
            new ConstantSlippageModel(0),
            new ImmediateSettlementModel(),
            Securities.VolatilityModel.Null,
            null,
            new OptionDataFilter(),
            new SecurityPriceVariationModel(),
            currencyConverter,
            registeredTypes,
            underlying
            )
 {
     BuyingPowerModel = new FuturesOptionsMarginModel(0, this);
 }
Exemplo n.º 9
0
 /// <summary>
 /// Constructor for the INDEX security
 /// </summary>
 /// <param name="symbol">The security's symbol</param>
 /// <param name="exchangeHours">Defines the hours this exchange is open</param>
 /// <param name="quoteCurrency">The cash object that represent the quote currency</param>
 /// <param name="symbolProperties">The symbol properties for this security</param>
 /// <param name="currencyConverter">Currency converter used to convert <see cref="CashAmount"/>
 /// instances into units of the account currency</param>
 /// <param name="registeredTypes">Provides all data types registered in the algorithm</param>
 public Index(Symbol symbol,
              SecurityExchangeHours exchangeHours,
              Cash quoteCurrency,
              SymbolProperties symbolProperties,
              ICurrencyConverter currencyConverter,
              IRegisteredSecurityDataTypesProvider registeredTypes,
              SecurityCache securityCache)
     : base(symbol,
            quoteCurrency,
            symbolProperties,
            new IndexExchange(exchangeHours),
            securityCache,
            new SecurityPortfolioModel(),
            new ImmediateFillModel(),
            new ConstantFeeModel(0),
            new ConstantSlippageModel(0),
            new ImmediateSettlementModel(),
            Securities.VolatilityModel.Null,
            new SecurityMarginModel(50m),
            new IndexDataFilter(),
            new SecurityPriceVariationModel(),
            currencyConverter,
            registeredTypes
            )
 {
     Holdings = new IndexHolding(this, currencyConverter);
 }
Exemplo n.º 10
0
 /// <summary>
 /// Constructor for the index option security
 /// </summary>
 /// <param name="symbol">Symbol of the index option</param>
 /// <param name="exchangeHours">Exchange hours of the index option</param>
 /// <param name="quoteCurrency">Quoted currency of the index option</param>
 /// <param name="symbolProperties">Symbol properties of the index option</param>
 /// <param name="currencyConverter">Currency converter</param>
 /// <param name="registeredTypes">Provides all data types registered to the algorithm</param>
 /// <param name="securityCache">Cache of security objects</param>
 /// <param name="settlementType">Settlement type for the index option. Most index options are cash-settled.</param>
 public IndexOption(Symbol symbol,
                    SecurityExchangeHours exchangeHours,
                    Cash quoteCurrency,
                    IndexOptionSymbolProperties symbolProperties,
                    ICurrencyConverter currencyConverter,
                    IRegisteredSecurityDataTypesProvider registeredTypes,
                    SecurityCache securityCache,
                    SettlementType settlementType = SettlementType.Cash)
     : base(symbol,
            quoteCurrency,
            symbolProperties,
            new OptionExchange(exchangeHours),
            securityCache,
            new OptionPortfolioModel(),
            new ImmediateFillModel(),
            new InteractiveBrokersFeeModel(),
            new ConstantSlippageModel(0),
            new ImmediateSettlementModel(),
            Securities.VolatilityModel.Null,
            new OptionMarginModel(),
            new OptionDataFilter(),
            new SecurityPriceVariationModel(),
            currencyConverter,
            registeredTypes
            )
 {
     ExerciseSettlement = settlementType;
 }
Exemplo n.º 11
0
 /// <summary>
 /// Creates a new instance of the SecurityService class
 /// </summary>
 public SecurityService(CashBook cashBook,
                        MarketHoursDatabase marketHoursDatabase,
                        SymbolPropertiesDatabase symbolPropertiesDatabase,
                        ISecurityInitializerProvider securityInitializerProvider,
                        IRegisteredSecurityDataTypesProvider registeredTypes)
 {
     _cashBook                    = cashBook;
     _registeredTypes             = registeredTypes;
     _marketHoursDatabase         = marketHoursDatabase;
     _symbolPropertiesDatabase    = symbolPropertiesDatabase;
     _securityInitializerProvider = securityInitializerProvider;
 }
Exemplo n.º 12
0
        /// <summary>
        /// Construct a new security vehicle based on the user options.
        /// </summary>
        protected Security(Symbol symbol,
                           Cash quoteCurrency,
                           SymbolProperties symbolProperties,
                           SecurityExchange exchange,
                           SecurityCache cache,
                           ISecurityPortfolioModel portfolioModel,
                           IFillModel fillModel,
                           IFeeModel feeModel,
                           ISlippageModel slippageModel,
                           ISettlementModel settlementModel,
                           IVolatilityModel volatilityModel,
                           IBuyingPowerModel buyingPowerModel,
                           ISecurityDataFilter dataFilter,
                           IPriceVariationModel priceVariationModel,
                           ICurrencyConverter currencyConverter,
                           IRegisteredSecurityDataTypesProvider registeredTypesProvider
                           )
        {
            if (symbolProperties == null)
            {
                throw new ArgumentNullException(nameof(symbolProperties), "Security requires a valid SymbolProperties instance.");
            }

            if (symbolProperties.QuoteCurrency != quoteCurrency.Symbol)
            {
                throw new ArgumentException("symbolProperties.QuoteCurrency must match the quoteCurrency.Symbol");
            }

            this._currencyConverter = currencyConverter;

            Symbol              = symbol;
            SubscriptionsBag    = new ConcurrentBag <SubscriptionDataConfig>();
            QuoteCurrency       = quoteCurrency;
            SymbolProperties    = symbolProperties;
            IsTradable          = true;
            Cache               = cache;
            Exchange            = exchange;
            DataFilter          = dataFilter;
            PriceVariationModel = priceVariationModel;
            PortfolioModel      = portfolioModel;
            BuyingPowerModel    = buyingPowerModel;
            FillModel           = fillModel;
            FeeModel            = feeModel;
            SlippageModel       = slippageModel;
            SettlementModel     = settlementModel;
            VolatilityModel     = volatilityModel;
            Holdings            = new SecurityHolding(this, currencyConverter);
            Data              = new DynamicSecurityData(registeredTypesProvider);
            Cache.DataStored += (sender, args) => Data.StoreData(args.DataType, args.Data);

            UpdateSubscriptionProperties();
        }
Exemplo n.º 13
0
 /// <summary>
 /// Creates a new instance of the SecurityService class
 /// </summary>
 public SecurityService(CashBook cashBook,
                        MarketHoursDatabase marketHoursDatabase,
                        SymbolPropertiesDatabase symbolPropertiesDatabase,
                        ISecurityInitializerProvider securityInitializerProvider,
                        IRegisteredSecurityDataTypesProvider registeredTypes,
                        SecurityCacheProvider cacheProvider,
                        IPrimaryExchangeProvider primaryExchangeProvider = null)
 {
     _cashBook                    = cashBook;
     _registeredTypes             = registeredTypes;
     _marketHoursDatabase         = marketHoursDatabase;
     _symbolPropertiesDatabase    = symbolPropertiesDatabase;
     _securityInitializerProvider = securityInitializerProvider;
     _cacheProvider               = cacheProvider;
     _primaryExchangeProvider     = primaryExchangeProvider;
 }
Exemplo n.º 14
0
 /// <summary>
 /// Creates instance of the Option class.
 /// </summary>
 /// <remarks>
 /// Allows for the forwarding of the security configuration to the
 /// base Security constructor
 /// </remarks>
 protected Option(Symbol symbol,
                  Cash quoteCurrency,
                  SymbolProperties symbolProperties,
                  SecurityExchange exchange,
                  SecurityCache cache,
                  ISecurityPortfolioModel portfolioModel,
                  IFillModel fillModel,
                  IFeeModel feeModel,
                  ISlippageModel slippageModel,
                  ISettlementModel settlementModel,
                  IVolatilityModel volatilityModel,
                  IBuyingPowerModel buyingPowerModel,
                  ISecurityDataFilter dataFilter,
                  IPriceVariationModel priceVariationModel,
                  ICurrencyConverter currencyConverter,
                  IRegisteredSecurityDataTypesProvider registeredTypesProvider,
                  Security underlying
                  ) : base(
         symbol,
         quoteCurrency,
         symbolProperties,
         exchange,
         cache,
         portfolioModel,
         fillModel,
         feeModel,
         slippageModel,
         settlementModel,
         volatilityModel,
         buyingPowerModel,
         dataFilter,
         priceVariationModel,
         currencyConverter,
         registeredTypesProvider
         )
 {
     ExerciseSettlement = SettlementType.PhysicalDelivery;
     SetDataNormalizationMode(DataNormalizationMode.Raw);
     OptionExerciseModel = new DefaultExerciseModel();
     PriceModel          = new CurrentPriceOptionPriceModel();
     Holdings            = new OptionHolding(this, currencyConverter);
     _symbolProperties   = (OptionSymbolProperties)symbolProperties;
     SetFilter(-1, 1, TimeSpan.Zero, TimeSpan.FromDays(35));
     Underlying = underlying;
 }
Exemplo n.º 15
0
 /// <summary>
 /// Temporary convenience constructor
 /// </summary>
 protected Security(SubscriptionDataConfig config,
                    Cash quoteCurrency,
                    SymbolProperties symbolProperties,
                    SecurityExchange exchange,
                    SecurityCache cache,
                    ISecurityPortfolioModel portfolioModel,
                    IFillModel fillModel,
                    IFeeModel feeModel,
                    ISlippageModel slippageModel,
                    ISettlementModel settlementModel,
                    IVolatilityModel volatilityModel,
                    IBuyingPowerModel buyingPowerModel,
                    ISecurityDataFilter dataFilter,
                    IPriceVariationModel priceVariationModel,
                    ICurrencyConverter currencyConverter,
                    IRegisteredSecurityDataTypesProvider registeredTypesProvider
                    )
     : this(config.Symbol,
            quoteCurrency,
            symbolProperties,
            exchange,
            cache,
            portfolioModel,
            fillModel,
            feeModel,
            slippageModel,
            settlementModel,
            volatilityModel,
            buyingPowerModel,
            dataFilter,
            priceVariationModel,
            currencyConverter,
            registeredTypesProvider
            )
 {
     SubscriptionsBag.Add(config);
     UpdateSubscriptionProperties();
 }
Exemplo n.º 16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DynamicSecurityData"/> class
 /// </summary>
 /// <param name="registeredTypes">Provides all the registered data types for the algorithm</param>
 /// <param name="cache">The security cache</param>
 public DynamicSecurityData(IRegisteredSecurityDataTypesProvider registeredTypes, SecurityCache cache)
 {
     _registeredTypes = registeredTypes;
     _cache           = cache;
 }
Exemplo n.º 17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DynamicSecurityData"/> class
 /// </summary>
 /// <param name="registeredTypes">Provides all the registered data types for the algorithm</param>
 public DynamicSecurityData(IRegisteredSecurityDataTypesProvider registeredTypes)
 {
     _registeredTypes = registeredTypes;
 }
Exemplo n.º 18
0
        /// <summary>
        /// Creates a new instance of the DataManager
        /// </summary>
        public DataManager(
            IDataFeed dataFeed,
            UniverseSelection universeSelection,
            IAlgorithm algorithm,
            ITimeKeeper timeKeeper,
            MarketHoursDatabase marketHoursDatabase,
            bool liveMode,
            IRegisteredSecurityDataTypesProvider registeredTypesProvider,
            IDataPermissionManager dataPermissionManager)
        {
            _dataFeed         = dataFeed;
            UniverseSelection = universeSelection;
            UniverseSelection.SetDataManager(this);
            _algorithmSettings       = algorithm.Settings;
            AvailableDataTypes       = SubscriptionManager.DefaultDataTypes();
            _timeKeeper              = timeKeeper;
            _marketHoursDatabase     = marketHoursDatabase;
            _liveMode                = liveMode;
            _registeredTypesProvider = registeredTypesProvider;
            _dataPermissionManager   = dataPermissionManager;

            // wire ourselves up to receive notifications when universes are added/removed
            algorithm.UniverseManager.CollectionChanged += (sender, args) =>
            {
                switch (args.Action)
                {
                case NotifyCollectionChangedAction.Add:
                    foreach (var universe in args.NewItems.OfType <Universe>())
                    {
                        var config = universe.Configuration;
                        var start  = algorithm.UtcTime;

                        var end = algorithm.LiveMode ? Time.EndOfTime
                                : algorithm.EndDate.ConvertToUtc(algorithm.TimeZone);

                        Security security;
                        if (!algorithm.Securities.TryGetValue(config.Symbol, out security))
                        {
                            // create a canonical security object if it doesn't exist
                            security = new Security(
                                _marketHoursDatabase.GetExchangeHours(config),
                                config,
                                algorithm.Portfolio.CashBook[algorithm.AccountCurrency],
                                SymbolProperties.GetDefault(algorithm.AccountCurrency),
                                algorithm.Portfolio.CashBook,
                                RegisteredSecurityDataTypesProvider.Null,
                                new SecurityCache()
                                );
                        }
                        AddSubscription(
                            new SubscriptionRequest(true,
                                                    universe,
                                                    security,
                                                    config,
                                                    start,
                                                    end));
                    }
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (var universe in args.OldItems.OfType <Universe>())
                    {
                        // removing the subscription will be handled by the SubscriptionSynchronizer
                        // in the next loop as well as executing a UniverseSelection one last time.
                        if (!universe.DisposeRequested)
                        {
                            universe.Dispose();
                        }
                    }
                    break;

                default:
                    throw new NotImplementedException("The specified action is not implemented: " + args.Action);
                }
            };
        }