/// <summary>
 /// Initializes a new instance of the <see cref="DataFeedPacket"/> class
 /// </summary>
 /// <param name="security">The security whose data is held in this packet</param>
 /// <param name="configuration">The subscription configuration that produced this data</param>
 /// <param name="isSubscriptionRemoved">Reference to whether or not the subscription has since been removed, defaults to false</param>
 public DataFeedPacket(ISecurityPrice security, SubscriptionDataConfig configuration, IReadOnlyRef <bool> isSubscriptionRemoved = null)
     : this(security,
            configuration,
            new List <BaseData>(4), // performance: by default the list has 0 capacity, so lets initialize it with at least 4 (which is the default)
            isSubscriptionRemoved)
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DataFeedPacket"/> class
 /// </summary>
 /// <param name="security">The security whose data is held in this packet</param>
 /// <param name="configuration">The subscription configuration that produced this data</param>
 /// <param name="data">The data to add to this packet. The list reference is reused
 /// internally and NOT copied.</param>
 /// <param name="isSubscriptionRemoved">Reference to whether or not the subscription has since been removed, defaults to false</param>
 public DataFeedPacket(ISecurityPrice security, SubscriptionDataConfig configuration, List <BaseData> data, IReadOnlyRef <bool> isSubscriptionRemoved = null)
 {
     Security      = security;
     Configuration = configuration;
     Data          = data;
     _isRemoved    = isSubscriptionRemoved ?? Ref.Create(false);
 }
Exemple #3
0
 public void SetSecurityPriceData(ISecurityPrice price)
 {
     if (price != null)
     {
         this.SecurityPriceData = new SecurityPriceData(price);
     }
     else
     {
         throw new ArgumentNullException("null ISecurityPrice was passed to SetSecurityPriceData Method");
     }
 }
Exemple #4
0
 public SecurityPriceData(ISecurityPrice priceData)
 {
     if (priceData != null)
     {
         this.Id           = priceData.Id;
         this.Index        = priceData.Index;
         this.Price        = priceData.Price;
         this.PriceDate    = priceData.PriceDate;
         this.IsIdentified = priceData.IsIdentified;
     }
 }
