/* * 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 { /// /// Specific date on which a company released its filing to the public. /// public class FinancialStatementsFileDate : MultiPeriodField { /// /// The default period /// protected override string DefaultPeriod => "ThreeMonths"; /// /// Gets/sets the OneMonth period value for the field /// [JsonProperty("1M")] public DateTime OneMonth => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_OneMonth); /// /// Gets/sets the TwoMonths period value for the field /// [JsonProperty("2M")] public DateTime TwoMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_TwoMonths); /// /// Gets/sets the ThreeMonths period value for the field /// [JsonProperty("3M")] public DateTime ThreeMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_ThreeMonths); /// /// Gets/sets the SixMonths period value for the field /// [JsonProperty("6M")] public DateTime SixMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_SixMonths); /// /// Gets/sets the NineMonths period value for the field /// [JsonProperty("9M")] public DateTime NineMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_NineMonths); /// /// Gets/sets the TwelveMonths period value for the field /// [JsonProperty("12M")] public DateTime TwelveMonths => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_TwelveMonths); /// /// Returns true if the field contains a value for the default period /// public override bool HasValue => !BaseFundamentalDataProvider.IsNone(typeof(DateTime), FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_ThreeMonths)); /// /// Returns the default value for the field /// public override DateTime Value { get { var defaultValue = FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.FinancialStatements_FileDate_ThreeMonths); if (!BaseFundamentalDataProvider.IsNone(typeof(DateTime), 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(DateTime), 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 DateTime GetPeriodValue(string period) => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, Enum.Parse($"FinancialStatements_FileDate_{ConvertPeriod(period)}")); /// /// Creates a new empty instance /// public FinancialStatementsFileDate() { } /// /// Creates a new instance for the given time and security /// public FinancialStatementsFileDate(ITimeProvider timeProvider, SecurityIdentifier securityIdentifier) : base(timeProvider, securityIdentifier) { } } }