/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2023 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; using System.Linq; using Python.Runtime; using Newtonsoft.Json; using System.Collections.Generic; using QuantConnect.Data.UniverseSelection; namespace QuantConnect.Data.Fundamental { /// /// The growth in the company's diluted EPS from continuing operations on a percentage basis. Morningstar calculates the annualized growth percentage based on the underlying diluted EPS from continuing operations reported in the Income Statement within the company filings or reports. /// public class DilutedContEPSGrowth : MultiPeriodField { /// /// The default period /// protected override string DefaultPeriod => "OneYear"; /// /// Gets/sets the OneYear period value for the field /// [JsonProperty("1Y")] public double OneYear => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.EarningRatios_DilutedContEPSGrowth_OneYear); /// /// Gets/sets the ThreeYears period value for the field /// [JsonProperty("3Y")] public double ThreeYears => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.EarningRatios_DilutedContEPSGrowth_ThreeYears); /// /// Gets/sets the ThreeMonths period value for the field /// [JsonProperty("3M")] public double ThreeMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.EarningRatios_DilutedContEPSGrowth_ThreeMonths); /// /// Gets/sets the FiveYears period value for the field /// [JsonProperty("5Y")] public double FiveYears => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.EarningRatios_DilutedContEPSGrowth_FiveYears); /// /// Returns true if the field contains a value for the default period /// public override bool HasValue => !BaseFundamentalDataProvider.IsNone(typeof(double), FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.EarningRatios_DilutedContEPSGrowth_OneYear)); /// /// Returns the default value for the field /// public override double Value { get { var defaultValue = FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.EarningRatios_DilutedContEPSGrowth_OneYear); if (!BaseFundamentalDataProvider.IsNone(typeof(double), defaultValue)) { return defaultValue; } return base.Value; } } /// /// Gets a dictionary of period names and values for the field /// /// The dictionary of period names and values public override IReadOnlyDictionary GetPeriodValues() { var result = new Dictionary(); foreach (var kvp in new[] { new Tuple("1Y",OneYear), new Tuple("3Y",ThreeYears), new Tuple("3M",ThreeMonths), new Tuple("5Y",FiveYears) }) { if(!BaseFundamentalDataProvider.IsNone(typeof(double), kvp.Item2)) { result[kvp.Item1] = kvp.Item2; } } return result; } /// /// Gets the value of the field for the requested period /// /// The requested period /// The value for the period public override double GetPeriodValue(string period) => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, Enum.Parse($"EarningRatios_DilutedContEPSGrowth_{ConvertPeriod(period)}")); /// /// Creates a new empty instance /// public DilutedContEPSGrowth() { } /// /// Creates a new instance for the given time and security /// public DilutedContEPSGrowth(ITimeProvider timeProvider, SecurityIdentifier securityIdentifier) : base(timeProvider, securityIdentifier) { } } }