Exemple #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Subscription"/> class with a universe
        /// </summary>
        /// <param name="subscriptionRequest">Specified for universe subscriptions</param>
        /// <param name="enumerator">The subscription's data source</param>
        /// <param name="timeZoneOffsetProvider">The offset provider used to convert data local times to utc</param>
        public Subscription(
            SubscriptionRequest subscriptionRequest,
            IEnumerator <SubscriptionData> enumerator,
            TimeZoneOffsetProvider timeZoneOffsetProvider)
        {
            _subscriptionRequests = new List <SubscriptionRequest> {
                subscriptionRequest
            };
            _enumerator = enumerator;
            Security    = subscriptionRequest.Security;
            IsUniverseSelectionSubscription = subscriptionRequest.IsUniverseSubscription;
            Configuration  = subscriptionRequest.Configuration;
            OffsetProvider = timeZoneOffsetProvider;
            TimeZone       = subscriptionRequest.Security.Exchange.TimeZone;
            UtcStartTime   = subscriptionRequest.StartTimeUtc;
            UtcEndTime     = subscriptionRequest.EndTimeUtc;

            RemovedFromUniverse = Ref.CreateReadOnly(() => _removedFromUniverse);
        }
        private bool HandleFuturesData(DateTime algorithmTime, BaseData baseData, FuturesChains futuresChains, ISecurityPrice security)
        {
            var symbol = baseData.Symbol;

            FuturesChain chain;
            var          canonical = symbol.Canonical;

            if (!futuresChains.TryGetValue(canonical, out chain))
            {
                chain = new FuturesChain(canonical, algorithmTime);
                futuresChains[canonical] = chain;
            }

            var universeData = baseData as FuturesChainUniverseDataCollection;

            if (universeData != null)
            {
                foreach (var contractSymbol in universeData.FilteredContracts)
                {
                    chain.FilteredContracts.Add(contractSymbol);
                }
                return(false);
            }

            FuturesContract contract;

            if (!chain.Contracts.TryGetValue(baseData.Symbol, out contract))
            {
                var underlyingSymbol = baseData.Symbol.Underlying;
                contract = new FuturesContract(baseData.Symbol, underlyingSymbol)
                {
                    Time         = baseData.EndTime,
                    LastPrice    = security.Close,
                    Volume       = (long)security.Volume,
                    BidPrice     = security.BidPrice,
                    BidSize      = (long)security.BidSize,
                    AskPrice     = security.AskPrice,
                    AskSize      = (long)security.AskSize,
                    OpenInterest = security.OpenInterest
                };
                chain.Contracts[baseData.Symbol] = contract;
            }

            // populate ticks and tradebars dictionaries with no aux data
            switch (baseData.DataType)
            {
            case MarketDataType.Tick:
                var tick = (Tick)baseData;
                chain.Ticks.Add(tick.Symbol, tick);
                UpdateContract(contract, tick);
                break;

            case MarketDataType.TradeBar:
                var tradeBar = (TradeBar)baseData;
                chain.TradeBars[symbol] = tradeBar;
                UpdateContract(contract, tradeBar);
                break;

            case MarketDataType.QuoteBar:
                var quote = (QuoteBar)baseData;
                chain.QuoteBars[symbol] = quote;
                UpdateContract(contract, quote);
                break;

            case MarketDataType.Base:
                chain.AddAuxData(baseData);
                break;
            }
            return(true);
        }
        private bool HandleOptionData(DateTime algorithmTime, BaseData baseData, OptionChains optionChains, ISecurityPrice security, Lazy <Slice> sliceFuture, IReadOnlyDictionary <Symbol, BaseData> optionUnderlyingUpdates)
        {
            var symbol = baseData.Symbol;

            OptionChain chain;
            var         canonical = symbol.Canonical;

            if (!optionChains.TryGetValue(canonical, out chain))
            {
                chain = new OptionChain(canonical, algorithmTime);
                optionChains[canonical] = chain;
            }

            // set the underlying current data point in the option chain
            var option = security as IOptionPrice;

            if (option != null)
            {
                if (option.Underlying == null)
                {
                    Log.Error($"TimeSlice.HandleOptionData(): {algorithmTime}: Option underlying is null");
                    return(false);
                }

                BaseData underlyingData;
                if (!optionUnderlyingUpdates.TryGetValue(option.Underlying.Symbol, out underlyingData))
                {
                    underlyingData = option.Underlying.GetLastData();
                }

                if (underlyingData == null)
                {
                    Log.Error($"TimeSlice.HandleOptionData(): {algorithmTime}: Option underlying GetLastData returned null");
                    return(false);
                }
                chain.Underlying = underlyingData;
            }

            var universeData = baseData as OptionChainUniverseDataCollection;

            if (universeData != null)
            {
                if (universeData.Underlying != null)
                {
                    foreach (var addedContract in chain.Contracts)
                    {
                        addedContract.Value.UnderlyingLastPrice = chain.Underlying.Price;
                    }
                }
                foreach (var contractSymbol in universeData.FilteredContracts)
                {
                    chain.FilteredContracts.Add(contractSymbol);
                }
                return(false);
            }

            OptionContract contract;

            if (!chain.Contracts.TryGetValue(baseData.Symbol, out contract))
            {
                var underlyingSymbol = baseData.Symbol.Underlying;
                contract = new OptionContract(baseData.Symbol, underlyingSymbol)
                {
                    Time                = baseData.EndTime,
                    LastPrice           = security.Close,
                    Volume              = (long)security.Volume,
                    BidPrice            = security.BidPrice,
                    BidSize             = (long)security.BidSize,
                    AskPrice            = security.AskPrice,
                    AskSize             = (long)security.AskSize,
                    OpenInterest        = security.OpenInterest,
                    UnderlyingLastPrice = chain.Underlying.Price
                };

                chain.Contracts[baseData.Symbol] = contract;

                if (option != null)
                {
                    contract.SetOptionPriceModel(() => option.EvaluatePriceModel(sliceFuture.Value, contract));
                }
            }

            // populate ticks and tradebars dictionaries with no aux data
            switch (baseData.DataType)
            {
            case MarketDataType.Tick:
                var tick = (Tick)baseData;
                chain.Ticks.Add(tick.Symbol, tick);
                UpdateContract(contract, tick);
                break;

            case MarketDataType.TradeBar:
                var tradeBar = (TradeBar)baseData;
                chain.TradeBars[symbol] = tradeBar;
                UpdateContract(contract, tradeBar);
                break;

            case MarketDataType.QuoteBar:
                var quote = (QuoteBar)baseData;
                chain.QuoteBars[symbol] = quote;
                UpdateContract(contract, quote);
                break;

            case MarketDataType.Base:
                chain.AddAuxData(baseData);
                break;
            }
            return(true);
        }
Exemple #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DataFeedPacket"/> class
 /// </summary>
 /// <param name="security">The security whose data is held in this packet</param>
 /// <param name="configuration">The subscription configuration that produced this data</param>
 /// <param name="isSubscriptionRemoved">Reference to whether or not the subscription has since been removed, defaults to false</param>
 public DataFeedPacket(ISecurityPrice security, SubscriptionDataConfig configuration, IReadOnlyRef <bool> isSubscriptionRemoved = null)
     : this(security, configuration, new List <BaseData>(), isSubscriptionRemoved)
 {
 }