/// <summary> /// Add Market Data Required - generic data typing support as long as Type implements BaseData. /// </summary> /// <param name="dataType">Set the type of the data we're subscribing to.</param> /// <param name="symbol">Symbol of the asset we're like</param> /// <param name="resolution">Resolution of Asset Required</param> /// <param name="dataTimeZone">The time zone the subscription's data is time stamped in</param> /// <param name="exchangeTimeZone">Specifies the time zone of the exchange for the security this subscription is for. This /// is this output time zone, that is, the time zone that will be used on BaseData instances</param> /// <param name="isCustomData">True if this is custom user supplied data, false for normal QC data</param> /// <param name="fillDataForward">when there is no data pass the last tradebar forward</param> /// <param name="extendedMarketHours">Request premarket data as well when true </param> /// <param name="isInternalFeed">Set to true to prevent data from this subscription from being sent into the algorithm's OnData events</param> /// <param name="isFilteredSubscription">True if this subscription should have filters applied to it (market hours/user filters from security), false otherwise</param> /// <returns>The newly created <see cref="SubscriptionDataConfig"/></returns> public SubscriptionDataConfig Add(Type dataType, Symbol symbol, Resolution resolution, DateTimeZone dataTimeZone, DateTimeZone exchangeTimeZone, bool isCustomData, bool fillDataForward = true, bool extendedMarketHours = false, bool isInternalFeed = false, bool isFilteredSubscription = true) { if (dataTimeZone == null) { throw new ArgumentNullException("dataTimeZone", "DataTimeZone is a required parameter for new subscriptions. Set to the time zone the raw data is time stamped in."); } if (exchangeTimeZone == null) { throw new ArgumentNullException("exchangeTimeZone", "ExchangeTimeZone is a required parameter for new subscriptions. Set to the time zone the security exchange resides in."); } //Create: var newConfig = new SubscriptionDataConfig(dataType, symbol, resolution, dataTimeZone, exchangeTimeZone, fillDataForward, extendedMarketHours, isInternalFeed, isCustomData, isFilteredSubscription: isFilteredSubscription); //Add to subscription list: make sure we don't have his symbol: Subscriptions.Add(newConfig); // add the time zone to our time keeper _timeKeeper.AddTimeZone(exchangeTimeZone); // if is custom data, sets HasCustomData to true HasCustomData = HasCustomData || isCustomData; return(newConfig); }
public void AddingDuplicateTimeZoneDoesntAdd() { var reference = new DateTime(2000, 01, 01); var timeKeeper = new TimeKeeper(reference, new[] { TimeZones.NewYork }); var localTimeKeeper = timeKeeper.GetLocalTimeKeeper(TimeZones.NewYork); timeKeeper.AddTimeZone(TimeZones.NewYork); Assert.AreEqual(localTimeKeeper, timeKeeper.GetLocalTimeKeeper(TimeZones.NewYork)); }
public void AddingDuplicateTimeZoneDoesntAdd() { var reference = new DateTime(2000, 01, 01); var timeKeeper = new TimeKeeper(reference, new[] { TimeZones.NewYork }); var localTimeKeeper = timeKeeper.GetLocalTimeKeeper(TimeZones.NewYork); timeKeeper.AddTimeZone(TimeZones.NewYork); Assert.AreEqual(localTimeKeeper, timeKeeper.GetLocalTimeKeeper(TimeZones.NewYork)); }
/// <summary> /// Gets existing or adds new <see cref="SubscriptionDataConfig"/> /// </summary> /// <returns>Returns the SubscriptionDataConfig instance used</returns> public SubscriptionDataConfig GetOrAdd(SubscriptionDataConfig newConfig) { newConfig = _subscriptionManager.SubscriptionManagerGetOrAdd(newConfig); // add the time zone to our time keeper _timeKeeper.AddTimeZone(newConfig.ExchangeTimeZone); // if is custom data, sets HasCustomData to true HasCustomData = HasCustomData || newConfig.IsCustomData; return(newConfig); }
/// <summary> /// Sets the time zone of the <see cref="Time"/> property in the algorithm /// </summary> /// <param name="timeZone">The desired time zone</param> public void SetTimeZone(DateTimeZone timeZone) { if (_locked) { throw new Exception("Algorithm.SetTimeZone(): Cannot change time zone after algorithm running."); } if (timeZone == null) { throw new ArgumentNullException("timeZone"); } _timeKeeper.AddTimeZone(timeZone); _localTimeKeeper = _timeKeeper.GetLocalTimeKeeper(timeZone); }
public SubscriptionDataConfig Add(Type dataType, Symbol symbol, Resolution resolution, DateTimeZone dataTimeZone, DateTimeZone exchangeTimeZone, bool isCustomData, bool fillDataForward = true, bool extendedMarketHours = false, bool isInternalFeed = false, bool isFilteredSubscription = true) { if (dataTimeZone == null) { throw new ArgumentNullException("dataTimeZone", "DataTimeZone is a required parameter for new subscriptions. Set to the time zone the raw data is time stamped in."); } if (exchangeTimeZone == null) { throw new ArgumentNullException("exchangeTimeZone", "ExchangeTimeZone is a required parameter for new subscriptions. Set to the time zone the security exchange resides in."); } var newConfig = new SubscriptionDataConfig(dataType, symbol, resolution, dataTimeZone, exchangeTimeZone, fillDataForward, extendedMarketHours, isInternalFeed, isCustomData, isFilteredSubscription: isFilteredSubscription); Subscriptions.Add(newConfig); _timeKeeper.AddTimeZone(exchangeTimeZone); return(newConfig); }
/// <summary> /// Sets the time zone of the <see cref="Time"/> property in the algorithm /// </summary> /// <param name="timeZone">The desired time zone</param> public void SetTimeZone(DateTimeZone timeZone) { if (_locked) { throw new Exception("Algorithm.SetTimeZone(): Cannot change time zone after algorithm running."); } if (timeZone == null) { throw new ArgumentNullException("timeZone"); } _timeKeeper.AddTimeZone(timeZone); _localTimeKeeper = _timeKeeper.GetLocalTimeKeeper(timeZone); // the time rules need to know the default time zone as well TimeRules.SetDefaultTimeZone(timeZone); }
/// <summary> /// Add Market Data Required - generic data typing support as long as Type implements BaseData. /// </summary> /// <param name="dataType">Set the type of the data we're subscribing to.</param> /// <param name="tickType">Tick type for the subscription.</param> /// <param name="symbol">Symbol of the asset we're like</param> /// <param name="resolution">Resolution of Asset Required</param> /// <param name="dataTimeZone">The time zone the subscription's data is time stamped in</param> /// <param name="exchangeTimeZone">Specifies the time zone of the exchange for the security this subscription is for. This /// is this output time zone, that is, the time zone that will be used on BaseData instances</param> /// <param name="isCustomData">True if this is custom user supplied data, false for normal QC data</param> /// <param name="fillDataForward">when there is no data pass the last tradebar forward</param> /// <param name="extendedMarketHours">Request premarket data as well when true </param> /// <param name="isInternalFeed">Set to true to prevent data from this subscription from being sent into the algorithm's OnData events</param> /// <param name="isFilteredSubscription">True if this subscription should have filters applied to it (market hours/user filters from security), false otherwise</param> /// <returns>The newly created <see cref="SubscriptionDataConfig"/></returns> public SubscriptionDataConfig Add(Type dataType, TickType tickType, Symbol symbol, Resolution resolution, DateTimeZone dataTimeZone, DateTimeZone exchangeTimeZone, bool isCustomData, bool fillDataForward = true, bool extendedMarketHours = false, bool isInternalFeed = false, bool isFilteredSubscription = true) { if (dataTimeZone == null) { throw new ArgumentNullException("dataTimeZone", "DataTimeZone is a required parameter for new subscriptions. Set to the time zone the raw data is time stamped in."); } if (exchangeTimeZone == null) { throw new ArgumentNullException("exchangeTimeZone", "ExchangeTimeZone is a required parameter for new subscriptions. Set to the time zone the security exchange resides in."); } //Create: var newConfig = new SubscriptionDataConfig(dataType, symbol, resolution, dataTimeZone, exchangeTimeZone, fillDataForward, extendedMarketHours, isInternalFeed, isCustomData, isFilteredSubscription: isFilteredSubscription, tickType: tickType); //Add to subscription list: make sure we don't have this symbol: if (Subscriptions.Contains(newConfig)) { Log.Trace("SubscriptionManager.Add(): subscription already added: " + newConfig); return(newConfig); } Subscriptions.Add(newConfig); // count data subscriptions by symbol, ignoring multiple data types var uniqueCount = Subscriptions .Where(x => !x.Symbol.IsCanonical()) .DistinctBy(x => x.Symbol.Value) .Count(); if (uniqueCount > _algorithmSettings.DataSubscriptionLimit) { throw new Exception( string.Format( "The maximum number of concurrent market data subscriptions was exceeded ({0}). Please reduce the number of symbols requested or increase the limit using Settings.DataSubscriptionLimit.", _algorithmSettings.DataSubscriptionLimit)); } // add the time zone to our time keeper _timeKeeper.AddTimeZone(exchangeTimeZone); // if is custom data, sets HasCustomData to true HasCustomData = HasCustomData || isCustomData; return(newConfig); }
/// <summary> /// Add Market Data Required - generic data typing support as long as Type implements BaseData. /// </summary> /// <param name="dataType">Set the type of the data we're subscribing to.</param> /// <param name="security">Market Data Asset</param> /// <param name="symbol">Symbol of the asset we're like</param> /// <param name="resolution">Resolution of Asset Required</param> /// <param name="market">The market this security resides in</param> /// <param name="timeZone">The time zone the subscription's data is time stamped in</param> /// <param name="fillDataForward">when there is no data pass the last tradebar forward</param> /// <param name="extendedMarketHours">Request premarket data as well when true </param> /// <param name="isInternalFeed">Set to true to prevent data from this subscription from being sent into the algorithm's OnData events</param> /// <returns>The newly created <see cref="SubscriptionDataConfig"/></returns> public SubscriptionDataConfig Add(Type dataType, SecurityType security, Symbol symbol, Resolution resolution, string market, DateTimeZone timeZone, bool fillDataForward = true, bool extendedMarketHours = false, bool isInternalFeed = false) { if (timeZone == null) { throw new ArgumentNullException("timeZone", "TimeZone is a required parameter for new subscriptions. Set to the time zone the raw data is time stamped in."); } //Create: var newConfig = new SubscriptionDataConfig(dataType, security, symbol, resolution, market, timeZone, fillDataForward, extendedMarketHours, isInternalFeed); //Add to subscription list: make sure we don't have his symbol: Subscriptions.Add(newConfig); // add the time zone to our time keeper _timeKeeper.AddTimeZone(timeZone); return(newConfig); }