/// <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); }
public void SetSecurityPriceData(ISecurityPrice price) { if (price != null) { this.SecurityPriceData = new SecurityPriceData(price); } else { throw new ArgumentNullException("null ISecurityPrice was passed to SetSecurityPriceData Method"); } }
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; } }
/// <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); }
/// <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) { }