/* * 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 aggregate amount of research and development expenses during the year. /// public class ResearchAndDevelopmentIncomeStatement : MultiPeriodField { /// /// The default period /// protected override string DefaultPeriod => "TwelveMonths"; /// /// Gets/sets the OneMonth period value for the field /// [JsonProperty("1M")] public double OneMonth => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_IncomeStatement_ResearchAndDevelopment_OneMonth); /// /// Gets/sets the TwoMonths period value for the field /// [JsonProperty("2M")] public double TwoMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_IncomeStatement_ResearchAndDevelopment_TwoMonths); /// /// Gets/sets the ThreeMonths period value for the field /// [JsonProperty("3M")] public double ThreeMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_IncomeStatement_ResearchAndDevelopment_ThreeMonths); /// /// Gets/sets the SixMonths period value for the field /// [JsonProperty("6M")] public double SixMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_IncomeStatement_ResearchAndDevelopment_SixMonths); /// /// Gets/sets the NineMonths period value for the field /// [JsonProperty("9M")] public double NineMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_IncomeStatement_ResearchAndDevelopment_NineMonths); /// /// Gets/sets the TwelveMonths period value for the field /// [JsonProperty("12M")] public double TwelveMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_IncomeStatement_ResearchAndDevelopment_TwelveMonths); /// /// 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.FinancialStatements_IncomeStatement_ResearchAndDevelopment_TwelveMonths)); /// /// Returns the default value for the field /// public override double Value { get { var defaultValue = FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_IncomeStatement_ResearchAndDevelopment_TwelveMonths); 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("1M",OneMonth), new Tuple("2M",TwoMonths), new Tuple("3M",ThreeMonths), new Tuple("6M",SixMonths), new Tuple("9M",NineMonths), new Tuple("12M",TwelveMonths) }) { 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($"FinancialStatements_IncomeStatement_ResearchAndDevelopment_{ConvertPeriod(period)}")); /// /// Creates a new empty instance /// public ResearchAndDevelopmentIncomeStatement() { } /// /// Creates a new instance for the given time and security /// public ResearchAndDevelopmentIncomeStatement(ITimeProvider timeProvider, SecurityIdentifier securityIdentifier) : base(timeProvider, securityIdentifier) { } } }