/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System.Collections.Generic; using System.Linq; namespace QuantConnect.Data { /// /// Helper methods used to determine different configurations properties /// for a given set of /// public static class SubscriptionDataConfigExtensions { /// /// Extension method used to obtain the highest /// for a given set of /// /// /// The highest resolution, if there /// are no subscriptions public static Resolution GetHighestResolution( this IEnumerable subscriptionDataConfigs) { return subscriptionDataConfigs .Select(x => x.Resolution) .DefaultIfEmpty(Resolution.Daily) .Min(); } /// /// Extension method used to determine if FillForward is enabled /// for a given set of /// /// /// True, at least one subscription has it enabled public static bool IsFillForward( this IEnumerable subscriptionDataConfigs) { return subscriptionDataConfigs.Any(x => x.FillDataForward); } /// /// Extension method used to determine if ExtendedMarketHours is enabled /// for a given set of /// /// /// True, at least one subscription has it enabled public static bool IsExtendedMarketHours( this IEnumerable subscriptionDataConfigs) { return subscriptionDataConfigs.Any(x => x.ExtendedMarketHours); } /// /// Extension method used to determine if it is custom data /// for a given set of /// /// /// True, at least one subscription is custom data public static bool IsCustomData( this IEnumerable subscriptionDataConfigs) { return subscriptionDataConfigs.Any(x => x.IsCustomData); } /// /// Extension method used to determine what /// to use for a given set of /// /// /// The first DataNormalizationMode, /// if there are no subscriptions public static DataNormalizationMode DataNormalizationMode( this IEnumerable subscriptionDataConfigs) { return subscriptionDataConfigs. Select(x => x.DataNormalizationMode) .DefaultIfEmpty(QuantConnect.DataNormalizationMode.Adjusted) .First(); } /// /// Sets the data normalization mode to be used by /// this set of /// public static void SetDataNormalizationMode( this IEnumerable subscriptionDataConfigs, DataNormalizationMode mode) { foreach (var subscription in subscriptionDataConfigs) { subscription.DataNormalizationMode = mode; } } } }