/* * 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 { /// /// This is the simple average of the company's ROA over the last 5 years. Return on asset is calculated by dividing a company's annual earnings by its average total assets. /// public class ROA5YrAvg : MultiPeriodField { /// /// The default period /// protected override string DefaultPeriod => "FiveYears"; /// /// Gets/sets the FiveYears period value for the field /// [JsonProperty("5Y")] public double FiveYears => FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.OperationRatios_ROA5YrAvg_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.OperationRatios_ROA5YrAvg_FiveYears)); /// /// Returns the default value for the field /// public override double Value { get { var defaultValue = FundamentalService.Get(TimeProvider.GetUtcNow(), SecurityIdentifier, FundamentalProperty.OperationRatios_ROA5YrAvg_FiveYears); 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("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($"OperationRatios_ROA5YrAvg_{ConvertPeriod(period)}")); /// /// Creates a new empty instance /// public ROA5YrAvg() { } /// /// Creates a new instance for the given time and security /// public ROA5YrAvg(ITimeProvider timeProvider, SecurityIdentifier securityIdentifier) : base(timeProvider, securityIdentifier) { } } }