/*
* 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;
using QuantConnect.Util;
using QuantConnect.Interfaces;
using QuantConnect.Configuration;
using QuantConnect.Data.Fundamental;
namespace QuantConnect.Data.UniverseSelection
{
///
/// Fundamental data provider service
///
public static class FundamentalService
{
private static IFundamentalDataProvider _fundamentalDataProvider;
///
/// Initializes the service
///
/// The data provider instance to use
/// True if running in live mode
public static void Initialize(IDataProvider dataProvider, bool liveMode)
{
Initialize(dataProvider, Config.Get("fundamental-data-provider", nameof(CoarseFundamentalDataProvider)), liveMode);
}
///
/// Initializes the service
///
/// The data provider instance to use
/// The fundamental data provider
/// True if running in live mode
public static void Initialize(IDataProvider dataProvider, string fundamentalDataProvider, bool liveMode)
{
Initialize(dataProvider, Composer.Instance.GetExportedValueByTypeName(fundamentalDataProvider), liveMode);
}
///
/// Initializes the service
///
/// The data provider instance to use
/// The fundamental data provider
/// True if running in live mode
public static void Initialize(IDataProvider dataProvider, IFundamentalDataProvider fundamentalDataProvider, bool liveMode)
{
_fundamentalDataProvider = fundamentalDataProvider;
_fundamentalDataProvider.Initialize(dataProvider, liveMode);
}
///
/// Will fetch the requested fundamental information for the requested time and symbol
///
/// The expected data type
/// The time to request this data for
/// The symbol instance
/// The name of the fundamental property
/// The fundamental information
public static T Get(DateTime time, Symbol symbol, FundamentalProperty name) => Get(time, symbol.ID, name);
///
/// Will fetch the requested fundamental information for the requested time and symbol
///
/// The expected data type
/// The time to request this data for
/// The security identifier
/// The name of the fundamental property
/// The fundamental information
public static T Get(DateTime time, SecurityIdentifier securityIdentifier, FundamentalProperty name)
{
return _fundamentalDataProvider.Get(time.Date, securityIdentifier, name);
}
}
}